diff --git a/Controllers/InventarController.cs b/Controllers/ItemController.cs similarity index 83% rename from Controllers/InventarController.cs rename to Controllers/ItemController.cs index 5e8870d..7e400b1 100644 --- a/Controllers/InventarController.cs +++ b/Controllers/ItemController.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using BuecherwurmAPI.Models; using Microsoft.AspNetCore.Mvc; using System.Linq; +using Microsoft.Data.Sqlite; //using Microsoft.EntityFrameworkCore; @@ -9,11 +10,11 @@ namespace BuecherwurmAPI.Controllers { [Route("inventar")] [ApiController] - public class InventarController : ControllerBase + public class ItemController : ControllerBase { private readonly IItemRepo _repository; - public InventarController(IItemRepo repository) + public ItemController(IItemRepo repository) { _repository = repository; } @@ -27,12 +28,13 @@ namespace BuecherwurmAPI.Controllers // POST Inventar [HttpPost] - public ActionResult> NewItem(Item item) + public ActionResult> NewItem(int bookId) { return Ok(new Item { - Id = item.Id, - BookId = item.BookId, + + ItemId = itemId, + BookId = bookId }); } diff --git a/DTOs/ItemRead.cs b/DTOs/ItemRead.cs new file mode 100644 index 0000000..e70a016 --- /dev/null +++ b/DTOs/ItemRead.cs @@ -0,0 +1,9 @@ +using System; + +namespace BuecherwurmAPI.DTOs +{ + public class ItemReadDTO + { + public int BookId { get; set;} + } +} \ No newline at end of file diff --git a/Models/ItemModel.cs b/Models/ItemModel.cs new file mode 100644 index 0000000..ff6d83e --- /dev/null +++ b/Models/ItemModel.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using BuecherwurmAPI.Models; +using Microsoft.Data.Sqlite; +using Microsoft.VisualBasic.CompilerServices; + +namespace BuecherwurmAPI.Models +{ + internal class ItemModel : IItemRepo + { + 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 GetAllItems() + { + var items = new List(); + + // using automatically disposes the command after completion + using (var command = _dbConnection.CreateCommand()) + { + command.CommandText = @"SELECT * FROM Items"; + var dataReader = command.ExecuteReader(); + + while (dataReader.Read()) + { + var returned = (long) dataReader["Returned"] == 1; + + items.Add(new Item + { + ItemId = (int) dataReader["ItemId"], + BookId = (int) dataReader["BookId"] + }); + } + } + return items; + } + + public Item GetItemById(int id) + { + using (var command = _dbConnection.CreateCommand()) + { + command.Parameters.Add(new SqliteParameter("@id", SqliteType.Integer)).Value = id; + command.CommandText = @"SELECT * FROM Items WHERE Id = @id"; + var dataReader = command.ExecuteReader(); + + while (dataReader.Read()) + { + var returned = (long) dataReader["Returned"] == 1; + + var item = new Item + { + ItemId = (int) dataReader["ItemId"], + BookId = (int) dataReader["BookId"] + }; + return item; + } + } + return null; + } + public Item NewItem(int bookId) + { + using (var command = _dbConnection.CreateCommand()) + { + //hier soll jetz der NewItem Command folgen. ein POST mit EingabeInfo {id} = "BookId" + command.CommandText = @"INSERT INTO Item(ItemId,BookId) OUTPUT INSERTED.ID VALUES (@ItemID,@BookId"; + return item; + } + } + + public void DeleteItem(Item item) + { + using (var command = _dbConnection.CreateCommand()) + { + command.Parameters.Add(new SqliteParameter("@id", SqliteType.Integer)).Value = item; + //hier soll jetz der NewItem Command folgen. ein POST mit EingabeInfo {id} = "BookId" + + command.CommandText = @"SELECT * FROM Items WHERE ItemId = @id"; + } + } + } +} \ No newline at end of file diff --git a/Models/Tables.cs b/Models/Tables.cs index f3143cb..2bc61c3 100644 --- a/Models/Tables.cs +++ b/Models/Tables.cs @@ -6,6 +6,7 @@ namespace BuecherwurmAPI.Models { public const string Lends = "Lends"; public const string Katalog = "Katalog"; + public const string Items = "Items"; } } } \ No newline at end of file