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