2024-12-12 17:12:18 +04:00

127 lines
4.8 KiB
C#

using Dapper;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Npgsql;
using ProjectPolyclinic.Entities;
using Serilog.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectPolyclinic.Repositories.Implementations
{
public class VisitingRepository:IVisitingRepository
{
private readonly IConnectionString _connectionString;
private readonly ILogger<VisitingRepository> _logger;
public VisitingRepository(IConnectionString connectionString,ILogger<VisitingRepository> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateVisiting(Visiting visiting)
{
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}",
JsonConvert.SerializeObject(visiting));
try
{
using var connection = new
NpgsqlConnection(_connectionString.ConnectionString);
connection.Open();
using var transaction = connection.BeginTransaction();
var queryInsert = @"
INSERT INTO Visitings (DoctorId, PatientId,DiagnosisName,VisitingTime)
VALUES (@DoctorId, @PatientId, @DiagnosisName,@VisitingTime );
SELECT MAX(Id) FROM Visitings";
var visitingId = connection.QueryFirst<int>(queryInsert, visiting, transaction);
var querySubInsert = @"
INSERT INTO Medicines_Visiting (MedicinesId, VisitingId, Count)
VALUES (@MedicinesId,@VisitingId, @Count)";
foreach (var elem in visiting.Medicines)
{
connection.Execute(querySubInsert, new
{
visitingId,
elem.MedicinesId,
elem.Count
}, transaction);
}
transaction.Commit();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
}
public void DeleteVisiting(int id)
{
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new
NpgsqlConnection(_connectionString.ConnectionString);
var queryDelete = @"
DELETE FROM Visitings
WHERE Id=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
}
public IEnumerable<Visiting> ReadVisiting(DateTime? dateForm = null, DateTime? dateTo = null, int? patientId = null, int? doctorId = null,int ? visitingId = null)
{
/*_logger.LogInformation("Получение всех объектов");
try
{
using var connection = new
NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"SELECT * FROM Visitings";
var visitings =
connection.Query<Visiting>(querySelect);
_logger.LogDebug("Полученные объекты: {json}",
JsonConvert.SerializeObject(visitings));
return visitings;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}*/
_logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"SELECT v.*, mv.MedicinesId, mv.Count
FROM Visitings v
LEFT JOIN Medicines_Visiting mv ON v.Id = mv.VisitingId";
var visitings = connection.Query<TempMedicines_Visiting>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(visitings));
return visitings.GroupBy(x => x.Id, y => y,
(key, value) => Visiting.CreateOperation(value.First(),
value.Select(z => Medicines_Visiting.CreateElement(z.MedicinesId, z.VisitingId, z.Count)))).ToList();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
}
}
}