Compare commits

...

58 commits

Author SHA1 Message Date
Naumann e7b3d2d742 . 2020-06-11 09:34:31 +02:00
nek0 a4b6d41a25 don't track any database 2020-06-05 11:59:26 +02:00
nek0 36cefe06ac remove database from repo 2020-06-05 11:57:39 +02:00
nek0 0fc3569322 Merge branch 'master' of https://gitea.nek0.eu/nek0/BuecherwurmAPI 2020-06-05 11:56:07 +02:00
nek0 f04f7f4892 generate ebooks from imports 2020-06-05 11:55:29 +02:00
Naumann 1ec245c6e2 small changes in KatalogModel 2020-06-04 15:31:47 +02:00
nek0 f94d8b2c65 make items from import 2020-06-04 14:24:52 +02:00
nek0 ea81721be3 Merge branch 'master' of https://gitea.nek0.eu/nek0/BuecherwurmAPI 2020-06-04 14:15:51 +02:00
nek0 4eaabe584b Merge branch 'Amedeo' 2020-06-04 14:08:20 +02:00
Naumann 4a6bb9313b Merge remote-tracking branch 'origin/Felix' 2020-06-04 14:06:54 +02:00
Naumann d545f31f65 . 2020-06-04 14:06:29 +02:00
nek0 27da067015 made imports, added magazine, DB self-init and fix 2020-06-04 14:04:56 +02:00
Naumann bd4f034d7b zwischenstand 2020-06-04 13:43:01 +02:00
Naumann 8d81ab4843 bug fix 2020-06-04 12:23:32 +02:00
Naumann bb3f2f3fd0 Katalog fix 2020-06-04 11:38:01 +02:00
Naumann 74ecc0e285 new entry in db 2020-06-04 10:17:41 +02:00
nek0 27392c9799 Rename Table Books to Products to reflect magazines 2020-06-04 09:39:27 +02:00
Naumann b1f62f89e7 Merge branch 'master' of https://gitea.nek0.eu/nek0/BuecherwurmAPI into Felix 2020-06-04 09:35:10 +02:00
Naumann 3e369eff83 changed ENum to long 2020-06-04 09:34:31 +02:00
nek0 b3057362be create new empty database if not exists 2020-06-04 08:33:30 +02:00
nek0 859e1e6554 add initial json catalogues 2020-06-04 08:32:04 +02:00
Naumann 942a7d321b . 2020-06-04 07:39:45 +02:00
nek0 4f6451e80e Merge branch 'master' into Amedeo 2020-06-04 07:38:15 +02:00
Naumann cbfba6b578 Merge remote-tracking branch 'origin/master' into Felix 2020-06-03 13:45:19 +02:00
Naumann 7c62650341 Merge remote-tracking branch 'origin/master' into Felix 2020-06-03 13:44:21 +02:00
nek0 1ddbf6511f Merge branch 'Amedeo' 2020-06-03 13:43:40 +02:00
nek0 ffd841b526 finalized catalogue 2020-06-03 12:43:03 +02:00
nek0 b79db9d800 Merge remote-tracking branch 'origin/Felix' into Amedeo 2020-06-03 11:35:42 +02:00
nek0 56e1cc1452 reviewed, debugged and meowed with items 2020-06-03 11:34:12 +02:00
Naumann da74cbc6d5 . 2020-06-03 11:34:06 +02:00
nek0 f970ccc07e removed obsolete DTOs 2020-06-03 10:55:39 +02:00
nek0 1d49265230 make items queryable 2020-06-03 10:45:54 +02:00
Naumann ae3cbb0cd3 . 2020-06-03 10:19:45 +02:00
nek0 d0672366dc Merge remote-tracking branch 'origin/David' into Amedeo 2020-06-03 09:49:21 +02:00
Naumann 8b4c0c1e54 Merge remote-tracking branch 'origin/Amedeo' into Felix 2020-06-03 09:42:52 +02:00
Naumann 67eb721d38 zwischenstand 2020-06-03 09:41:45 +02:00
nek0 de7bc0871d review 2020-06-03 09:33:07 +02:00
nek0 a707f23dc2 db connection meowdy meow 2020-06-03 09:26:07 +02:00
David Renner a8b1761867 merged item und itempost 2020-06-03 09:20:55 +02:00
David Renner 8ffc0609dc leere Zeilen entfernt 2020-06-03 08:28:11 +02:00
David Renner 098c780366 Funktionen zur "Item" Gruppe hinzugefügt 2020-06-03 08:26:54 +02:00
Naumann a1ffee2e09 fixed AddBook and EditBook 2020-06-03 07:59:31 +02:00
Naumann 226faafafc added new Methodes to KatalogModel 2020-06-03 07:37:37 +02:00
David Renner bd0f852d9b zwischenstand - nicht funktionstüchtig! 2020-06-02 16:01:17 +02:00
David Renner eba2ba64fc fast vergessen 2020-06-02 14:24:26 +02:00
David Renner 7bdb85d842 update Item Models und Controller 2020-06-02 14:23:21 +02:00
Naumann 1637f45d0e Added KatalogModel 2020-06-02 12:55:17 +02:00
Naumann 7f94b25e57 Merge branch 'Felix' 2020-06-02 11:48:09 +02:00
Naumann 82df87a8c6 . 2020-06-02 11:47:19 +02:00
Naumann f02e1e35a8 Umstrukturierung Data zu Models 2020-06-02 11:16:45 +02:00
Jonas Schönbach 9d19fa9b14 Projekt repariert 2020-05-29 12:12:09 +02:00
Jonas Schönbach 70f6900661 Unnötige Dateien entfernt 2020-05-29 11:56:03 +02:00
Jonas Schönbach 042d97a005 Unnötige Dateien entfernt 2020-05-29 11:55:13 +02:00
Jonas Schönbach af576b75d0 Merge branch 'master' of https://gitea.nek0.eu/nek0/BuecherwurmAPI with 'DatenbankJonas' 2020-05-29 11:52:57 +02:00
Jonas Schönbach 6ce6c92210 Fehler berichtigt 2020-05-29 11:30:38 +02:00
Jonas Schönbach 89fcf8abd2 Struct für Tabellen hinzugefügt, GetLendById-Methode fertiggestellt und IdExits-Methode hinzugefügt 2020-05-29 11:18:23 +02:00
Jonas Schönbach 41a53631dd Datenbankunterstützung hinzugefügt 2020-05-28 16:14:36 +02:00
Jonas Schönbach 904f6c9413 Datenbankunterstützung hinzugefügt 2020-05-28 16:13:56 +02:00
61 changed files with 2812 additions and 24683 deletions

2
.gitignore vendored
View file

@ -11,6 +11,8 @@
*.userosscache
*.sln.docstates
*.db
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

View file

@ -1,13 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="7.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.4" />
</ItemGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="7.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.4" />
</ItemGroup>
<ItemGroup>
<None Remove="LongWormMemory.db" />
<Resource Include="LongWormMemory.db">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Resource>
</ItemGroup>
</Project>

View file

@ -1,69 +0,0 @@
using System.Collections.Generic;
using BuecherwurmAPI.Models;
using Microsoft.AspNetCore.Mvc;
using System.Linq;
//using Microsoft.EntityFrameworkCore;
using BuecherwurmAPI.Data;
namespace BuecherwurmAPI.Controllers
{
[Route("inventar")]
[ApiController]
public class InventarController : ControllerBase
{
private readonly IItemRepo _repository;
public InventarController(IItemRepo repository)
{
_repository = repository;
}
// GET Inventar
[HttpGet]
public ActionResult<IEnumerable<Item>> GetAllItems()
{
var items = _repository.GetAllItems();
return Ok(items);
}
// POST Inventar
[HttpPost]
public ActionResult<IEnumerable<Item>> NewItem(Item item)
{
return Ok(new Item
{
Id = item.Id,
BookId = item.BookId,
});
}
// GET Inventar/{id}
[HttpGet("{id}", Name = "GetItemByID")]
public ActionResult<IEnumerable<Item>> GetItemByID(int id)
{
var item = _repository.GetItemById(id);
if (item != null)
{
return Ok(item);
}
return NoContent();
}
// DELETE inventory/{id}
[HttpDelete("id")]
public ActionResult<IEnumerable<Item>> DeleteItem(int id)
{
var item = _repository.GetItemById(id);
if (item == null)
{
return NotFound();
}
_repository.DeleteItem(item);
return NoContent();
}
}
}

View file

@ -0,0 +1,67 @@
using System.Collections.Generic;
using BuecherwurmAPI.Models;
using Microsoft.AspNetCore.Mvc;
using System.Linq;
using Microsoft.Data.Sqlite;
//using Microsoft.EntityFrameworkCore;
namespace BuecherwurmAPI.Controllers
{
[Route("api/inventar")]
[ApiController]
public class ItemController : ControllerBase
{
private readonly ItemModel _repository;
public ItemController(IItem repository)
{
_repository = (ItemModel)repository;
}
// GET api/inventar
[HttpGet]
public ActionResult<IEnumerable<Item>> GetAllItems()
{
var items = _repository.GetAllItems();
return Ok(items);
}
// POST api/inventar
[HttpPost]
public ActionResult<IEnumerable<Item>> NewItem(ItemPost item)
{
var newItem = _repository.NewItem(item);
return Ok(newItem);
}
// GET api/nventar/{id}
[HttpGet("{itemId}")]
public ActionResult<IEnumerable<Item>> GetItemByID(long itemId)
{
var item = _repository.GetItemById(itemId);
if (item != null)
{
return Ok(item);
}
return NotFound();
}
// DELETE api/inventar/{id}
[HttpDelete("{itemId}")]
public ActionResult<IEnumerable<Item>> DeleteItem(long itemId)
{
var item = _repository.GetItemById(itemId);
if(item == null)
{
return NotFound();
}
_repository.DeleteItem(itemId);
return NoContent();
}
}
}

View file

