127 lines
4.8 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|