using LibraryManagementSystem.Console.Database; using LibraryManagementSystem.Console.Models; using LibraryManagementSystem.Console.Repositories; using LibraryManagementSystem.Console.Utils; using Npgsql; LoggerConfigurator.Configure(); DatabaseManager databaseManager = new(); IUserRepository userRepository = new UserRepository(databaseManager); IBookRepository bookRepository = new BookRepository(databaseManager); while (true) { System.Console.WriteLine(); System.Console.WriteLine("===== LIBRARY MENU ====="); System.Console.WriteLine("1 - Add user"); System.Console.WriteLine("2 - Show users"); System.Console.WriteLine("3 - Update user"); System.Console.WriteLine("4 - Delete user"); System.Console.WriteLine("5 - Add book"); System.Console.WriteLine("6 - Show books"); System.Console.WriteLine("0 - Exit"); System.Console.Write("Select: "); string? choice = System.Console.ReadLine(); switch (choice) { case "1": AddUser(userRepository); break; case "2": ShowUsers(userRepository); break; case "3": UpdateUser(userRepository); break; case "4": DeleteUser(userRepository); break; case "5": AddBook(bookRepository); break; case "6": ShowBooks(bookRepository); break; case "0": return; default: System.Console.WriteLine("Invalid option."); break; } } /// /// Добавляет нового пользователя. /// /// /// Репозиторий пользователей. /// static void AddUser(IUserRepository repository) { try { System.Console.Write("Username: "); string username = System.Console.ReadLine()!; System.Console.Write("Password: "); string password = System.Console.ReadLine()!; System.Console.Write("Email: "); string email = System.Console.ReadLine()!; User user = new() { Username = username, PasswordHash = PasswordHasher.HashPassword(password), Email = email, }; int id = repository.Create(user); System.Console.WriteLine($"User created. ID: {id}"); } catch (PostgresException ex) { if (ex.SqlState == "23505") { System.Console.WriteLine("User with this username or email already exists."); } else { System.Console.WriteLine($"Database error: {ex.Message}"); } } catch (Exception ex) { System.Console.WriteLine($"Unexpected error: {ex.Message}"); } } /// /// Отображает список пользователей. /// /// /// Репозиторий пользователей. /// static void ShowUsers(IUserRepository repository) { try { var users = repository.GetAll(); foreach (var user in users) { System.Console.WriteLine($"{user.Id} | " + $"{user.Username} | " + $"{user.Email}"); } } catch (Exception ex) { System.Console.WriteLine($"Error loading users: {ex.Message}"); } } /// /// Обновляет данные пользователя. /// /// /// Репозиторий пользователей. /// static void UpdateUser(IUserRepository repository) { try { System.Console.Write("User ID: "); if (!int.TryParse(System.Console.ReadLine(), out int id)) { System.Console.WriteLine("Invalid ID format."); return; } var user = repository.GetById(id); if (user is null) { System.Console.WriteLine("User not found."); return; } System.Console.Write("New username: "); user.Username = System.Console.ReadLine()!; System.Console.Write("New email: "); user.Email = System.Console.ReadLine()!; bool success = repository.Update(user); System.Console.WriteLine(success ? "User updated." : "Update failed."); } catch (PostgresException ex) { if (ex.SqlState == "23505") { System.Console.WriteLine("Username or email already exists."); } else { System.Console.WriteLine($"Database error: {ex.Message}"); } } catch (Exception ex) { System.Console.WriteLine($"Unexpected error: {ex.Message}"); } } /// /// Удаляет пользователя. /// /// /// Репозиторий пользователей. /// static void DeleteUser(IUserRepository repository) { try { System.Console.Write("User ID: "); if (!int.TryParse(System.Console.ReadLine(), out int id)) { System.Console.WriteLine("Invalid ID format."); return; } bool success = repository.Delete(id); System.Console.WriteLine(success ? "User deleted." : "User not found."); } catch (Exception ex) { System.Console.WriteLine($"Delete error: {ex.Message}"); } } /// /// Добавляет новую книгу. /// /// /// Репозиторий книг. /// static void AddBook(IBookRepository repository) { try { System.Console.Write("Title: "); string title = System.Console.ReadLine()!; System.Console.Write("Author: "); string author = System.Console.ReadLine()!; System.Console.Write("Year: "); if (!int.TryParse(System.Console.ReadLine(), out int year)) { System.Console.WriteLine("Invalid year format."); return; } System.Console.Write("Owner ID: "); if (!int.TryParse(System.Console.ReadLine(), out int ownerId)) { System.Console.WriteLine("Invalid owner ID."); return; } Book book = new() { Title = title, Author = author, PublicationYear = year, OwnerId = ownerId, }; int id = repository.Create(book); System.Console.WriteLine($"Book created. ID: {id}"); } catch (PostgresException ex) { if (ex.SqlState == "23503") { System.Console.WriteLine("Owner with this ID does not exist."); } else { System.Console.WriteLine($"Database error: {ex.Message}"); } } catch (Exception ex) { System.Console.WriteLine($"Unexpected error: {ex.Message}"); } } /// /// Отображает список книг. /// /// /// Репозиторий книг. /// static void ShowBooks(IBookRepository repository) { try { var books = repository.GetAll(); foreach (var book in books) { System.Console.WriteLine( $"{book.Id} | " + $"{book.Title} | " + $"{book.Author} | " + $"{book.PublicationYear}" ); } } catch (Exception ex) { System.Console.WriteLine($"Error loading books: {ex.Message}"); } }