From cbc45bbecbd97c17690f417227613c068343b487 Mon Sep 17 00:00:00 2001 From: mfnefd Date: Wed, 27 Nov 2024 00:19:35 +0400 Subject: [PATCH] =?UTF-8?q?fix:=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D1=8C=20=D0=B8=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B1=D0=B0=D0=BB=D0=B0=D0=BD?= =?UTF-8?q?=D1=81=D0=B0=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D1=8F=D0=B5=D1=82?= =?UTF-8?q?=20=D0=B1=D0=B0=D0=BB=D0=B0=D0=BD=D1=81=20=D0=9B=D0=9E=D0=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- back/Contracts/Repositories/IUserRepo.cs | 1 + back/Infrastructure/Repositories/UserRepo.cs | 19 +++++++++++++++++++ back/Services/Domain/ChangeRecordService.cs | 9 ++++++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/back/Contracts/Repositories/IUserRepo.cs b/back/Contracts/Repositories/IUserRepo.cs index ff32390..dab5cd0 100644 --- a/back/Contracts/Repositories/IUserRepo.cs +++ b/back/Contracts/Repositories/IUserRepo.cs @@ -8,5 +8,6 @@ public interface IUserRepo public Task Get(UserSearch search); public Task Create(UserDto user); public Task Update(UserDto user); + public Task ChangeBalance(UserSearch search, decimal amount); public Task Delete(UserSearch search); } \ No newline at end of file diff --git a/back/Infrastructure/Repositories/UserRepo.cs b/back/Infrastructure/Repositories/UserRepo.cs index a075d6d..e3a450d 100644 --- a/back/Infrastructure/Repositories/UserRepo.cs +++ b/back/Infrastructure/Repositories/UserRepo.cs @@ -15,6 +15,25 @@ public class UserRepo : IUserRepo _factory = factory; } + public async Task ChangeBalance(UserSearch search, decimal amount) + { + using var context = _factory.CreateDbContext(); + + var user = await context.Users + .FirstOrDefaultAsync(x => x.Id == search.Id + || x.Name == search.Name); + + if (user == null) + { + return false; + } + + user.Balance += amount; + context.Users.Update(user); + await context.SaveChangesAsync(); + return true; + } + public async Task Create(UserDto user) { using var context = _factory.CreateDbContext(); diff --git a/back/Services/Domain/ChangeRecordService.cs b/back/Services/Domain/ChangeRecordService.cs index b90bafa..4df6138 100644 --- a/back/Services/Domain/ChangeRecordService.cs +++ b/back/Services/Domain/ChangeRecordService.cs @@ -10,16 +10,20 @@ namespace Services.Domain; public class ChangeRecordService : IChangeRecordService { private readonly IChangeRecordRepo _changeRecordRepo; + private readonly IUserRepo _userRepo; - public ChangeRecordService(IChangeRecordRepo changeRecordRepo) + public ChangeRecordService(IChangeRecordRepo changeRecordRepo, IUserRepo userRepo) { _changeRecordRepo = changeRecordRepo; + _userRepo = userRepo; } public async Task Create(ChangeRecordDto model) { var record = await _changeRecordRepo.Create(model); + await _userRepo.ChangeBalance(new() { Id = model.UserId }, model.Sum); + return record.ToView(); } @@ -30,6 +34,8 @@ public class ChangeRecordService : IChangeRecordService { throw new EntryPointNotFoundException("При удалении не получилось найти запись измнения баланса"); } + // Возвращает баланс обратно + await _userRepo.ChangeBalance(new() { Id = record.UserId }, -record.Sum); return record.ToView(); } @@ -47,6 +53,7 @@ public class ChangeRecordService : IChangeRecordService { throw new EntryPointNotFoundException("При изменении не получилось найти запись измнения баланса"); } + await _userRepo.ChangeBalance(new() { Id = model.UserId }, model.Sum - record.Sum); return record.ToView(); } }