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
{
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);"; try
using (var command = new SqliteCommand(query, connection))
{ {
command.Parameters.AddWithValue("@name", name); var dob = dateOfBirth.ToString("yyyy-MM-dd");
command.Parameters.AddWithValue("@surname", surname); using (var cmd = connection.CreateCommand())
command.Parameters.AddWithValue("@dob", dateOfBirth.ToString("yyyy-MM-dd")); {
command.ExecuteNonQuery(); cmd.CommandText = "INSERT OR IGNORE INTO Authors (Name, Surname, DateOfBirth) VALUES (@name, @surname, @dob);";
Console.WriteLine("Author added successfully."); 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);
using (var command = new SqliteCommand()) cmd.Parameters.AddWithValue("@due", due);
{ cmd.Parameters.AddWithValue("@user", userId);
command.Connection = connection; cmd.Parameters.AddWithValue("@book", bookId);
try cmd.ExecuteNonQuery();
{
// 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;
}
} }
// Check book exists using (var cmd = connection.CreateCommand())
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) cmd.CommandText = @"SELECT ID, DateOfBorrow, ReturnDue, DateOfReturn, UserID, BookID
{ FROM Borrows
Console.WriteLine($"Book with ID {bookId} does not exist."); WHERE DateOfBorrow = @borrowed AND ReturnDue = @due AND UserID = @user AND BookID = @book
return; LIMIT 1;";
} cmd.Parameters.AddWithValue("@borrowed", borrowed);
} cmd.Parameters.AddWithValue("@due", due);
cmd.Parameters.AddWithValue("@user", userId);
cmd.Parameters.AddWithValue("@book", bookId);
// Insert borrow record using (var reader = cmd.ExecuteReader())
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}"); if (!reader.Read()) return null;
return; 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;
}
}
}
} }