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
VALUES (@name, @author, @publisher, @year, @total, @available);";
using (var command = new SqliteCommand())
{ {
command.Connection = connection; // check author
try using (var cmd = connection.CreateCommand())
{ {
// Check author exists cmd.CommandText = "SELECT 1 FROM Authors WHERE ID = @Aid;";
command.CommandText = "SELECT 1 FROM Authors WHERE ID = @Aid;"; cmd.Parameters.AddWithValue("@Aid", authorId);
command.Parameters.Clear(); using (var r = cmd.ExecuteReader())
command.Parameters.AddWithValue("@Aid", authorId);
using (var reader = command.ExecuteReader())
{ {
if (!reader.HasRows) if (!r.HasRows) return null;
{
Console.WriteLine($"Author with ID {authorId} does not exist.");
return;
}
} }
// 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 cmd.CommandText = "SELECT 1 FROM Publisher WHERE ID = @Pid;";
Console.WriteLine($"AddBook failed: {ex.Message}"); cmd.Parameters.AddWithValue("@Pid", publisherId);
return; 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);"; try
using (var command = new SqliteCommand(query, connection))
{ {
command.Parameters.AddWithValue("@name", name); using (var cmd = connection.CreateCommand())
command.Parameters.AddWithValue("@surname", surname); {
command.ExecuteNonQuery(); 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"); try
string query = @"INSERT OR IGNORE INTO Borrows (DateOfBorrow, ReturnDue, UserID, BookID)
VALUES (@borrowed, @due, @user, @book);";
using (var command = new SqliteCommand())
{ {
command.Connection = connection; var borrowed = borrowedDate.ToString("yyyy-MM-dd");
try var due = borrowedDate.AddDays(days).ToString("yyyy-MM-dd");
{
// 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)
{
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}"); cmd.CommandText = "SELECT 1 FROM Users WHERE ID = @Uid;";
return; 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;
} }
} }
} }
}