using Microsoft.Extensions.Logging; using LDBproject.Entities; using Newtonsoft.Json; using Npgsql; using Dapper; namespace LDBproject.Repositories.Implementations; public class CustomerCardR : ICustomerCardsRep { private readonly IConnectionString _connectionString; private readonly ILogger _logger; public CustomerCardR(IConnectionString connectionString, ILogger logger) { _connectionString = connectionString ?? throw new ArgumentNullException(nameof(connectionString)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); } public CustomerCard GetCardByID(int id) { _logger.LogInformation("< Getting CARD by id >"); _logger.LogDebug("Object ID: {id}", id); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var querySelect = @"SELECT * FROM CustomerCards WHERE CardID = @CardID"; // Assumes you have a CardID column return connection.QueryFirstOrDefault(querySelect, new { CardID = id }); } catch (Exception ex) { _logger.LogError(ex, "< Error while reading CARD by ID >"); throw; } } public void AddCard(CustomerCard card) { _logger.LogInformation("< New (reader)CARD Added >"); _logger.LogDebug("Object: {json}", JsonConvert.SerializeObject(card)); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); connection.Open(); var queryInsert = @"INSERT INTO CustomerCards (FIO, AgeBirthday) VALUES (@FIO, @AgeBirthday)"; connection.Execute(queryInsert, card); } catch (Exception ex) { _logger.LogError(ex, "< Error while adding CARD >"); throw; } } public void UpdateCard(CustomerCard card) { _logger.LogInformation("< CARD Info Updated >"); _logger.LogDebug("Object: {json}", JsonConvert.SerializeObject(card)); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); connection.Open(); var queryUpdate = @"UPDATE CustomerCards SET FIO = @FIO, AgeBirthday = @AgeBirthday WHERE CardID = @CardID"; // Assumes you have a CardID column connection.Execute(queryUpdate, card); } catch (Exception ex) { _logger.LogError(ex, "< Error while updating CARD >"); throw; } } public void DeleteCard(int id) { _logger.LogInformation("< Removing CARD >"); _logger.LogDebug("Object ID: {id}", id); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var queryDelete = @"DELETE FROM CustomerCards WHERE CardID = @CardID"; // Assumes you have a CardID column connection.Execute(queryDelete, new { CardID = id }); } catch (Exception ex) { _logger.LogError(ex, "< Error while deleting CARD >"); throw; } } public IEnumerable GetCards() { _logger.LogInformation("< Getting all CARDS >"); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); connection.Open(); var querySelectAll = "SELECT * FROM CustomerCards"; var cards = connection.Query(querySelectAll); _logger.LogDebug("Aimed objects: {json}", JsonConvert.SerializeObject(cards)); return cards; } catch (Exception ex) { _logger.LogError(ex, "< Error while getting CARDS >"); throw; } } }