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)
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;
}
}
}
}