feat: namespace team2

This commit is contained in:
adam 2025-11-10 09:41:10 +01:00
parent 10fdfebcb3
commit 22aec4322a

View File

@ -1,151 +1,265 @@
using System; using System;
using Microsoft.Data.Sqlite; 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
{ {
string query = "INSERT OR IGNORE INTO Authors (Name, Surname, DateOfBirth) VALUES (@name, @surname, @dob);"; public static AuthorDto AddAuthor(SqliteConnection connection, string name, string surname, DateTime dateOfBirth)
using (var command = new SqliteCommand(query, connection))
{ {
command.Parameters.AddWithValue("@name", name); try
command.Parameters.AddWithValue("@surname", surname); {
command.Parameters.AddWithValue("@dob", dateOfBirth.ToString("yyyy-MM-dd")); var dob = dateOfBirth.ToString("yyyy-MM-dd");
command.ExecuteNonQuery(); using (var cmd = connection.CreateCommand())
Console.WriteLine("Author added successfully."); {
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);"; try
using (var command = new SqliteCommand(query, connection))
{ {
command.Parameters.AddWithValue("@name", name); using (var cmd = connection.CreateCommand())
command.Parameters.AddWithValue("@state", state); {
command.ExecuteNonQuery(); 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) try
{
// check author
using (var cmd = connection.CreateCommand())
{
cmd.CommandText = "SELECT 1 FROM Authors WHERE ID = @Aid;";
cmd.Parameters.AddWithValue("@Aid", authorId);
using (var r = cmd.ExecuteReader())
{
if (!r.HasRows) return null;
}
}
// check publisher
using (var cmd = connection.CreateCommand())
{
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);"; 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 command = new SqliteCommand()) 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 UserDto AddUser(SqliteConnection connection, string name, string surname)
{ {
command.Connection = connection;
try try
{ {
// Check author exists using (var cmd = connection.CreateCommand())
command.CommandText = "SELECT 1 FROM Authors WHERE ID = @Aid;";
command.Parameters.Clear();
command.Parameters.AddWithValue("@Aid", authorId);
using (var reader = command.ExecuteReader())
{ {
if (!reader.HasRows) 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())
{ {
Console.WriteLine($"Author with ID {authorId} does not exist."); cmd.CommandText = "SELECT ID, Name, Surname FROM Users WHERE Name = @name AND Surname = @surname LIMIT 1;";
return; 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;
} }
} }
// Check publisher exists public static Borrow AddBorrowedBookRecord(SqliteConnection connection, int bookId, int userId, DateTime borrowedDate, int days = 30)
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) try
{ {
Console.WriteLine($"Publisher with ID {publisherId} does not exist."); var borrowed = borrowedDate.ToString("yyyy-MM-dd");
return; var due = borrowedDate.AddDays(days).ToString("yyyy-MM-dd");
using (var cmd = connection.CreateCommand())
{
cmd.CommandText = "SELECT 1 FROM Users WHERE ID = @Uid;";
cmd.Parameters.AddWithValue("@Uid", userId);
using (var r = cmd.ExecuteReader())
{
if (!r.HasRows) return null;
} }
} }
// Insert book using (var cmd = connection.CreateCommand())
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)
{ {
// Log and return so the exception doesn't bubble to the caller cmd.CommandText = "SELECT 1 FROM Books WHERE ID = @Bid;";
Console.WriteLine($"AddBook failed: {ex.Message}"); cmd.Parameters.AddWithValue("@Bid", bookId);
return; using (var r = cmd.ExecuteReader())
} {
if (!r.HasRows) return null;
} }
} }
public static void AddUser(SqliteConnection connection, string name, string surname) using (var cmd = connection.CreateCommand())
{ {
string query = "INSERT OR IGNORE INTO Users (Name, Surname) VALUES (@name, @surname);"; cmd.CommandText = @"INSERT OR IGNORE INTO Borrows (DateOfBorrow, ReturnDue, UserID, BookID)
using (var command = new SqliteCommand(query, connection))
{
command.Parameters.AddWithValue("@name", name);
command.Parameters.AddWithValue("@surname", surname);
command.ExecuteNonQuery();
}
}
public static void 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);"; 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 command = new SqliteCommand()) using (var cmd = connection.CreateCommand())
{ {
command.Connection = connection; cmd.CommandText = @"SELECT ID, DateOfBorrow, ReturnDue, DateOfReturn, UserID, BookID
try 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())
{ {
// Check user exists if (!reader.Read()) return null;
command.CommandText = "SELECT 1 FROM Users WHERE ID = @Uid;"; var b = new Borrow
command.Parameters.Clear();
command.Parameters.AddWithValue("@Uid", userId);
using (var reader = command.ExecuteReader())
{ {
if (!reader.HasRows) 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
{ {
Console.WriteLine($"User with ID {userId} does not exist."); return null;
return; }
} }
} }
// 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)
{
Console.WriteLine($"AddBorrowedBookRecord failed: {ex.Message}");
return;
}
}
}
} }