From a724b1979b46c6125be5418ddab44953892ec5a6 Mon Sep 17 00:00:00 2001 From: Glliza Date: Mon, 10 Mar 2025 20:56:35 +0400 Subject: [PATCH] =?UTF-8?q?=D0=92=20=D0=BF=D1=80=D0=BE=D1=86=D0=B5=D1=81?= =?UTF-8?q?=D1=81=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Implementations/BuyerStorageContract.cs | 157 ++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 PuferFishContracts/PuferFishDataBase/Implementations/BuyerStorageContract.cs diff --git a/PuferFishContracts/PuferFishDataBase/Implementations/BuyerStorageContract.cs b/PuferFishContracts/PuferFishDataBase/Implementations/BuyerStorageContract.cs new file mode 100644 index 0000000..4ada920 --- /dev/null +++ b/PuferFishContracts/PuferFishDataBase/Implementations/BuyerStorageContract.cs @@ -0,0 +1,157 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Npgsql; +using PuferFishContracts.DataModels; +using PuferFishContracts.Exceptions; +using PuferFishContracts.StoragesContracts; +using PuferFishDataBase.Models; + +namespace PuferFishDataBase.Implementations; + +internal class BuyerStorageContract : IBuyerStorageContract +{ + private readonly CatHasPawsDbContext _dbContext; + private readonly Mapper _mapper; + public BuyerStorageContract(CatHasPawsDbContext dbContext) + { + _dbContext = dbContext; + var config = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + cfg.CreateMap(); + }); + _mapper = new Mapper(config); + } + public List GetList() + { + try + { + return [.. _dbContext.Buyers.Select(x => +_mapper.Map(x))]; + } + catch (Exception ex) + { + _dbContext.ChangeTracker.Clear(); + throw new StorageException(ex); + } + } + public BuyerDataModel? GetElementById(string id) + { + try + { + return _mapper.Map(GetBuyerById(id)); + } + catch (Exception ex) + { + _dbContext.ChangeTracker.Clear(); + throw new StorageException(ex); + } + } + public BuyerDataModel? GetElementByFIO(string fio) + { + try + { + return +_mapper.Map(_dbContext.Buyers.FirstOrDefault(x => x.FIO == fio)); + } + catch (Exception ex) + { + _dbContext.ChangeTracker.Clear(); + throw new StorageException(ex); + } + } + public BuyerDataModel? GetElementByPhoneNumber(string phoneNumber) + { + try + { + return + _mapper.Map(_dbContext.Buyers.FirstOrDefault(x => x.PhoneNumber + == phoneNumber)); + } + catch (Exception ex) + { + _dbContext.ChangeTracker.Clear(); + throw new StorageException(ex); + } + } + public void AddElement(BuyerDataModel buyerDataModel) + { + try + { + _dbContext.Buyers.Add(_mapper.Map(buyerDataModel)); + _dbContext.SaveChanges(); + } + catch (InvalidOperationException ex) when (ex.TargetSite?.Name == + "ThrowIdentityConflict") + { + _dbContext.ChangeTracker.Clear(); + throw new ElementExistsException("Id", buyerDataModel.Id); + } + catch (DbUpdateException ex) when (ex.InnerException is + PostgresException { ConstraintName: "IX_Buyers_PhoneNumber" }) + { + _dbContext.ChangeTracker.Clear(); + throw new ElementExistsException("PhoneNumber", + buyerDataModel.PhoneNumber); + } + catch (Exception ex) + { + _dbContext.ChangeTracker.Clear(); + throw new StorageException(ex); + } + } + public void UpdElement(BuyerDataModel buyerDataModel) + { + try + { + var element = GetBuyerById(buyerDataModel.Id) ?? throw new + ElementNotFoundException(buyerDataModel.Id); + _dbContext.Buyers.Update(_mapper.Map(buyerDataModel, + element)); + _dbContext.SaveChanges(); + } + catch (ElementNotFoundException) + { + _dbContext.ChangeTracker.Clear(); + throw; + } + catch (DbUpdateException ex) when (ex.InnerException is + PostgresException { ConstraintName: "IX_Buyers_PhoneNumber" }) + { + _dbContext.ChangeTracker.Clear(); + throw new ElementExistsException("PhoneNumber", + buyerDataModel.PhoneNumber); + } + catch (Exception ex) + { + _dbContext.ChangeTracker.Clear(); + throw new StorageException(ex); + } + } + public void DelElement(string id) + { + try + { + var element = GetBuyerById(id) ?? throw new + ElementNotFoundException(id); + _dbContext.Buyers.Remove(element); + _dbContext.SaveChanges(); + } + catch (ElementNotFoundException) + { + _dbContext.ChangeTracker.Clear(); + throw; + } + catch (Exception ex) + { + _dbContext.ChangeTracker.Clear(); + throw new StorageException(ex); + } + } + private Buyer? GetBuyerById(string id) => + _dbContext.Buyers.FirstOrDefault(x => x.Id == id); +}