From 22aec4322a1a8ad66d613c34fb2f21d0d023602d Mon Sep 17 00:00:00 2001 From: adam Date: Mon, 10 Nov 2025 09:41:10 +0100 Subject: [PATCH] feat: namespace team2 --- src/team2.cs | 340 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 227 insertions(+), 113 deletions(-) diff --git a/src/team2.cs b/src/team2.cs index 9a85947..941f361 100644 --- a/src/team2.cs +++ b/src/team2.cs @@ -1,151 +1,265 @@ using System; using Microsoft.Data.Sqlite; +using Database.Dto; -class AddRecords +namespace Team2 { - public static void AddAuthor(SqliteConnection connection, string name, string surname, DateTime dateOfBirth) + public static class Team2 +{ + public static AuthorDto AddAuthor(SqliteConnection connection, string name, string surname, DateTime dateOfBirth) { - string query = "INSERT OR IGNORE INTO Authors (Name, Surname, DateOfBirth) VALUES (@name, @surname, @dob);"; - using (var command = new SqliteCommand(query, connection)) + try { - command.Parameters.AddWithValue("@name", name); - command.Parameters.AddWithValue("@surname", surname); - command.Parameters.AddWithValue("@dob", dateOfBirth.ToString("yyyy-MM-dd")); - command.ExecuteNonQuery(); - Console.WriteLine("Author added successfully."); + var dob = dateOfBirth.ToString("yyyy-MM-dd"); + using (var cmd = connection.CreateCommand()) + { + cmd.CommandText = "INSERT OR IGNORE INTO Authors (Name, Surname, DateOfBirth) VALUES (@name, @surname, @dob);"; + cmd.Parameters.AddWithValue("@name", name); + cmd.Parameters.AddWithValue("@surname", surname); + cmd.Parameters.AddWithValue("@dob", dob); + cmd.ExecuteNonQuery(); + } + + using (var cmd = connection.CreateCommand()) + { + cmd.CommandText = "SELECT ID, Name, Surname, DateOfBirth FROM Authors WHERE Name = @name AND Surname = @surname AND DateOfBirth = @dob LIMIT 1;"; + cmd.Parameters.AddWithValue("@name", name); + cmd.Parameters.AddWithValue("@surname", surname); + cmd.Parameters.AddWithValue("@dob", dob); + + using (var reader = cmd.ExecuteReader()) + { + if (!reader.Read()) return null; + var a = new AuthorDto + { + Id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0), + Name = reader.IsDBNull(1) ? "" : reader.GetString(1), + Surname = reader.IsDBNull(2) ? "" : reader.GetString(2), + DateOfBirth = reader.IsDBNull(3) ? DateTime.MinValue : reader.GetDateTime(3) + }; + return a; + } + } + } + catch + { + return null; } } - public static void AddPublisher(SqliteConnection connection, string name, string state) + public static Publisher AddPublisher(SqliteConnection connection, string name, string state) { - string query = "INSERT OR IGNORE INTO Publisher (Name, State) VALUES (@name, @state);"; - using (var command = new SqliteCommand(query, connection)) + try { - command.Parameters.AddWithValue("@name", name); - command.Parameters.AddWithValue("@state", state); - command.ExecuteNonQuery(); + using (var cmd = connection.CreateCommand()) + { + cmd.CommandText = "INSERT OR IGNORE INTO Publisher (Name, State) VALUES (@name, @state);"; + cmd.Parameters.AddWithValue("@name", name); + cmd.Parameters.AddWithValue("@state", state); + cmd.ExecuteNonQuery(); + } + + using (var cmd = connection.CreateCommand()) + { + cmd.CommandText = "SELECT ID, Name, State FROM Publisher WHERE Name = @name AND State = @state LIMIT 1;"; + cmd.Parameters.AddWithValue("@name", name); + cmd.Parameters.AddWithValue("@state", state); + + using (var reader = cmd.ExecuteReader()) + { + if (!reader.Read()) return null; + return new Publisher + { + Id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0), + Name = reader.IsDBNull(1) ? "" : reader.GetString(1), + State = reader.IsDBNull(2) ? "" : reader.GetString(2) + }; + } + } + } + catch + { + return null; } } - public static void AddBook(SqliteConnection connection, string name, int authorId, int publisherId, int year, int total, int available) + public static BookDto AddBook(SqliteConnection connection, string name, int authorId, int publisherId, int year, int total, int available) { - string query = @"INSERT OR IGNORE INTO Books (Name, AuthorID, PublisherID, YearOfRelease, Total, Available) - VALUES (@name, @author, @publisher, @year, @total, @available);"; - - using (var command = new SqliteCommand()) + try { - command.Connection = connection; - try + // check author + using (var cmd = connection.CreateCommand()) { - // Check author exists - command.CommandText = "SELECT 1 FROM Authors WHERE ID = @Aid;"; - command.Parameters.Clear(); - command.Parameters.AddWithValue("@Aid", authorId); - using (var reader = command.ExecuteReader()) + cmd.CommandText = "SELECT 1 FROM Authors WHERE ID = @Aid;"; + cmd.Parameters.AddWithValue("@Aid", authorId); + using (var r = cmd.ExecuteReader()) { - if (!reader.HasRows) - { - Console.WriteLine($"Author with ID {authorId} does not exist."); - return; - } + if (!r.HasRows) return null; } - - // Check publisher exists - command.CommandText = "SELECT 1 FROM Publisher WHERE ID = @Pid;"; - command.Parameters.Clear(); - command.Parameters.AddWithValue("@Pid", publisherId); - using (var reader = command.ExecuteReader()) - { - if (!reader.HasRows) - { - Console.WriteLine($"Publisher with ID {publisherId} does not exist."); - return; - } - } - - // Insert book - command.CommandText = query; - command.Parameters.Clear(); - command.Parameters.AddWithValue("@name", name); - command.Parameters.AddWithValue("@year", year); - command.Parameters.AddWithValue("@total", total); - command.Parameters.AddWithValue("@available", available); - command.Parameters.AddWithValue("@author", authorId); - command.Parameters.AddWithValue("@publisher", publisherId); - command.ExecuteNonQuery(); - } - catch (Exception ex) + + // check publisher + using (var cmd = connection.CreateCommand()) { - // Log and return so the exception doesn't bubble to the caller - Console.WriteLine($"AddBook failed: {ex.Message}"); - return; + cmd.CommandText = "SELECT 1 FROM Publisher WHERE ID = @Pid;"; + cmd.Parameters.AddWithValue("@Pid", publisherId); + using (var r = cmd.ExecuteReader()) + { + if (!r.HasRows) return null; + } } + + using (var cmd = connection.CreateCommand()) + { + cmd.CommandText = @"INSERT OR IGNORE INTO Books (Name, AuthorID, PublisherID, YearOfRelease, Total, Available) + VALUES (@name, @author, @publisher, @year, @total, @available);"; + cmd.Parameters.AddWithValue("@name", name); + cmd.Parameters.AddWithValue("@author", authorId); + cmd.Parameters.AddWithValue("@publisher", publisherId); + cmd.Parameters.AddWithValue("@year", year); + cmd.Parameters.AddWithValue("@total", total); + cmd.Parameters.AddWithValue("@available", available); + cmd.ExecuteNonQuery(); + } + + using (var cmd = connection.CreateCommand()) + { + cmd.CommandText = @"SELECT ID, Name, AuthorID, PublisherID, YearOfRelease, Total, Available + FROM Books + WHERE Name = @name AND AuthorID = @author AND PublisherID = @publisher AND YearOfRelease = @year + LIMIT 1;"; + cmd.Parameters.AddWithValue("@name", name); + cmd.Parameters.AddWithValue("@author", authorId); + cmd.Parameters.AddWithValue("@publisher", publisherId); + cmd.Parameters.AddWithValue("@year", year); + + using (var reader = cmd.ExecuteReader()) + { + if (!reader.Read()) return null; + return new BookDto + { + Id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0), + Name = reader.IsDBNull(1) ? "" : reader.GetString(1), + YearOfRelease = reader.IsDBNull(4) ? 0 : reader.GetInt32(4), + Total = reader.IsDBNull(5) ? 0 : reader.GetInt32(5), + Author = new AuthorDto { Id = reader.IsDBNull(2) ? 0 : reader.GetInt32(2) }, + Publisher = new Publisher { Id = reader.IsDBNull(3) ? 0 : reader.GetInt32(3) } + }; + } + } + } + catch + { + return null; } } - public static void AddUser(SqliteConnection connection, string name, string surname) + public static UserDto AddUser(SqliteConnection connection, string name, string surname) { - string query = "INSERT OR IGNORE INTO Users (Name, Surname) VALUES (@name, @surname);"; - using (var command = new SqliteCommand(query, connection)) + try { - command.Parameters.AddWithValue("@name", name); - command.Parameters.AddWithValue("@surname", surname); - command.ExecuteNonQuery(); + using (var cmd = connection.CreateCommand()) + { + cmd.CommandText = "INSERT OR IGNORE INTO Users (Name, Surname) VALUES (@name, @surname);"; + cmd.Parameters.AddWithValue("@name", name); + cmd.Parameters.AddWithValue("@surname", surname); + cmd.ExecuteNonQuery(); + } + + using (var cmd = connection.CreateCommand()) + { + cmd.CommandText = "SELECT ID, Name, Surname FROM Users WHERE Name = @name AND Surname = @surname LIMIT 1;"; + cmd.Parameters.AddWithValue("@name", name); + cmd.Parameters.AddWithValue("@surname", surname); + + using (var reader = cmd.ExecuteReader()) + { + if (!reader.Read()) return null; + return new UserDto + { + Id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0), + Name = reader.IsDBNull(1) ? "" : reader.GetString(1), + Surname = reader.IsDBNull(2) ? "" : reader.GetString(2) + }; + } + } + } + catch + { + return null; } } - public static void AddBorrowedBookRecord(SqliteConnection connection, int bookId, int userId, DateTime borrowedDate, int days = 30) + public static Borrow AddBorrowedBookRecord(SqliteConnection connection, int bookId, int userId, DateTime borrowedDate, int days = 30) { - string returnDue = borrowedDate.AddDays(days).ToString("yyyy-MM-dd"); - string query = @"INSERT OR IGNORE INTO Borrows (DateOfBorrow, ReturnDue, UserID, BookID) - VALUES (@borrowed, @due, @user, @book);"; - - using (var command = new SqliteCommand()) + try { - command.Connection = connection; - try - { - // Check user exists - command.CommandText = "SELECT 1 FROM Users WHERE ID = @Uid;"; - command.Parameters.Clear(); - command.Parameters.AddWithValue("@Uid", userId); - using (var reader = command.ExecuteReader()) - { - if (!reader.HasRows) - { - Console.WriteLine($"User with ID {userId} does not exist."); - return; - } - } + var borrowed = borrowedDate.ToString("yyyy-MM-dd"); + var due = borrowedDate.AddDays(days).ToString("yyyy-MM-dd"); - // Check book exists - command.CommandText = "SELECT 1 FROM Books WHERE ID = @Bid;"; - command.Parameters.Clear(); - command.Parameters.AddWithValue("@Bid", bookId); - using (var reader = command.ExecuteReader()) - { - if (!reader.HasRows) - { - Console.WriteLine($"Book with ID {bookId} does not exist."); - return; - } - } - - // Insert borrow record - command.CommandText = query; - command.Parameters.Clear(); - command.Parameters.AddWithValue("@borrowed", borrowedDate.ToString("yyyy-MM-dd")); - command.Parameters.AddWithValue("@due", returnDue); - command.Parameters.AddWithValue("@user", userId); - command.Parameters.AddWithValue("@book", bookId); - command.ExecuteNonQuery(); - } - catch (Exception ex) + using (var cmd = connection.CreateCommand()) { - Console.WriteLine($"AddBorrowedBookRecord failed: {ex.Message}"); - return; + cmd.CommandText = "SELECT 1 FROM Users WHERE ID = @Uid;"; + cmd.Parameters.AddWithValue("@Uid", userId); + using (var r = cmd.ExecuteReader()) + { + if (!r.HasRows) return null; + } } + + using (var cmd = connection.CreateCommand()) + { + cmd.CommandText = "SELECT 1 FROM Books WHERE ID = @Bid;"; + cmd.Parameters.AddWithValue("@Bid", bookId); + using (var r = cmd.ExecuteReader()) + { + if (!r.HasRows) return null; + } + } + + using (var cmd = connection.CreateCommand()) + { + cmd.CommandText = @"INSERT OR IGNORE INTO Borrows (DateOfBorrow, ReturnDue, UserID, BookID) + VALUES (@borrowed, @due, @user, @book);"; + cmd.Parameters.AddWithValue("@borrowed", borrowed); + cmd.Parameters.AddWithValue("@due", due); + cmd.Parameters.AddWithValue("@user", userId); + cmd.Parameters.AddWithValue("@book", bookId); + cmd.ExecuteNonQuery(); + } + + using (var cmd = connection.CreateCommand()) + { + cmd.CommandText = @"SELECT ID, DateOfBorrow, ReturnDue, DateOfReturn, UserID, BookID + FROM Borrows + WHERE DateOfBorrow = @borrowed AND ReturnDue = @due AND UserID = @user AND BookID = @book + LIMIT 1;"; + cmd.Parameters.AddWithValue("@borrowed", borrowed); + cmd.Parameters.AddWithValue("@due", due); + cmd.Parameters.AddWithValue("@user", userId); + cmd.Parameters.AddWithValue("@book", bookId); + + using (var reader = cmd.ExecuteReader()) + { + if (!reader.Read()) return null; + var b = new Borrow + { + Id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0), + DateOfBorrow = reader.IsDBNull(1) ? DateTime.MinValue : reader.GetDateTime(1), + ReturnDue = reader.IsDBNull(2) ? DateTime.MinValue : reader.GetDateTime(2), + DateOfReturn = reader.IsDBNull(3) ? DateTime.MinValue : reader.GetDateTime(3), + User = new UserDto { Id = reader.IsDBNull(4) ? 0 : reader.GetInt32(4) }, + Book = new BookDto { Id = reader.IsDBNull(5) ? 0 : reader.GetInt32(5) } + }; + return b; + } + } + } + catch + { + return null; } } } + +}