diff --git a/Controllers/InventarController.cs b/Controllers/ItemController.cs similarity index 55% rename from Controllers/InventarController.cs rename to Controllers/ItemController.cs index 2c5e5cd..33d1135 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,19 +28,17 @@ namespace BuecherwurmAPI.Controllers // POST Inventar [HttpPost] - public ActionResult> NewItem(int bookId) + + public ActionResult> NewItem(ItemPost item) { - var itemid = insertItemReturningId(bookId); - return Ok(new Item - { - Id = itemId, - BookId = bookId, - }); + var newItem = _repository.NewItem(item); + return Ok(newItem); + } // GET Inventar/{id} - [HttpGet("{id}", Name = "GetItemByID")] - public ActionResult> GetItemByID(int id) + [HttpGet("{itemId}")] + public ActionResult> GetItemByID(long id) { var item = _repository.GetItemById(id); if (item != null) @@ -47,20 +46,19 @@ namespace BuecherwurmAPI.Controllers return Ok(item); } return NoContent(); - } - // DELETE inventory/{id} - [HttpDelete("id")] - public ActionResult> DeleteItem(int id) + + [HttpDelete("itemId")] + public ActionResult> DeleteItem(long itemId) { - var item = _repository.GetItemById(id); - if (item == null) - { - return NotFound(); - } - _repository.DeleteItem(item); + var item = _repository.GetItemById(itemId); + if(item == null) + { + return NotFound(); + } + _repository.DeleteItem(itemId); return NoContent(); } 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/IItemRepo.cs b/Models/IItemRepo.cs index 46d7f62..7646320 100644 --- a/Models/IItemRepo.cs +++ b/Models/IItemRepo.cs @@ -6,8 +6,8 @@ namespace BuecherwurmAPI.Models public interface IItemRepo { IEnumerable 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); } } \ No newline at end of file diff --git a/Models/Item.cs b/Models/Item.cs index 17e6017..2726273 100644 --- a/Models/Item.cs +++ b/Models/Item.cs @@ -5,8 +5,12 @@ namespace BuecherwurmAPI.Models public class Item { [Key, Required] - public int Id { get; set; } + public long ItemId { get; set; } [Required] + public long BookId { get; set; } + } + public class ItemPost + { public int BookId { get; set; } } diff --git a/Models/ItemModel.cs b/Models/ItemModel.cs new file mode 100644 index 0000000..f2ef1b1 --- /dev/null +++ b/Models/ItemModel.cs @@ -0,0 +1,121 @@ +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 = (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 Id = @itemId"; + var dataReader = command.ExecuteReader(); + + while (dataReader.Read()) + { + var returned = (long) dataReader["Returned"] == 1; + + 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.Parameters.Add(new SqliteParameter("@id", SqliteType.Integer)).Value = itemId; + command.CommandText = "DELETE FROM Items WHERE ItemId = @itemId"; + command.Parameters.Add(new SqliteParameter("@itemId", itemId)); + command.ExecuteNonQuery(); + } + } + } +} \ 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