ProjectLib/ProjectLibrary/Repositores/Implementations/TicketExtensionsRepository.cs

129 lines
5.9 KiB
C#
Raw Normal View History

2024-12-08 13:24:07 +04:00
using ProjectLibrary.Entities;
using ProjectLibrary.Repositories;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Npgsql;
using Dapper;
using System;
using System.Collections.Generic;
using System.Linq;
using ProjectLibrary.Entites;
2024-11-20 19:31:06 +04:00
using ProjectLibrary.Repositores;
2024-11-12 23:13:20 +04:00
2024-12-08 13:24:07 +04:00
namespace ProjectLibrary.Repositories.Implementations
2024-11-12 23:13:20 +04:00
{
2024-12-08 13:24:07 +04:00
public class TicketExtensionsRepository : ITicketExtensionsRepository
2024-11-20 19:31:06 +04:00
{
2024-12-08 13:24:07 +04:00
private readonly IConnectionString _connectionString;
private readonly ILogger<TicketExtensionsRepository> _logger;
2024-11-12 23:13:20 +04:00
2024-12-08 13:24:07 +04:00
public TicketExtensionsRepository(IConnectionString connectionString, ILogger<TicketExtensionsRepository> logger)
{
_connectionString = connectionString;
_logger = logger;
}
2024-11-12 23:13:20 +04:00
2024-12-08 13:24:07 +04:00
// Создание новой записи о продлении билета
public void CreateTicketExtension(TicketExtensions ticketExtension)
{
_logger.LogInformation("Добавление нового продления билета для читателя с ID={ReaderID}", ticketExtension.ReaderID);
_logger.LogDebug("Данные продления: {json}", JsonConvert.SerializeObject(ticketExtension));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
2024-11-12 23:13:20 +04:00
2024-12-08 13:24:07 +04:00
var queryInsert = @"
INSERT INTO Ticket_Extensions (ReaderID, LastUpdateDate, NextUpdateDate)
VALUES (@ReaderID, @LastUpdateDate, @NextUpdateDate)";
connection.Execute(queryInsert, ticketExtension);
_logger.LogInformation("Продление билета успешно добавлено для читателя с ID={ReaderID}", ticketExtension.ReaderID);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении продления билета");
throw;
}
}
// Обновление информации о продлении билета
public void UpdateTicketExtension(TicketExtensions ticketExtension)
{
_logger.LogInformation("Редактирование продления билета для читателя с ID={ReaderID}", ticketExtension.ReaderID);
_logger.LogDebug("Данные продления: {json}", JsonConvert.SerializeObject(ticketExtension));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"
UPDATE Ticket_Extensions
SET LastUpdateDate = @LastUpdateDate, NextUpdateDate = @NextUpdateDate
WHERE ReaderID = @ReaderID";
var affectedRows = connection.Execute(queryUpdate, ticketExtension);
if (affectedRows > 0)
{
_logger.LogInformation("Продление билета успешно обновлено для читателя с ID={ReaderID}", ticketExtension.ReaderID);
}
else
{
_logger.LogWarning("Продление билета для читателя с ID={ReaderID} не найдено для обновления", ticketExtension.ReaderID);
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании продления билета");
throw;
}
}
// Получение продления билета по ID читателя
public TicketExtensions ReadTicketExtensionById(int readerId)
{
_logger.LogInformation("Получение продления билета для читателя с ID={readerId}", readerId);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Ticket_Extensions WHERE ReaderID = @readerId";
var ticketExtension = connection.QueryFirstOrDefault<TicketExtensions>(querySelect, new { readerId });
if (ticketExtension != null)
{
_logger.LogDebug("Найдено продление билета: {json}", JsonConvert.SerializeObject(ticketExtension));
}
else
{
_logger.LogWarning("Продление билета для читателя с ID={readerId} не найдено", readerId);
}
return ticketExtension;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при получении продления билета с ID={readerId}", readerId);
throw;
}
}
// Получение всех продлений билетов
public List<TicketExtensions> ReadTicketExtensions()
{
_logger.LogInformation("Получение всех продлений билетов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Ticket_Extensions";
var ticketExtensions = connection.Query<TicketExtensions>(querySelect).ToList();
_logger.LogDebug("Полученные продления билетов: {json}", JsonConvert.SerializeObject(ticketExtensions));
return ticketExtensions;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при получении списка продлений билетов");
throw;
}
}
2024-11-12 23:13:20 +04:00
}
}