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 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)
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);";
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
{
// 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())
using (var cmd = connection.CreateCommand())
{
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.");
return;
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;
}
}
// 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())
public static Borrow AddBorrowedBookRecord(SqliteConnection connection, int bookId, int userId, DateTime borrowedDate, int days = 30)
{
if (!reader.HasRows)
try
{
Console.WriteLine($"Publisher with ID {publisherId} does not exist.");
return;
var borrowed = borrowedDate.ToString("yyyy-MM-dd");
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
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)
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 Books WHERE ID = @Bid;";
cmd.Parameters.AddWithValue("@Bid", bookId);
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);";
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)
cmd.CommandText = @"INSERT OR IGNORE INTO Borrows (DateOfBorrow, ReturnDue, UserID, BookID)
VALUES (@borrowed, @due, @user, @book);";
using (var command = new SqliteCommand())
{
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;
}
cmd.Parameters.AddWithValue("@borrowed", borrowed);
cmd.Parameters.AddWithValue("@due", due);
cmd.Parameters.AddWithValue("@user", userId);
cmd.Parameters.AddWithValue("@book", bookId);
cmd.ExecuteNonQuery();
}
// 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())
using (var cmd = connection.CreateCommand())
{
if (!reader.HasRows)
{
Console.WriteLine($"Book with ID {bookId} does not exist.");
return;
}
}
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);
// 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 reader = cmd.ExecuteReader())
{
Console.WriteLine($"AddBorrowedBookRecord failed: {ex.Message}");
return;
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;
}
}
}
}