using Dapper; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Npgsql; using ProjectFamilyBudget.Entities; using ProjectFamilyBudget.Entities.Enums; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ProjectFamilyBudget.Repositories.Implementations; public class PeopleRepository : IPeople { private readonly IConnectionString _connectionString; private readonly ILogger _logger; public PeopleRepository(IConnectionString connectionString, ILogger logger) { _connectionString = connectionString; _logger = logger; } public void CreatePeople(People people) { _logger.LogInformation("Добавление объекта"); _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(people)); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var queryInsert = @" INSERT INTO People (Name, LastName, Age, MemberType) VALUES (@Name, @LastName, @Age, @MemberType)"; connection.Execute(queryInsert, people); } catch (Exception ex) { _logger.LogError(ex, "Ошибка при добавлении объекта"); throw; } } public void UpdatePeople(People people) { _logger.LogInformation("Редактирование объекта"); _logger.LogDebug("Объект: {json}",JsonConvert.SerializeObject(people)); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var queryUpdate = @" UPDATE People SET Name=@Name, LastName=@LastName, Age=@Age, MemberType=@MemberType WHERE Id=@Id"; connection.Execute(queryUpdate, people); } catch (Exception ex) { _logger.LogError(ex, "Ошибка при редактировании объекта"); throw; } } public void DeletePeople(int id) { _logger.LogInformation("Удаление объекта"); _logger.LogDebug("Объект: {id}", id); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var queryDelete = @" DELETE FROM People WHERE Id=@id"; connection.Execute(queryDelete, new { id }); } catch (Exception ex) { _logger.LogError(ex, "Ошибка при удалении объекта"); throw; } } public People ReadPeopleById(int id) { _logger.LogInformation("Получение объекта по идентификатору"); _logger.LogDebug("Объект: {id}", id); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var querySelect = @" SELECT * FROM People WHERE Id=@id"; var people = connection.QueryFirst(querySelect, new { id }); _logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(people)); return people; } catch (Exception ex) { _logger.LogError(ex, "Ошибка при поиске объекта"); throw; } } public IEnumerable ReadPeople() { _logger.LogInformation("Получение всех объектов"); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var querySelect = "SELECT * FROM People"; var peoples = connection.Query(querySelect); _logger.LogDebug("Полученные объекты: {json}",JsonConvert.SerializeObject(peoples)); return peoples; } catch (Exception ex) { _logger.LogError(ex, "Ошибка при чтении объектов"); throw; } } }