@ -3,56 +3,48 @@ using BuecherwurmAPI.Models;
using Microsoft.AspNetCore.Mvc;
using System.Linq;
//using Microsoft.EntityFrameworkCore;
using BuecherwurmAPI.Data;
namespace BuecherwurmAPI.Controllers
{
[Route("katalog") ]
[Route("api/katalog") ]
[ApiController]
public class KatalogController :ControllerBase
{
private readonly IBookRepo _repository;
private readonly KatalogModel _repository;
public KatalogController (IBookRepo repository)
public KatalogController (ICatalogue repository)
{
_repository=repository;
_repository= (KatalogModel)repository;
}
// GET Katalog
[HttpGet]
public ActionResult<IEnumerable<Book>> GetAllBooks()
public ActionResult<IEnumerable<IProduct>> GetAllProducts()
{
var books =_repository.GetAllBooks();
return Ok(books);
var Products =_repository.GetAllProducts();
return Ok(Products);
}
// POST Katalog
[HttpPost]
public ActionResult<IEnumerable<Book>> NeuesBuch(Book book)
// POST katalog/buch
[HttpPost("buch")]
public ActionResult<Book> AddProduct(BookPost book)
{
return Ok(new Book
{
Name = book.Name,
Author= book.Author,
Country= book.Country,
Link= book.Link,
Language= book.Language,
Pages= book.Pages,
Year=book.Year,
ProductId =book.ProductId,
Category= book.Category,
ImageLink =book.ImageLink,
LendTime =book.LendTime,
LendType = book.LendType
});
var id = _repository.AddProduct(book);
return Ok(_repository.GetProductById(id));
}
// POST katalog/magazin
[HttpPost("magazin")]
public ActionResult<Magazin> AddProduct(MagazinPost book)
{
var id = _repository.AddProduct(book);
return Ok(_repository.GetProductById(id));
}
// GET katalog/{id}
[HttpGet("{id}", Name ="GetBookByID")]
public ActionResult <IEnumerable<Book>> GetBookByID(int id)
[HttpGet("{id}")]
public ActionResult <IProduct> GetProductByID(long id)
{
var book = _repository.GetBookById(id);
var book = _repository.GetProductById(id);
if (book != null)
{
return Ok(book);
@ -62,36 +54,23 @@ namespace BuecherwurmAPI.Controllers
}
// PUT Katalog/{id}
[HttpPut("id")]
public ActionResult<IEnumerable<Book>> BuchBearbeiten(Book book)
[HttpPut("{id}")]
public ActionResult<IProduct> EditProduct(long id, IProduct book)
{
return Ok(new Book
{
Name = book.Name,
Author= book.Author,
Country= book.Country,
Link= book.Link,
Language= book.Language,
Pages= book.Pages,
Year=book.Year,
ProductId =book.ProductId,
Category= book.Category,
ImageLink =book.ImageLink,
LendTime =book.LendTime,
LendType = book.LendType
});
_repository.EditProduct(id, book);
return Ok(book);
}
// DELETE katalog/{id}
[HttpDelete("id")]
public ActionResult<IEnumerable<Book>> BuchEntfernen (int id)
[HttpDelete("{id}")]
public ActionResult<IProduct> DeleteProduct (long id)
{
var book = _repository.GetBookById(id);
var book = _repository.GetProductById(id);
if(book == null)
{
return NotFound();
}
_repository.BuchEntfernen(book);
_repository.DeleteProduct(id);
return NoContent();
}

View file

@ -1,84 +1,79 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AutoMapper;
using BuecherwurmAPI.Data;
using BuecherwurmAPI.DTOs;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.JsonPatch;
using Microsoft.Extensions.Logging;
using BuecherwurmAPI.Models;
namespace BuecherwurmAPI.Controllers
{
[Route("api/leihvorgang")]
[ApiController]
public class LendController : ControllerBase
{
private readonly ILendRepo _repository;
private readonly IMapper _mapper;
public LendController(ILendRepo repository, IMapper mapper)
{
_repository = repository;
_mapper = mapper;
}
//GET api/leihvorgang
[HttpGet]
public ActionResult<IEnumerable<Lend>> LendsGet()
{
return Ok(_repository.GetAllLends());
}
//POST api/leihvorgang
[HttpPost]
public ActionResult<LendReadDTO> LendsPost(Lend lend)
{
/*
Internally a lend is stored with an id
but the client shouldn't be allowed to set or change it
therefore the package 'AutoMapper' is used to prevent errors
that could happen when doing this task manually.
It takes the information from the client and maps it to the
corresponding internal object which then will be returned.
Furthermore it could be used to keep some attributes secret.
Another nice effect of this is that the implementation could be changed
while the interface could be retained by some minor changes in the code.
DTO stands for Data Transfer Object
*/
var item = new Lend
{
Id = 256,
Customer = lend.Customer,
Returned = lend.Returned,
ItemId = lend.ItemId,
ReturnDate = lend.ReturnDate
};
return Ok(item);
//return Ok(_mapper.Map<LendReadDTO>(item));
}
//GET api/leihvorgang/{id}
[HttpGet("{id}")]
public ActionResult<Lend> LendById(int id)
{
var lend = _repository.GetLendById(id);
return Ok(lend);
}
//PATCH api/leihvorgang/{id}
[HttpPatch("{id}")]
public ActionResult LendPatchById(int id, JsonPatchDocument<Lend> patchDocument)
{
var lend = _repository.GetLendById(id);
if (lend == null)
{
return NotFound();
}
return Ok();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AutoMapper;
using BuecherwurmAPI.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.JsonPatch;
using Microsoft.Extensions.Logging;
using Microsoft.Data.Sqlite;
namespace BuecherwurmAPI.Controllers
{
[Route("api/leihvorgang")]
[ApiController]
public class LendController : ControllerBase
{
private readonly LendModel _repository;
//private readonly IMapper _mapper;
public LendController(ILend repo)
{
_repository = (LendModel)repo;
//_mapper = mapper;
}
//GET api/leihvorgang
[HttpGet]
public ActionResult<IEnumerable<Lend>> LendsGet()
{
return Ok(_repository.GetAllLends());
}
//POST api/leihvorgang
[HttpPost]
public ActionResult<LendPost> LendsPost(LendPost lend)
{
var newId = _repository.AddLend(lend);
if (newId > 0)
{
var item = new Lend
{
Id = newId,
Customer = lend.Customer,
Returned = false,
ItemId = lend.ItemId,
ReturnDate = lend.ReturnDate
};
return Ok(item);
}
else
{
return BadRequest();
}
//return Ok(_mapper.Map<LendReadDTO>(item));
}
//GET api/leihvorgang/{id}
[HttpGet("{id}")]
public ActionResult<Lend> LendById(long id)
{
var lend = _repository.GetLendById(id);
if (!_repository.IdExits(Tables.Table.Lends, id))
{
return NotFound();
}
return Ok(lend);
}
//PUT api/leihvorgang/{id}
[HttpPut("{id}")]
public ActionResult LendPatchById(long id, LendPost lend)
{
var lendPatch = _repository.insertLendReturningId(id, lend);
return Ok(lendPatch);
}
}
}

View file

@ -1,12 +0,0 @@
using System;
namespace BuecherwurmAPI.DTOs
{
public class LendReadDTO
{
public int ItemId { get; set;}
public DateTime ReturnDate { get; set; }
public string Customer { get; set; }
public bool Returned { get; set; }
}
}

View file

@ -1,12 +0,0 @@
using System.Collections.Generic;
using BuecherwurmAPI.Models;
namespace BuecherwurmAPI.Data
{
public interface IBookRepo
{
IEnumerable<Book> GetAllBooks();
Book GetBookById(int id);
void BuchEntfernen(Book book);
}
}

View file

@ -1,11 +0,0 @@
using System.Collections.Generic;
using BuecherwurmAPI.Models;
namespace BuecherwurmAPI.Data
{
public interface ILendRepo
{
IEnumerable<Lend> GetAllLends();
Lend GetLendById(int id);
}
}

View file

@ -1,26 +0,0 @@
using System.Collections.Generic;
using BuecherwurmAPI.Models;
using Microsoft.AspNetCore.Mvc;
namespace BuecherwurmAPI.Data
{
public class KatalogRepo
{
private readonly object _context;
public KatalogRepo (object context)
{
_context = context;
}
/*public IEnumerable<Book> GetAllBooks()
{
return _context.books.ToList();
}*/
/*public Book GetBookById(int id)
{
return _context.FirstOrDefault(p => p.Id == id);
}*/
}
}

View file

@ -1,26 +0,0 @@
using System;
using System.Collections.Generic;
using BuecherwurmAPI.Models;
namespace BuecherwurmAPI.Data
{
public class MockLendRepo : ILendRepo
{
public IEnumerable<Lend> GetAllLends()
{
var lends = new List<Lend>
{
new Lend{Id = 1, Customer = "Nek0", ItemId = 1337, Returned = false, ReturnDate = DateTime.Now},
new Lend{Id = 2, Customer = "Shrubbery", ItemId = 1975, Returned = false, ReturnDate = DateTime.Now},
new Lend{Id = 3, Customer = "Felix", ItemId = 42, Returned = true, ReturnDate = DateTime.Now}
};
return lends;
}
public Lend GetLendById(int id)
{
return new Lend{Id = 1, Customer = "Nek0", ItemId = 1337, Returned = false, ReturnDate = DateTime.Now};
}
}
}

View file

@ -2,22 +2,43 @@ using System.ComponentModel.DataAnnotations;
namespace BuecherwurmAPI.Models
{
public class Book
public class Book : IProduct
{
public string Name {get; set;}
[Key, Required]
public long ProductId { get; set; }
public string Title {get; set;}
public string Author {get; set;}
public string Country {get; set;}
public string Link {get; set;}
public string Language {get; set;}
public int Pages {get; set;}
public int Year {get; set;}
[Key]
[Required]
public int ProductId { get; set; }
public long Pages {get; set;}
public long Year {get; set;}
public CategoryEnum Category { get; set; }
public string ImageLink { get; set; }
public int LendTime {get; set;}
public long LendTime {get; set;}
public LendTypeEnum LendType {get; set;}
}
public class BookPost : IProductPost
{
public string Title {get; set;}
public string Author {get; set;}
public string Country {get; set;}
public string Link {get; set;}
public string Language {get; set;}
public long Pages {get; set;}
public long Year {get; set;}
public CategoryEnum Category { get; set; }
public string ImageLink { get; set; }
public long LendTime {get; set;}
public LendTypeEnum LendType {get; set;}
public BookPost()
{
LendType = LendTypeEnum.Physical;
LendTime = 30;
Category = CategoryEnum.Book;
}
}
}

14
Models/IBookRepo.cs Normal file
View file

@ -0,0 +1,14 @@
using System.Collections.Generic;
using BuecherwurmAPI.Models;
namespace BuecherwurmAPI.Models
{
public interface IBookRepo
{
IEnumerable<Book> GetAllBooks();
Book GetBookById(long id);
void DeleteBook(long id);
long AddBook (Book book);
long EditBook (long id, Book book);
}
}

View file

@ -1,13 +1,13 @@
using System.Collections.Generic;
using BuecherwurmAPI.Models;
namespace BuecherwurmAPI.Data
namespace BuecherwurmAPI.Models
{
public interface IItemRepo
{
IEnumerable<Item> GetAllItems();
Item GetItemById(int id);
void NewItem(Item item);
void DeleteItem(Item item);
Item GetItemById(long itemId);
Item NewItem(ItemPost item);
void DeleteItem(long itemId);
}
}

26
Models/IProduct.cs Normal file
View file

@ -0,0 +1,26 @@
namespace BuecherwurmAPI.Models
{
public interface IProductPost
{
CategoryEnum Category {get; set;}
long LendTime {get; set;}
string Title {get; set;}
LendTypeEnum LendType {get; set;}
}
public interface IProduct
{
long ProductId {get; set;}
CategoryEnum Category {get; set;}
long LendTime {get; set;}
string Title {get; set;}
LendTypeEnum LendType {get; set;}
}
}

View file

@ -4,11 +4,13 @@ namespace BuecherwurmAPI.Models
{
public class Item
{
[Key]
[Required]
public int Id { get; set; }
[Key, Required]
public long ItemId { get; set; }
[Required]
public long BookId { get; set; }
}
public class ItemPost
{
public int BookId { get; set; }
}
}

121
Models/ItemModel.cs Normal file
View file

@ -0,0 +1,121 @@
using System;
using System.Collections.Generic;
using BuecherwurmAPI.Models;
using Microsoft.Data.Sqlite;
using Microsoft.VisualBasic.CompilerServices;
namespace BuecherwurmAPI.Models
{
public interface IItem
{
}
internal class ItemModel : IItem
{
private SqliteConnection _dbConnection;
public ItemModel()
{
var connectionBuilder = new SqliteConnectionStringBuilder {DataSource = "LongWormMemory.db"};
_dbConnection = new SqliteConnection(connectionBuilder.ConnectionString);
_dbConnection.Open();
}
public bool IdExits(string table, long id)
{
using (var command = _dbConnection.CreateCommand())
{
command.Parameters.Add(new SqliteParameter("@Id", SqliteType.Integer)).Value = id;
// Certain parts of the query can't be filled with variables for security reasons.
switch (table)
{
case Tables.Table.Items:
command.CommandText = @"SELECT EXISTS(SELECT 0 FROM Items WHERE Id = @Id)";
break;
}
var dr = command.ExecuteReader();
long result = 0;
while (dr.Read())
{
result = (long) dr[0];
}
return result != 0;
}
}
public IEnumerable<Item> GetAllItems()
{
var items = new List<Item>();
// using automatically disposes the command after completion
using (var command = _dbConnection.CreateCommand())
{
command.CommandText = "SELECT * FROM Items";
var dataReader = command.ExecuteReader();
while (dataReader.Read())
{
items.Add(new Item
{
ItemId = (long) dataReader["ItemId"],
BookId = (long) dataReader["BookId"]
});
}
}
return items;
}
public Item GetItemById(long itemId)
{
using (var command = _dbConnection.CreateCommand())
{
command.Parameters.Add(new SqliteParameter("@itemId", itemId));
command.CommandText = "SELECT * FROM Items WHERE ItemId = @itemId";
var dataReader = command.ExecuteReader();
while (dataReader.Read())
{
var item = new Item
{
ItemId = (long) dataReader["ItemId"],
BookId = (long) dataReader["BookId"]
};
return item;
}
}
return null;
}
public Item NewItem(ItemPost itemPost)
{
using (var command = _dbConnection.CreateCommand())
{
//hier soll jetz der NewItem Command folgen. ein POST mit EingabeInfo {id} = "BookId"
command.CommandText = "INSERT INTO Items (BookId) VALUES (@bookId)";
command.CommandType = System.Data.CommandType.Text;
command.Parameters.Add(new SqliteParameter("@bookId", itemPost.BookId));
command.ExecuteNonQuery();
command.CommandText = "select last_insert_rowid()";
var LastRowId64 = (long)command.ExecuteScalar();
var item = new Item{
ItemId = LastRowId64,
BookId = itemPost.BookId
};
return item;
}
}
public void DeleteItem(long itemId)
{
using (var command = _dbConnection.CreateCommand())
{
command.CommandText = "DELETE FROM Items WHERE ItemId = @itemId";
command.Parameters.Add(new SqliteParameter("@itemId", itemId));
command.ExecuteNonQuery();
}
}
}
}

224
Models/KatalogModel.cs Normal file
View file

@ -0,0 +1,224 @@
using System;
using System.Collections.Generic;
using BuecherwurmAPI.Models;
using Microsoft.Data.Sqlite;
using Microsoft.VisualBasic.CompilerServices;
namespace BuecherwurmAPI.Models
{
public interface ICatalogue
{
}
internal class KatalogModel : ICatalogue
{
private SqliteConnection _dbConnection;
public KatalogModel()
{
var connectionBuilder = new SqliteConnectionStringBuilder {DataSource = "LongWormMemory.db"};
_dbConnection = new SqliteConnection(connectionBuilder.ConnectionString);
_dbConnection.Open();
}
public IEnumerable<IProduct> GetAllProducts()
{
var books= new List<IProduct>();
using (var command = _dbConnection.CreateCommand())
{
command.CommandText = @"SELECT * FROM Products";
var dataReader = command.ExecuteReader();
while (dataReader.Read())
{
if (!dataReader["Author"].Equals(null))
{
books.Add(new Book
{
Title = (string) dataReader["Title"],
Author = (string) dataReader["Author"],
Country = (string) dataReader["Country"],
Link = (string) dataReader["Link"],
Language = (string) dataReader["Language"],
Pages = (long) dataReader["Pages"],
Year = (long) dataReader["Year"],
ProductId = (long) dataReader["ProductId"],
Category = (CategoryEnum) Enum.Parse(typeof(CategoryEnum), dataReader["Category"].ToString()),
ImageLink = (string) dataReader["ImageLink"],
LendTime = (long) dataReader["LendTime"],
LendType = (LendTypeEnum) Enum.Parse(typeof(LendTypeEnum), dataReader["LendType"].ToString())
});
}
else
{
books.Add(new Magazin
{
Title = (string) dataReader["Title"],
LendTime = (long) dataReader["LendTime"],
LendType = (LendTypeEnum) Enum.Parse(typeof(LendTypeEnum), dataReader["LendType"].ToString()),
Category = (CategoryEnum) Enum.Parse(typeof(CategoryEnum), dataReader["Category"].ToString()),
Run = (long) dataReader["Run"],
Audience = (string) dataReader["Audience"],
Topic = (string) dataReader["Topic"]
});
}
}
}
return books;
}
public IProduct GetProductById(long id)
{
using (var command = _dbConnection.CreateCommand())
{
command.CommandText = "SELECT * FROM \"Products\" WHERE ProductId = @id";
command.Parameters.Add(new SqliteParameter("@id", id));
var dataReader = command.ExecuteReader();
IProduct book;
dataReader.Read();
if (dataReader["Author"].Equals(null))
{
book = new Magazin
{
Title = (string)dataReader["Title"],
LendTime = (long)dataReader["LendTime"],
LendType = (LendTypeEnum) Enum.Parse(typeof(LendTypeEnum), dataReader["LendType"].ToString()),
Category = (CategoryEnum) Enum.Parse(typeof(CategoryEnum), dataReader["Category"].ToString()),
Run = (long)dataReader["Run"],
Audience = (string)dataReader["Audience"],
Topic = (string)dataReader["Topic"]
};
}
else
{
book = new Book
{
Title = (string)dataReader["Title"],
Author = (string)dataReader["Author"],
Country = (string)dataReader["Country"],
Link = (string)dataReader["Link"],
Language = (string)dataReader["Language"],
Pages = (long)dataReader["Pages"],
Year = (long)dataReader["Year"],
ProductId = (long)dataReader["ProductId"],
Category = (CategoryEnum) Enum.Parse(typeof(CategoryEnum), dataReader["Category"].ToString()),
ImageLink = (string) dataReader["ImageLink"],
LendTime = (long) dataReader["LendTime"],
LendType = (LendTypeEnum) Enum.Parse(typeof(LendTypeEnum), dataReader["LendType"].ToString())
};
}
return book;
}
}
public void DeleteProduct(long id)
{
using (var command = _dbConnection.CreateCommand())
{
command.Parameters.Add(new SqliteParameter("@id", id));
command.CommandText = @"DELETE FROM Products WHERE ProductId= @id";
var dataReader = command.ExecuteReader();
}
}
public long AddProduct (IProductPost book)
{
using (var command = _dbConnection.CreateCommand())
{
command.CommandText = @"INSERT INTO Products (ProductId, Title, Author, Country, Link, Language, Pages, Year, Category, ImageLink, LendTime, LendType, Run, Audience, Topic) VALUES (NULL, @Title, @Author, @Country, @Link, @Language, @Pages, @Year, @Category, @ImageLink, @LendTime, @LendType, @Run, @Audience, @Topic)";
command.Parameters.Add(new SqliteParameter("@Title", book.Title));
command.Parameters.Add(new SqliteParameter("@Category", book.Category));
command.Parameters.Add(new SqliteParameter("@LendTime", book.LendTime));
command.Parameters.Add(new SqliteParameter("@LendType", book.LendType));
if (book.GetType() == typeof(BookPost))
{
command.Parameters.Add(new SqliteParameter("@Author", ((BookPost)book).Author));
command.Parameters.Add(new SqliteParameter("@Country", ((BookPost)book).Country));
command.Parameters.Add(new SqliteParameter("@Link", ((BookPost)book).Link));
command.Parameters.Add(new SqliteParameter("@Language", ((BookPost)book).Language));
command.Parameters.Add(new SqliteParameter("@Pages", ((BookPost)book).Pages));
command.Parameters.Add(new SqliteParameter("@Year", ((BookPost)book).Year));
command.Parameters.Add(new SqliteParameter("@ImageLink", ((BookPost)book).ImageLink));
command.Parameters.Add(new SqliteParameter("@Run", DBNull.Value));
command.Parameters.Add(new SqliteParameter("@Audience", DBNull.Value));
command.Parameters.Add(new SqliteParameter("@Topic", DBNull.Value));
}
else
{
command.Parameters.Add(new SqliteParameter("@Author", DBNull.Value));
command.Parameters.Add(new SqliteParameter("@Country", DBNull.Value));
command.Parameters.Add(new SqliteParameter("@Link", DBNull.Value));
command.Parameters.Add(new SqliteParameter("@Language", DBNull.Value));
command.Parameters.Add(new SqliteParameter("@Pages", DBNull.Value));
command.Parameters.Add(new SqliteParameter("@Year", DBNull.Value));
command.Parameters.Add(new SqliteParameter("@ImageLink", DBNull.Value));
command.Parameters.Add(new SqliteParameter("@Run", ((MagazinPost)book).Run));
command.Parameters.Add(new SqliteParameter("@Audience", ((MagazinPost)book).Audience));
command.Parameters.Add(new SqliteParameter("@Topic", ((MagazinPost)book).Topic));
}
var success = command.ExecuteNonQuery();
if (success == 1)
{
command.CommandText = @"SELECT last_insert_rowid()";
return (long)command.ExecuteScalar();
}
return -1;
}
}
public long EditProduct (long id, IProduct book)
{
using (var command = _dbConnection.CreateCommand())
{
// funktioniert das so?
command.Parameters.Add(new SqliteParameter("@id", id));
command.CommandText = @"UPDATE Products SET (Title, Author, Country, Link, Language, Pages, Year, Category, ImageLink, LendTime, LendType, Run, Audience, Topic) = (@Title, @Author, @Country, @Link, @Language, @Pages, @Year, @Category, @ImageLink, @LendTime, @LendType, @Run, @Audience, @Topic) WHERE ProductId = @id";
command.Parameters.Add(new SqliteParameter("@Title", book.Title));
command.Parameters.Add(new SqliteParameter("@Category", book.Category));
command.Parameters.Add(new SqliteParameter("@LendTime", book.LendTime));
command.Parameters.Add(new SqliteParameter("@LendType", book.LendType));
if (book.GetType() == typeof(Book))
{
command.Parameters.Add(new SqliteParameter("@Author", ((BookPost)book).Author));
command.Parameters.Add(new SqliteParameter("@Country", ((BookPost)book).Country));
command.Parameters.Add(new SqliteParameter("@Link", ((BookPost)book).Link));
command.Parameters.Add(new SqliteParameter("@Language", ((BookPost)book).Language));
command.Parameters.Add(new SqliteParameter("@Pages", ((BookPost)book).Pages));
command.Parameters.Add(new SqliteParameter("@Year", ((BookPost)book).Year));
command.Parameters.Add(new SqliteParameter("@ImageLink", ((BookPost)book).ImageLink));
command.Parameters.Add(new SqliteParameter("@Run", DBNull.Value));
command.Parameters.Add(new SqliteParameter("@Audience", DBNull.Value));
command.Parameters.Add(new SqliteParameter("@Topic", DBNull.Value));
}
else
{
command.Parameters.Add(new SqliteParameter("@Author", DBNull.Value));
command.Parameters.Add(new SqliteParameter("@Country", DBNull.Value));
command.Parameters.Add(new SqliteParameter("@Link", DBNull.Value));
command.Parameters.Add(new SqliteParameter("@Language", DBNull.Value));
command.Parameters.Add(new SqliteParameter("@Pages", DBNull.Value));
command.Parameters.Add(new SqliteParameter("@Year", DBNull.Value));
command.Parameters.Add(new SqliteParameter("@ImageLink", DBNull.Value));
command.Parameters.Add(new SqliteParameter("@Run", ((MagazinPost)book).Run));
command.Parameters.Add(new SqliteParameter("@Audience", ((MagazinPost)book).Audience));
command.Parameters.Add(new SqliteParameter("@Topic", ((MagazinPost)book).Topic));
}
command.ExecuteNonQuery();
return id;
}
}
}
}

View file

@ -1,13 +1,30 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace BuecherwurmAPI.Models
{
public class Lend
{
public int Id { get; set; }
public int ItemId { get; set;}
[Key, Required]
public long Id { get; set; }
[Required]
public long ItemId { get; set;}
[Required]
public DateTime ReturnDate { get; set; }
[Required]
public string Customer { get; set; }
[Required]
public bool Returned { get; set; }
}
public class LendPost
{
public long ItemId {get; set;}
public DateTime ReturnDate {get; set;}
public string Customer {get; set;}
public bool Returned { get; set; }
}
}

154
Models/LendModel.cs Normal file
View file

@ -0,0 +1,154 @@
using System;
using System.Collections.Generic;
using BuecherwurmAPI.Models;
using Microsoft.Data.Sqlite;
using Microsoft.VisualBasic.CompilerServices;
namespace BuecherwurmAPI.Models
{
public interface ILend
{
}
internal class LendModel : ILend
{
private SqliteConnection _dbConnection;
public LendModel()
{
var connectionBuilder = new SqliteConnectionStringBuilder {DataSource = "LongWormMemory.db"};
_dbConnection = new SqliteConnection(connectionBuilder.ConnectionString);
_dbConnection.Open();
}
public bool IdExits(string table, long id)
{
using (var command = _dbConnection.CreateCommand())
{
command.Parameters.Add(new SqliteParameter("@Id", SqliteType.Integer)).Value = id;
// Certain parts of the query can't be filled with variables for security reasons.
switch (table)
{
case Tables.Table.Lends:
command.CommandText = @"SELECT EXISTS(SELECT 0 FROM Lends WHERE Id = @Id)";
break;
}
var dr = command.ExecuteReader();
long result = 0;
while (dr.Read())
{
result = (long) dr[0];
}
return result != 0;
}
}
public IEnumerable<Lend> GetAllLends()
{
var lends = new List<Lend>();
// using automatically disposes the command after completion
using (var command = _dbConnection.CreateCommand())
{
command.CommandText = @"SELECT * FROM Lends";
var dataReader = command.ExecuteReader();
while (dataReader.Read())
{
var returned = (long) dataReader["Returned"] == 1;
lends.Add(new Lend
{
Id = (long) dataReader["Id"],
Customer = (string) dataReader["Customer"],
ItemId = (long) dataReader["ItemId"],
Returned = returned,
ReturnDate = DateTime.Parse((string)dataReader["ReturnDate"])
});
}
}
return lends;
}
public Lend GetLendById(long id)
{
using (var command = _dbConnection.CreateCommand())
{
command.Parameters.Add(new SqliteParameter("@id", SqliteType.Integer)).Value = id;
command.CommandText = @"SELECT * FROM Lends WHERE Id = @id";
var dataReader = command.ExecuteReader();
while (dataReader.Read())
{
var returned = (long) dataReader["Returned"] == 1;
var lend = new Lend
{
Id = (long) dataReader["Id"],
Customer = (string) dataReader["Customer"],
ItemId = (long) dataReader["ItemId"],
Returned = returned,
ReturnDate = DateTime.Parse((string) dataReader["ReturnDate"])
};
return lend;
}
}
return null;
}
public long insertLendReturningId(long id, LendPost lend)
{
using (var command = _dbConnection.CreateCommand())
{
command.CommandText = "UPDATE Lends SET (ItemId, ReturnDate, Customer, Returned) = (@itemId, @returnDate, @customer, @returned) WHERE Id = @id";
command.Parameters.Add(new SqliteParameter("@id", id));
command.Parameters.Add(new SqliteParameter("@itemId", lend.ItemId));
command.Parameters.Add(new SqliteParameter("@returnDate", lend.ReturnDate));
command.Parameters.Add(new SqliteParameter("@customer", lend.Customer));
command.Parameters.Add(new SqliteParameter("@returned", lend.Returned));
var success = command.ExecuteNonQuery();
if (success == 1)
{
command.CommandText = @"SELECT last_insert_rowid()";
return (long)command.ExecuteScalar();
}
return -1;
}
}
public long AddLend (LendPost lend)
{
using (var command = _dbConnection.CreateCommand())
{
// funktioniert das so?
//muss ProduktId übergeben werden?
command.CommandText = @"INSERT INTO Lends (itemid, ReturnDate, Customer, Returned) VALUES (@ItemId, @ReturnDate, @Customer, false)";
command.Parameters.Add(new SqliteParameter("@ItemId", lend.ItemId));
command.Parameters.Add(new SqliteParameter("@ReturnDate", lend.ReturnDate));
command.Parameters.Add(new SqliteParameter("@Customer", lend.Customer));
var success = command.ExecuteNonQuery();
if (success == 1)
{
command.CommandText = @"SELECT last_insert_rowid()";
return (long)command.ExecuteScalar();
}
return -1;
}
}
}
}

View file

@ -1,16 +1,36 @@
using System.ComponentModel.DataAnnotations;
namespace BuecherwurmAPI.Models
{
public class Magazin
public class Magazin : IProduct
{
public int ProductId {get; set;}
public long ProductId {get; set;}
public CategoryEnum Category {get; set;}
public int LendTime {get; set;}
public string Name {get; set;}
public string Run {get; set;}
public long LendTime {get; set;}
public string Title {get; set;}
public long Run {get; set;}
public string Audience {get; set;}
public string Topic {get; set;}
public LendTypeEnum LendType {get; set;}
}
public class MagazinPost : IProductPost
{
public CategoryEnum Category {get; set;}
public long LendTime {get; set;}
public string Title {get; set;}
public string Run {get; set;}
public string Audience {get; set;}
public string Topic {get; set;}
public LendTypeEnum LendType {get; set;}
public MagazinPost()
{
LendType = LendTypeEnum.Physical;
LendTime = 2;
Category = CategoryEnum.Magazine;
}
}
}

12
Models/Tables.cs Normal file
View file

@ -0,0 +1,12 @@
namespace BuecherwurmAPI.Models
{
public static class Tables
{
public struct Table
{
public const string Lends = "Lends";
public const string Katalog = "Katalog";
public const string Items = "Items";
}
}
}

View file

@ -1,5 +1,4 @@
using AutoMapper;
using BuecherwurmAPI.DTOs;
using BuecherwurmAPI.Models;
namespace BuecherwurmAPI.Profiles
@ -8,7 +7,7 @@ namespace BuecherwurmAPI.Profiles
{
public LendProfile()
{
CreateMap<Lend, LendReadDTO>();
CreateMap<Lend, LendPost>();
}
}
}

View file

@ -1,11 +1,15 @@
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Data.Sqlite;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace BuecherwurmAPI
{
@ -13,9 +17,68 @@ namespace BuecherwurmAPI
{
public static void Main(string[] args)
{
if (!File.Exists("LongWormMemory.db"))
{
CreateNewEmptyDB();
MakeImports();
}
CreateHostBuilder(args).Build().Run();
}
private static void MakeImports()
{
var booksJson = File.ReadAllText("books.json");
//var magazinesJson = File.ReadAllText("magazines.json");
var catalogue = new Models.KatalogModel();
var items = new Models.ItemModel();
var config = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var importedBooks = JsonSerializer.Deserialize<List<Models.BookPost>>(booksJson, config);
//var importedMags = JsonSerializer.Deserialize<List<Models.BookPost>>(magazinesJson);
List<Models.IProductPost> imports = new List<Models.IProductPost>();
imports.AddRange(importedBooks);
foreach (var item in importedBooks)
{
item.LendType = LendTypeEnum.Virtual;
item.Category = Models.CategoryEnum.EBook;
imports.Add(item);
}
//imports.AddRange(importedMags);
foreach (var item in imports)
{
var id = catalogue.AddProduct(item);
items.NewItem(new Models.ItemPost{ BookId = (int)id});
if (item.LendType != LendTypeEnum.Virtual)
{
items.NewItem(new Models.ItemPost{ BookId = (int)id});
}
}
}
private static void CreateNewEmptyDB()
{
//File.Create("LongWormMemory.db");
File.WriteAllText("LongWormMemory.db", "");
var connectionBuilder = new SqliteConnectionStringBuilder {DataSource = "LongWormMemory.db"};
var connection = new SqliteConnection(connectionBuilder.ConnectionString);
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandText = "CREATE TABLE Lends (Id INTEGER NOT NULL PRIMARY KEY, ItemId INTEGER NOT NULL, ReturnDate TEXT NOT NULL, Customer TEXT NOT NULL, Returned INTEGER NOT NULL)";
command.ExecuteNonQuery();
command.CommandText = "CREATE TABLE Items (ItemId INTEGER NOT NULL PRIMARY KEY, BookId INTEGER NOT NULL)";
command.ExecuteNonQuery();
command.CommandText = "CREATE TABLE Products (ProductId INTEGER PRIMARY KEY, Title TEXT, Author TEXT, Country TEXT, Link TEXT, Language TEXT, Pages INTEGER, Year INTEGER, Category INTEGER, ImageLink TEXT, LendTime INTEGER, LendType INTEGER, Run INTEGER, Audience TEXT, Topic TEXT)";
command.ExecuteNonQuery();
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>

View file

@ -0,0 +1,30 @@
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:5975",
"sslPort": 44376
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "api",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"BuecherwurmAPI": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "api",
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View file

@ -1,60 +1,62 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AutoMapper;
using BuecherwurmAPI.Data;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace BuecherwurmAPI
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
// Adds a service that is created once per connection.
// It takes an interface and a specific implementation.
// That allows to swap the implementation easily.
services.AddScoped<ILendRepo, MockLendRepo>();
services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AutoMapper;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using BuecherwurmAPI.Models;
namespace BuecherwurmAPI
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
// Adds a service that is created once per connection.
// It takes an interface and a specific implementation.
// That allows to swap the implementation easily.
services.AddScoped<ILend, LendModel>();
services.AddScoped<IItem, ItemModel>();
services.AddScoped<ICatalogue, KatalogModel>();
services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
}

View file

@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}

10
appsettings.json Normal file
View file

@ -0,0 +1,10 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}

File diff suppressed because it is too large Load diff

View file

@ -1,10 +0,0 @@
{
"runtimeOptions": {
"additionalProbingPaths": [
"C:\\Users\\naumanfe\\.dotnet\\store\\|arch|\\|tfm|",
"C:\\Users\\naumanfe\\.nuget\\packages",
"C:\\Microsoft\\Xamarin\\NuGet",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder"
]
}
}

View file

@ -1,12 +0,0 @@
{
"runtimeOptions": {
"tfm": "netcoreapp3.1",
"framework": {
"name": "Microsoft.AspNetCore.App",
"version": "3.1.0"
},
"configProperties": {
"System.GC.Server": true
}
}
}

1002
books.json Normal file

File diff suppressed because it is too large Load diff

802
magazines.json Normal file
View file

@ -0,0 +1,802 @@
[
{
"Rang": 1,
"Titel": "ADAC Motorwelt",
"Auflage": "13.705.032",
"Gruppe": "Publikum",
"Sachgruppe": "Motorpresse",
"Verlag / Herausgeber": "ADAC"
},
{
"Rang": 2,
"Titel": "Apotheken-Umschau",
"Auflage": "9.616.642",
"Gruppe": "Kunden",
"Sachgruppe": "Apotheken/Medizin/Gesundheit",
"Verlag / Herausgeber": "Wort & Bild Verlag"
},
{
"Rang": 3,
"Titel": "Bleibgesund",
"Auflage": "6.423.491",
"Gruppe": "Kunden",
"Sachgruppe": "Medizin/Gesundheit",
"Verlag / Herausgeber": "wdv-Gruppe"
},
{
"Rang": 4,
"Titel": "bleibgesund 60",
"Auflage": "3.192.922",
"Gruppe": "Kunden",
"Sachgruppe": "Medizin/Gesundheit",
"Verlag / Herausgeber": "wdv-Gruppe"
},
{
"Rang": 5,
"Titel": "tv14",
"Auflage": "2.389.661",
"Gruppe": "Publikum",
"Sachgruppe": "Programmzeitschriften",
"Verlag / Herausgeber": "Bauer Media Group"
},
{
"Rang": 6,
"Titel": "metallzeitung",
"Auflage": "2.227.205",
"Gruppe": "Publikum",
"Sachgruppe": "Aktuelle Zeitschriften und Magazine",
"Verlag / Herausgeber": "IG Metall"
},
{
"Rang": 7,
"Titel": "ver.di PUBLIK",
"Auflage": "1.899.122",
"Gruppe": "Publikum",
"Sachgruppe": "Sonstige Zeitschriften National",
"Verlag / Herausgeber": "ver.di"
},
{
"Rang": 8,
"Titel": "TV Digital",
"Auflage": "1.771.022",
"Gruppe": "Publikum",
"Sachgruppe": "Programmzeitschriften",
"Verlag / Herausgeber": "Funke Mediengruppe"
},
{
"Rang": 9,
"Titel": "Ratgeber/Meine Apotheke",
"Auflage": "1.728.602",
"Gruppe": "Kunden",
"Sachgruppe": "Apotheken/Medizin/Gesundheit",
"Verlag / Herausgeber": "Gebr. Storck GmbH & Co. Verlags-oHG"
},
{
"Rang": 10,
"Titel": "Senioren Ratgeber",
"Auflage": "1.727.317",
"Gruppe": "Kunden",
"Sachgruppe": "Apotheken/Medizin/Gesundheit",
"Verlag / Herausgeber": "Wort & Bild Verlag"
},
{
"Rang": 11,
"Titel": "Mit Liebe - Das Genussmagazin",
"Auflage": "1.668.550",
"Gruppe": "Kunden",
"Sachgruppe": "Lebensmittel/Kochen/Haushalt",
"Verlag / Herausgeber": "EDEKA Verlagsgesellschaft mbH"
},
{
"Rang": 12,
"Titel": "Das Haus",
"Auflage": "1.598.049",
"Gruppe": "Publikum",
"Sachgruppe": "Wohn- und Gartenzeitschriften",
"Verlag / Herausgeber": "Hubert Burda Media"
},
{
"Rang": 13,
"Titel": "Mein Eigenheim, Wohnen & Leben",
"Auflage": "1.586.533",
"Gruppe": "Publikum",
"Sachgruppe": "Wohn- und Gartenzeitschriften",
"Verlag / Herausgeber": "J.Fink Verlag GmbH & Co. KG"
},
{
"Rang": 14,
"Titel": "VdK-Zeitung",
"Auflage": "1.559.980",
"Gruppe": "Publikum",
"Sachgruppe": "Aktuelle Zeitschriften und Magazine",
"Verlag / Herausgeber": "Sozialverband VdK Deutschland"
},
{
"Rang": 15,
"Titel": "medizini",
"Auflage": "1.491.475",
"Gruppe": "Kunden",
"Sachgruppe": "Apotheken/Medizin/Gesundheit",
"Verlag / Herausgeber": "Wort & Bild Verlag"
},
{
"Rang": 16,
"Titel": "Wohnglück",
"Auflage": "1.404.263",
"Gruppe": "Publikum",
"Sachgruppe": "Wohn- und Gartenzeitschriften",
"Verlag / Herausgeber": "BELLEVUE AND MORE GmbH"
},
{
"Rang": 17,
"Titel": "Diabetes Ratgeber",
"Auflage": "1.200.450",
"Gruppe": "Kunden",
"Sachgruppe": "Apotheken/Medizin/Gesundheit",
"Verlag / Herausgeber": "Wort & Bild Verlag"
},
{
"Rang": 18,
"Titel": "TV Direkt",
"Auflage": "1.185.933",
"Gruppe": "Publikum",
"Sachgruppe": "Programmzeitschriften",
"Verlag / Herausgeber": "Funke Mediengruppe"
},
{
"Rang": 19,
"Titel": "TV-Movie",
"Auflage": "1.166.838",
"Gruppe": "Publikum",
"Sachgruppe": "Programmzeitschriften",
"Verlag / Herausgeber": "Bauer Media Group"
},
{
"Rang": 20,
"Titel": "Hörzu",
"Auflage": "1.125.985",
"Gruppe": "Publikum",
"Sachgruppe": "Programmzeitschriften",
"Verlag / Herausgeber": "Funke Mediengruppe"
},
{
"Rang": 21,
"Titel": "vigo Gesundheit - Das Kundenmagazin",
"Auflage": "1.121.050",
"Gruppe": "Kunden",
"Sachgruppe": "Medizin/Gesundheit",
"Verlag / Herausgeber": "wdv-Gruppe"
},
{
"Rang": 22,
"Titel": "Johanniter",
"Auflage": "1.106.507",
"Gruppe": "Publikum",
"Sachgruppe": "Gesundheitsmagazine",
"Verlag / Herausgeber": "Die Johanniter"
},
{
"Rang": 23,
"Titel": "ASB Magazin",
"Auflage": "1.104.904",
"Gruppe": "Publikum",
"Sachgruppe": "Gesundheitsmagazine",
"Verlag / Herausgeber": "Arbeiter-Samariter-Bund Deutschland"
},
{
"Rang": 24,
"Titel": "Wohnen - Das Magazin für Bauen, Einrichten & Lebensart",
"Auflage": "1.056.140",
"Gruppe": "Publikum",
"Sachgruppe": "Wohn- und Gartenzeitschriften",
"Verlag / Herausgeber": "HMC Verlag Hamburg Media Company GmbH"
},
{
"Rang": 25,
"Titel": "Landlust Die schönsten Seiten des Landlebens",
"Auflage": "1.040.119",
"Gruppe": "Publikum",
"Sachgruppe": "Wohn- und Gartenzeitschriften",
"Verlag / Herausgeber": "Landwirtschaftsverlag Münster"
},
{
"Rang": 26,
"Titel": "on job",
"Auflage": "1.009.720",
"Gruppe": "Kunden",
"Sachgruppe": "Medizin/Gesundheit",
"Verlag / Herausgeber": "wdv-Gruppe"
},
{
"Rang": 27,
"Titel": "Neue Apotheken Illustrierte",
"Auflage": "1.007.370",
"Gruppe": "Kunden",
"Sachgruppe": "Apotheken/Medizin/Gesundheit",
"Verlag / Herausgeber": "Bundesvereinigung Deutscher Apothekerverbände"
},
{
"Rang": 28,
"Titel": "TV Spielfilm",
"Auflage": 934.291,
"Gruppe": "Publikum",
"Sachgruppe": "Programmzeitschriften",
"Verlag / Herausgeber": "Hubert Burda Media"
},
{
"Rang": 29,
"Titel": "Auf einen Blick",
"Auflage": 921.049,
"Gruppe": "Publikum",
"Sachgruppe": "Programmzeitschriften",
"Verlag / Herausgeber": "Bauer Media Group"
},
{
"Rang": 30,
"Titel": "Schrot & Korn Naturkostmagazin",
"Auflage": 888.063,
"Gruppe": "Kunden",
"Sachgruppe": "Lebensmittel",
"Verlag / Herausgeber": "Bio Verlag GmbH"
},
{
"Rang": 31,
"Titel": "Der Spiegel",
"Auflage": 843.085,
"Gruppe": "Publikum",
"Sachgruppe": "Aktuelle Zeitschriften und Magazine",
"Verlag / Herausgeber": "SPIEGEL-Verlag"
},
{
"Rang": 32,
"Titel": "Bild der Frau",
"Auflage": 832.226,
"Gruppe": "Publikum",
"Sachgruppe": "Wöchentliche Frauenzeitschriften",
"Verlag / Herausgeber": "Funke Mediengruppe"
},
{
"Rang": 33,
"Titel": "extra / tour",
"Auflage": 774.431,
"Gruppe": "Publikum",
"Sachgruppe": "Reisezeitschriften",
"Verlag / Herausgeber": "Deutsches Jugendherbergswerk"
},
{
"Rang": 34,
"Titel": "Freizeit Revue",
"Auflage": 764.162,
"Gruppe": "Publikum",
"Sachgruppe": "Wöchentliche Frauenzeitschriften",
"Verlag / Herausgeber": "Hubert Burda Media"
},
{
"Rang": 35,
"Titel": "Baby und Familie",
"Auflage": 749.425,
"Gruppe": "Kunden",
"Sachgruppe": "Apotheken/Medizin/Gesundheit",
"Verlag / Herausgeber": "Wort & Bild Verlag"
},
{
"Rang": 36,
"Titel": "KONPRESS",
"Auflage": 731.664,
"Gruppe": "Publikum",
"Sachgruppe": "Konfessionelle Zeitschriften",
"Verlag / Herausgeber": "KONPRESS-Medien eG"
},
{
"Rang": 37,
"Titel": "Stern",
"Auflage": 725.959,
"Gruppe": "Publikum",
"Sachgruppe": "Aktuelle Zeitschriften und Magazine",
"Verlag / Herausgeber": "Gruner + Jahr"
},
{
"Rang": 38,
"Titel": "JUNIOR Kinderzeitschriften",
"Auflage": 679.795,
"Gruppe": "Kunden",
"Sachgruppe": "Apotheken/Medizin/Gesundheit",
"Verlag / Herausgeber": ""
},
{
"Rang": 39,
"Titel": "on",
"Auflage": 654.628,
"Gruppe": "Kunden",
"Sachgruppe": "Medizin/Gesundheit",
"Verlag / Herausgeber": "wdv-Gruppe"
},
{
"Rang": 40,
"Titel": "TV Hören und Sehen",
"Auflage": 653.399,
"Gruppe": "Publikum",
"Sachgruppe": "Programmzeitschriften",
"Verlag / Herausgeber": "Bauer Media Group"
},
{
"Rang": 41,
"Titel": "MieterZeitung",
"Auflage": 643.231,
"Gruppe": "Kunden",
"Sachgruppe": "Sonstige",
"Verlag / Herausgeber": "Deutscher Mieterbund"
},
{
"Rang": 42,
"Titel": "Kompakt",
"Auflage": 639.69,
"Gruppe": "Publikum",
"Sachgruppe": "Sonstige Zeitschriften National",
"Verlag / Herausgeber": "IG Bergbau, Chemie, Energie"
},
{
"Rang": 43,
"Titel": "DAV Panorama",
"Auflage": 638.493,
"Gruppe": "Publikum",
"Sachgruppe": "Sportzeitschriften",
"Verlag / Herausgeber": "Deutscher Alpenverein"
},
{
"Rang": 44,
"Titel": "NurTV",
"Auflage": 618.623,
"Gruppe": "Publikum",
"Sachgruppe": "Programmzeitschriften",
"Verlag / Herausgeber": "Funke Mediengruppe"
},
{
"Rang": 45,
"Titel": "Neue Post",
"Auflage": 613.572,
"Gruppe": "Publikum",
"Sachgruppe": "Wöchentliche Frauenzeitschriften",
"Verlag / Herausgeber": "Bauer Media Group"
},
{
"Rang": 46,
"Titel": "ACE-Lenkrad",
"Auflage": 580.877,
"Gruppe": "Publikum",
"Sachgruppe": "Motorpresse",
"Verlag / Herausgeber": "Auto Club Europa"
},
{
"Rang": 47,
"Titel": "Der Vermögensberater",
"Auflage": 564.27,
"Gruppe": "Publikum",
"Sachgruppe": "Wirtschaftspresse",
"Verlag / Herausgeber": "Deutsche Vermögensberatung"
},
{
"Rang": 48,
"Titel": "tv pur",
"Auflage": 561.959,
"Gruppe": "Publikum",
"Sachgruppe": "Programmzeitschriften",
"Verlag / Herausgeber": "Bauer Media Group"
},
{
"Rang": 49,
"Titel": "DBB-Magazin",
"Auflage": 542.491,
"Gruppe": "Fach",
"Sachgruppe": "Recht und Verwaltung",
"Verlag / Herausgeber": "dbb beamtenbund und tarifunion"
},
{
"Rang": 50,
"Titel": "Fondsmagazin",
"Auflage": 538.389,
"Gruppe": "Kunden",
"Sachgruppe": "Finanzdienstleistungen",
"Verlag / Herausgeber": ""
},
{
"Rang": 51,
"Titel": "Brigitte",
"Auflage": 533.661,
"Gruppe": "Publikum",
"Sachgruppe": "14-tägliche Frauenzeitschriften",
"Verlag / Herausgeber": "Gruner + Jahr"
},
{
"Rang": 52,
"Titel": "rotkreuzmagazin für Mitglieder, Freunde und",
"Auflage": 531.254,
"Gruppe": "Publikum",
"Sachgruppe": "Gesundheitsmagazine",
"Verlag / Herausgeber": ""
},
{
"Rang": 53,
"Titel": "Bunte",
"Auflage": 519.57,
"Gruppe": "Publikum",
"Sachgruppe": "Aktuelle Zeitschriften und Magazine",
"Verlag / Herausgeber": "Hubert Burda Media"
},
{
"Rang": 54,
"Titel": "Focus",
"Auflage": 508.489,
"Gruppe": "Publikum",
"Sachgruppe": "Aktuelle Zeitschriften und Magazine",
"Verlag / Herausgeber": "Hubert Burda Media"
},
{
"Rang": 55,
"Titel": "HausArzt - PatientenMagazin",
"Auflage": 479.45,
"Gruppe": "Kunden",
"Sachgruppe": "Apotheken/Medizin/Gesundheit",
"Verlag / Herausgeber": "Wort & Bild Verlag"
},
{
"Rang": 56,
"Titel": "Frau und Mutter",
"Auflage": 474.649,
"Gruppe": "Publikum",
"Sachgruppe": "Monatliche Frauenzeitschriften",
"Verlag / Herausgeber": "Katholische Frauengemeinschaft Deutschlands"
},
{
"Rang": 57,
"Titel": "Auto Bild",
"Auflage": 461.539,
"Gruppe": "Publikum",
"Sachgruppe": "Motorpresse",
"Verlag / Herausgeber": "Axel Springer"
},
{
"Rang": 58,
"Titel": "mkv Apotheken-Kombi TV Gesund & Leben, LindaMagazin",
"Auflage": 458.807,
"Gruppe": "Kunden",
"Sachgruppe": "Apotheken/Medizin/Gesundheit",
"Verlag / Herausgeber": "mkv medienkontor Verlagsgesellschaft mbH & Co. KG"
},
{
"Rang": 59,
"Titel": "Funk Uhr",
"Auflage": 453.55,
"Gruppe": "Publikum",
"Sachgruppe": "Programmzeitschriften",
"Verlag / Herausgeber": "Axel Springer"
},
{
"Rang": 60,
"Titel": "eve Magazin",
"Auflage": 441.139,
"Gruppe": "Kunden",
"Sachgruppe": "Lebensmittel",
"Verlag / Herausgeber": "TERRITORY CTR GmbH"
},
{
"Rang": 61,
"Titel": "Das Neue Blatt",
"Auflage": 433.918,
"Gruppe": "Publikum",
"Sachgruppe": "Wöchentliche Frauenzeitschriften",
"Verlag / Herausgeber": "Bauer Media Group"
},
{
"Rang": 62,
"Titel": "Freizeitwoche",
"Auflage": 427.633,
"Gruppe": "Publikum",
"Sachgruppe": "Wöchentliche Frauenzeitschriften",
"Verlag / Herausgeber": "Bauer Media Group"
},
{
"Rang": 63,
"Titel": "vigo GESUNDHEIT 65",
"Auflage": 425.688,
"Gruppe": "Kunden",
"Sachgruppe": "Medizin/Gesundheit",
"Verlag / Herausgeber": ""
},
{
"Rang": 64,
"Titel": "SoVD Zeitung - Soziales im Blick",
"Auflage": 410.809,
"Gruppe": "Fach",
"Sachgruppe": "Sonstige",
"Verlag / Herausgeber": ""
},
{
"Rang": 65,
"Titel": "Tina",
"Auflage": 403.493,
"Gruppe": "Publikum",
"Sachgruppe": "Wöchentliche Frauenzeitschriften",
"Verlag / Herausgeber": "Bauer Media Group"
},
{
"Rang": 66,
"Titel": "Reader´s Digest Das Beste",
"Auflage": 401.698,
"Gruppe": "Publikum",
"Sachgruppe": "Aktuelle Zeitschriften und Magazine",
"Verlag / Herausgeber": "Readers Digest Association"
},
{
"Rang": 67,
"Titel": "Vorwärts",
"Auflage": 394.892,
"Gruppe": "Publikum",
"Sachgruppe": "Sonstige Zeitschriften National",
"Verlag / Herausgeber": "Sozialdemokratische Partei Deutschlands"
},
{
"Rang": 68,
"Titel": "Meine Familie & ich",
"Auflage": 390.339,
"Gruppe": "Publikum",
"Sachgruppe": "Esszeitschriften",
"Verlag / Herausgeber": ""
},
{
"Rang": 69,
"Titel": "Fernsehwoche",
"Auflage": 388.28,
"Gruppe": "Publikum",
"Sachgruppe": "Programmzeitschriften",
"Verlag / Herausgeber": "Bauer Media Group"
},
{
"Rang": 70,
"Titel": "Die Aktuelle",
"Auflage": 369.428,
"Gruppe": "Publikum",
"Sachgruppe": "Wöchentliche Frauenzeitschriften",
"Verlag / Herausgeber": "FUNKE Women Group GmbH"
},
{
"Rang": 71,
"Titel": "Freundin",
"Auflage": 366.039,
"Gruppe": "Publikum",
"Sachgruppe": "14-tägliche Frauenzeitschriften",
"Verlag / Herausgeber": "Hubert Burda Media"
},
{
"Rang": 72,
"Titel": "Sport Bild",
"Auflage": 357.91,
"Gruppe": "Publikum",
"Sachgruppe": "Sportzeitschriften",
"Verlag / Herausgeber": "Axel Springer"
},
{
"Rang": 73,
"Titel": "Familienheim und Garten",
"Auflage": 357.712,
"Gruppe": "Fach",
"Sachgruppe": "Freizeit und Hobby",
"Verlag / Herausgeber": ""
},
{
"Rang": 74,
"Titel": "InStyle",
"Auflage": 357.418,
"Gruppe": "Publikum",
"Sachgruppe": "Monatliche Frauenzeitschriften",
"Verlag / Herausgeber": "Hubert Burda Media"
},
{
"Rang": 75,
"Titel": "Freizeit Spass",
"Auflage": 356.487,
"Gruppe": "Publikum",
"Sachgruppe": "Wöchentliche Frauenzeitschriften",
"Verlag / Herausgeber": "Hubert Burda Media"
},
{
"Rang": 76,
"Titel": "auto motor und sport",
"Auflage": 352.622,
"Gruppe": "Publikum",
"Sachgruppe": "Motorpresse",
"Verlag / Herausgeber": "Motor Presse Stuttgart"
},
{
"Rang": 77,
"Titel": "Deutsches Ärzteblatt",
"Auflage": 351.982,
"Gruppe": "Fach",
"Sachgruppe": "Medizin und Gesundheitswesen",
"Verlag / Herausgeber": "Deutscher Ärzte-Verlag"
},
{
"Rang": 78,
"Titel": "Laviva",
"Auflage": 335.934,
"Gruppe": "Publikum",
"Sachgruppe": "Monatliche Frauenzeitschriften",
"Verlag / Herausgeber": "Axel Springer Vertriebsservice GmbH"
},
{
"Rang": 79,
"Titel": "mein schönes Land",
"Auflage": 335.33,
"Gruppe": "Publikum",
"Sachgruppe": "Wohn- und Gartenzeitschriften",
"Verlag / Herausgeber": ""
},
{
"Rang": 80,
"Titel": "Computer Bild",
"Auflage": 334.72,
"Gruppe": "Publikum",
"Sachgruppe": "IT-/Telekommunikationszeitschriften",
"Verlag / Herausgeber": "Axel Springer"
},
{
"Rang": 81,
"Titel": "TV für mich",
"Auflage": 334.4,
"Gruppe": "Publikum",
"Sachgruppe": "Programmzeitschriften",
"Verlag / Herausgeber": "Gong Verlag"
},
{
"Rang": 82,
"Titel": "Lufthansa Magazin Exclusive",
"Auflage": 317.446,
"Gruppe": "Kunden",
"Sachgruppe": "Reisen/Verkehrsgesellschaften",
"Verlag / Herausgeber": ""
},
{
"Rang": 83,
"Titel": "Gala",
"Auflage": 315.745,
"Gruppe": "Publikum",
"Sachgruppe": "Aktuelle Zeitschriften und Magazine",
"Verlag / Herausgeber": "Gruner + Jahr"
},
{
"Rang": 84,
"Titel": "Glamour",
"Auflage": 314.832,
"Gruppe": "Publikum",
"Sachgruppe": "Monatliche Frauenzeitschriften",
"Verlag / Herausgeber": "Condé Nast Verlag"
},
{
"Rang": 85,
"Titel": "SUPERillu",
"Auflage": 314.807,
"Gruppe": "Publikum",
"Sachgruppe": "Aktuelle Zeitschriften und Magazine",
"Verlag / Herausgeber": "Hubert Burda Media"
},
{
"Rang": 86,
"Titel": "Gartenfreund/Siedlung und Eigenheim",
"Auflage": 314.601,
"Gruppe": "Publikum",
"Sachgruppe": "Wohn- und Gartenzeitschriften",
"Verlag / Herausgeber": ""
},
{
"Rang": 87,
"Titel": "Naturschutz heute",
"Auflage": 313.871,
"Gruppe": "Publikum",
"Sachgruppe": "Naturzeitschriften",
"Verlag / Herausgeber": "NABU Media-Agentur"
},
{
"Rang": 88,
"Titel": "Für Sie",
"Auflage": 307.31,
"Gruppe": "Publikum",
"Sachgruppe": "14-tägliche Frauenzeitschriften",
"Verlag / Herausgeber": "Jahreszeiten Verlag"
},
{
"Rang": 89,
"Titel": "Deutsches Ärzteblatt Kombi Praxis/Klinik",
"Auflage": 297.952,
"Gruppe": "Fach",
"Sachgruppe": "Medizin und Gesundheitswesen",
"Verlag / Herausgeber": ""
},
{
"Rang": 90,
"Titel": "Mein schöner Garten",
"Auflage": 297.636,
"Gruppe": "Publikum",
"Sachgruppe": "Wohn- und Gartenzeitschriften",
"Verlag / Herausgeber": "Hubert Burda Media"
},
{
"Rang": 91,
"Titel": "TV Today",
"Auflage": 287.221,
"Gruppe": "Publikum",
"Sachgruppe": "Programmzeitschriften",
"Verlag / Herausgeber": "Hubert Burda Media"
},
{
"Rang": 92,
"Titel": "on uni",
"Auflage": 279.705,
"Gruppe": "Kunden",
"Sachgruppe": "Medizin/Gesundheit",
"Verlag / Herausgeber": "wdv-Gruppe"
},
{
"Rang": 93,
"Titel": "Cosmopolitan",
"Auflage": 276.314,
"Gruppe": "Publikum",
"Sachgruppe": "Monatliche Frauenzeitschriften",
"Verlag / Herausgeber": "Bauer Media Group"
},
{
"Rang": 94,
"Titel": "Land IDEE",
"Auflage": 272.838,
"Gruppe": "Publikum",
"Sachgruppe": "Wohn- und Gartenzeitschriften",
"Verlag / Herausgeber": "Funke Mediengruppe"
},
{
"Rang": 95,
"Titel": "Frau im Trend",
"Auflage": 272.295,
"Gruppe": "Publikum",
"Sachgruppe": "Wöchentliche Frauenzeitschriften",
"Verlag / Herausgeber": "Hubert Burda Media"
},
{
"Rang": 96,
"Titel": "c't magazin für computertechnik",
"Auflage": 270.517,
"Gruppe": "Publikum",
"Sachgruppe": "IT-/Telekommunikationszeitschriften",
"Verlag / Herausgeber": "Heise Zeitschriften Verlag"
},
{
"Rang": 97,
"Titel": "kinder!",
"Auflage": 269.841,
"Gruppe": "Publikum",
"Sachgruppe": "Elternzeitschriften",
"Verlag / Herausgeber": "Junior-Verlag GmbH & Co. KG (Hamburg)"
},
{
"Rang": 98,
"Titel": "TV piccolino plus + (TV piccolino+TV Genie+My TV)",
"Auflage": 266.345,
"Gruppe": "Publikum",
"Sachgruppe": "Programmzeitschriften",
"Verlag / Herausgeber": ""
},
{
"Rang": 99,
"Titel": "Erziehung und Wissenschaft",
"Auflage": 263.359,
"Gruppe": "Fach",
"Sachgruppe": "Erziehung und Bildung",
"Verlag / Herausgeber": "STAMM Verlag GmbH"
},
{
"Rang": 100,
"Titel": "ACV Profil",
"Auflage": 257.7,
"Gruppe": "Publikum",
"Sachgruppe": "Motorpresse",
"Verlag / Herausgeber": ""
}
]

View file

@ -1,78 +0,0 @@
{
"format": 1,
"restore": {
"C:\\Users\\naumanfe\\Desktop\\BuecherwurmAPI\\BuecherwurmAPI.csproj": {}
},
"projects": {
"C:\\Users\\naumanfe\\Desktop\\BuecherwurmAPI\\BuecherwurmAPI.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "C:\\Users\\naumanfe\\Desktop\\BuecherwurmAPI\\BuecherwurmAPI.csproj",
"projectName": "BuecherwurmAPI",
"projectPath": "C:\\Users\\naumanfe\\Desktop\\BuecherwurmAPI\\BuecherwurmAPI.csproj",
"packagesPath": "C:\\Users\\naumanfe\\.nuget\\packages\\",
"outputPath": "C:\\Users\\naumanfe\\Desktop\\BuecherwurmAPI\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Microsoft\\Xamarin\\NuGet\\",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder"
],
"configFilePaths": [
"C:\\Users\\naumanfe\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Xamarin.Offline.config"
],
"originalTargetFrameworks": [
"netcoreapp3.1"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"netcoreapp3.1": {
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"netcoreapp3.1": {
"dependencies": {
"AutoMapper.Extensions.Microsoft.DependencyInjection": {
"target": "Package",
"version": "[7.0.0, )"
},
"Microsoft.AspNetCore.Mvc.NewtonsoftJson": {
"target": "Package",
"version": "[3.1.4, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.AspNetCore.App": {
"privateAssets": "none"
},
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\3.1.300\\RuntimeIdentifierGraph.json"
}
}
}
}
}

View file

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\naumanfe\.nuget\packages\;C:\Microsoft\Xamarin\NuGet\;C:\Program Files\dotnet\sdk\NuGetFallbackFolder</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">5.6.0</NuGetToolVersion>
</PropertyGroup>
<PropertyGroup>
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
</PropertyGroup>
</Project>

View file

@ -1,4 +0,0 @@
// <autogenerated />
using System;
using System.Reflection;
//[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v3.1", FrameworkDisplayName = "")]

View file

@ -1,23 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.42000
//
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("BuecherwurmAPI")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("BuecherwurmAPI")]
[assembly: System.Reflection.AssemblyTitleAttribute("BuecherwurmAPI")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Generated by the MSBuild WriteCodeFragment class.

View file

@ -1 +0,0 @@
0848efc0ec02497d4272fec239ac4c6242f14bec

View file

@ -1 +0,0 @@
ed9291efb2fcd04a6651c23e6d75ec73cb57b20c

View file

@ -1 +0,0 @@
6a5350a5cb714167d5d3cf3860661776b39d69a6

View file

@ -1,24 +0,0 @@
C:\Users\naumanfe\Desktop\BuecherwurmAPI\bin\Debug\netcoreapp3.1\BuecherwurmAPI.exe
C:\Users\naumanfe\Desktop\BuecherwurmAPI\bin\Debug\netcoreapp3.1\BuecherwurmAPI.deps.json
C:\Users\naumanfe\Desktop\BuecherwurmAPI\bin\Debug\netcoreapp3.1\BuecherwurmAPI.runtimeconfig.json
C:\Users\naumanfe\Desktop\BuecherwurmAPI\bin\Debug\netcoreapp3.1\BuecherwurmAPI.runtimeconfig.dev.json
C:\Users\naumanfe\Desktop\BuecherwurmAPI\bin\Debug\netcoreapp3.1\BuecherwurmAPI.dll
C:\Users\naumanfe\Desktop\BuecherwurmAPI\bin\Debug\netcoreapp3.1\BuecherwurmAPI.pdb
C:\Users\naumanfe\Desktop\BuecherwurmAPI\bin\Debug\netcoreapp3.1\AutoMapper.dll
C:\Users\naumanfe\Desktop\BuecherwurmAPI\bin\Debug\netcoreapp3.1\AutoMapper.Extensions.Microsoft.DependencyInjection.dll
C:\Users\naumanfe\Desktop\BuecherwurmAPI\bin\Debug\netcoreapp3.1\Microsoft.AspNetCore.JsonPatch.dll
C:\Users\naumanfe\Desktop\BuecherwurmAPI\bin\Debug\netcoreapp3.1\Microsoft.AspNetCore.Mvc.NewtonsoftJson.dll
C:\Users\naumanfe\Desktop\BuecherwurmAPI\bin\Debug\netcoreapp3.1\Newtonsoft.Json.dll
C:\Users\naumanfe\Desktop\BuecherwurmAPI\bin\Debug\netcoreapp3.1\Newtonsoft.Json.Bson.dll
C:\Users\naumanfe\Desktop\BuecherwurmAPI\obj\Debug\netcoreapp3.1\BuecherwurmAPI.csprojAssemblyReference.cache
C:\Users\naumanfe\Desktop\BuecherwurmAPI\obj\Debug\netcoreapp3.1\BuecherwurmAPI.AssemblyInfoInputs.cache
C:\Users\naumanfe\Desktop\BuecherwurmAPI\obj\Debug\netcoreapp3.1\BuecherwurmAPI.AssemblyInfo.cs
C:\Users\naumanfe\Desktop\BuecherwurmAPI\obj\Debug\netcoreapp3.1\BuecherwurmAPI.csproj.CoreCompileInputs.cache
C:\Users\naumanfe\Desktop\BuecherwurmAPI\obj\Debug\netcoreapp3.1\BuecherwurmAPI.MvcApplicationPartsAssemblyInfo.cache
C:\Users\naumanfe\Desktop\BuecherwurmAPI\obj\Debug\netcoreapp3.1\BuecherwurmAPI.RazorTargetAssemblyInfo.cache
C:\Users\naumanfe\Desktop\BuecherwurmAPI\obj\Debug\netcoreapp3.1\BuecherwurmAPI.csproj.CopyComplete
C:\Users\naumanfe\Desktop\BuecherwurmAPI\obj\Debug\netcoreapp3.1\staticwebassets\BuecherwurmAPI.StaticWebAssets.Manifest.cache
C:\Users\naumanfe\Desktop\BuecherwurmAPI\obj\Debug\netcoreapp3.1\staticwebassets\BuecherwurmAPI.StaticWebAssets.xml
C:\Users\naumanfe\Desktop\BuecherwurmAPI\obj\Debug\netcoreapp3.1\BuecherwurmAPI.dll
C:\Users\naumanfe\Desktop\BuecherwurmAPI\obj\Debug\netcoreapp3.1\BuecherwurmAPI.pdb
C:\Users\naumanfe\Desktop\BuecherwurmAPI\obj\Debug\netcoreapp3.1\BuecherwurmAPI.genruntimeconfig.cache

View file

@ -1 +0,0 @@
86c8e15dd33445635927cfaf398408205fd11473

File diff suppressed because it is too large Load diff

View file

@ -1 +0,0 @@
<StaticWebAssets Version="1.0" />