BuecherwurmAPI/Models/KatalogModel.cs

150 lines
6.8 KiB
C#
Raw Normal View History

2020-06-02 10:55:17 +00:00
using System;
using System.Collections.Generic;
using BuecherwurmAPI.Models;
using Microsoft.Data.Sqlite;
using Microsoft.VisualBasic.CompilerServices;
namespace BuecherwurmAPI.Models
{
2020-06-03 10:43:03 +00:00
public interface ICatalogue
{
}
internal class KatalogModel : ICatalogue
2020-06-02 10:55:17 +00:00
{
private SqliteConnection _dbConnection;
2020-06-03 10:43:03 +00:00
public KatalogModel()
2020-06-02 10:55:17 +00:00
{
var connectionBuilder = new SqliteConnectionStringBuilder {DataSource = "LongWormMemory.db"};
_dbConnection = new SqliteConnection(connectionBuilder.ConnectionString);
_dbConnection.Open();
}
public IEnumerable<Book> GetAllBooks()
{
var books= new List<Book>();
using (var command = _dbConnection.CreateCommand())
{
command.CommandText = @"SELECT * FROM Books";
var dataReader = command.ExecuteReader();
while (dataReader.Read())
{
books.Add(new Book
{
Name = (string) dataReader["Books"],
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) dataReader["Category"],
ImageLink = (string) dataReader["ImageLink"],
LendTime = (long) dataReader["LendTime"],
LendType = (LendTypeEnum) dataReader["LendType"]
});
}
}
return books;
}
public Book GetBookById(long id)
{
using (var command = _dbConnection.CreateCommand())
{
command.Parameters.Add(new SqliteParameter("@id", SqliteType.Integer)).Value = id;
command.CommandText = @"SELECT * FROM Books WHERE ProductId = @id";
var dataReader = command.ExecuteReader();
var book = new Book
{
Name = (string) dataReader["Books"],
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) dataReader["Category"],
ImageLink = (string) dataReader["ImageLink"],
LendTime = (long) dataReader["LendTime"],
LendType = (LendTypeEnum) dataReader["LendType"]
};
return book;
}
}
2020-06-03 05:59:31 +00:00
public void DeleteBook(long id)
2020-06-02 10:55:17 +00:00
{
2020-06-03 05:37:37 +00:00
using (var command = _dbConnection.CreateCommand())
{
2020-06-03 05:59:31 +00:00
command.Parameters.Add(new SqliteParameter("@id", SqliteType.Integer)).Value = id;
2020-06-03 05:37:37 +00:00
command.CommandText = @"DELETE * FROM Books WHERE ProductId= @id";
var dataReader = command.ExecuteReader();
}
2020-06-02 10:55:17 +00:00
}
2020-06-03 10:43:03 +00:00
public long AddBook (BookPost book)
2020-06-02 10:55:17 +00:00
{
2020-06-03 05:37:37 +00:00
using (var command = _dbConnection.CreateCommand())
{
// funktioniert das so?
2020-06-03 08:19:45 +00:00
//muss ProduktId übergeben werden?
2020-06-03 10:43:03 +00:00
command.CommandText = @"INSERT INTO Books (Name, Author, Country, Link, Language, Pages, Year, ProductId, Category, ImageLink, LendTime, LendType) VALUES (@Name, @Author, @Country, @Link, @Language, @Pages, @Year, NULL, @Category, @ImageLink, @LendTime, @LendType )";
2020-06-03 07:41:45 +00:00
2020-06-03 08:19:45 +00:00
command.Parameters.Add(new SqliteParameter("@Name", book.Name));
command.Parameters.Add(new SqliteParameter("@Author", book.Author));
2020-06-03 10:43:03 +00:00
command.Parameters.Add(new SqliteParameter("@Country", book.Country));
2020-06-03 08:19:45 +00:00
command.Parameters.Add(new SqliteParameter("@Link", book.Link));
command.Parameters.Add(new SqliteParameter("@Language", book.Language));
command.Parameters.Add(new SqliteParameter("@Pages", book.Pages));
command.Parameters.Add(new SqliteParameter("@Year", book.Year));
command.Parameters.Add(new SqliteParameter("@Category", book.Category));
command.Parameters.Add(new SqliteParameter("@ImageLink", book.ImageLink));
command.Parameters.Add(new SqliteParameter("@LendTime", book.LendTime));
command.Parameters.Add(new SqliteParameter("@LendType", book.LendType));
2020-06-03 07:41:45 +00:00
var success = command.ExecuteNonQuery();
if (success == 1)
{
command.CommandText = @"SELECT last_insert_rowid()";
return (long)command.ExecuteScalar();
}
return -1;
2020-06-03 05:37:37 +00:00
}
2020-06-02 10:55:17 +00:00
}
2020-06-03 08:19:45 +00:00
public long EditBook (long id, Book book)
2020-06-02 10:55:17 +00:00
{
2020-06-03 05:59:31 +00:00
using (var command = _dbConnection.CreateCommand())
{
// funktioniert das so?
2020-06-03 10:43:03 +00:00
command.Parameters.Add(new SqliteParameter("@id", id));
command.CommandText = @"UPDATE Books SET (Name, Author, Country, Link, Language, Pages, Year, Category, ImageLink, LendTime, LendType) = (@Name, @Author, @Country, @Link, @Language, @Pages, @Year, @Category, @ImageLink, @LendTime, @LendType ) WHERE ProductId = @id";
2020-06-03 08:19:45 +00:00
command.Parameters.Add(new SqliteParameter("@Name", book.Name));
command.Parameters.Add(new SqliteParameter("@Author", book.Author));
2020-06-03 10:43:03 +00:00
command.Parameters.Add(new SqliteParameter("@Country", book.Country));
2020-06-03 08:19:45 +00:00
command.Parameters.Add(new SqliteParameter("@Link", book.Link));
command.Parameters.Add(new SqliteParameter("@Language", book.Language));
command.Parameters.Add(new SqliteParameter("@Pages", book.Pages));
command.Parameters.Add(new SqliteParameter("@Year", book.Year));
command.Parameters.Add(new SqliteParameter("@Category", book.Category));
command.Parameters.Add(new SqliteParameter("@ImageLink", book.ImageLink));
command.Parameters.Add(new SqliteParameter("@LendTime", book.LendTime));
command.Parameters.Add(new SqliteParameter("@LendType", book.LendType));
var success = command.ExecuteNonQuery();
2020-06-03 10:43:03 +00:00
return id;
2020-06-03 05:59:31 +00:00
}
2020-06-02 10:55:17 +00:00
}
}
}