0.1.0 #2
@ -8,5 +8,6 @@ public interface IUserRepo
|
|||||||
public Task<UserDto?> Get(UserSearch search);
|
public Task<UserDto?> Get(UserSearch search);
|
||||||
public Task<UserDto> Create(UserDto user);
|
public Task<UserDto> Create(UserDto user);
|
||||||
public Task<UserDto?> Update(UserDto user);
|
public Task<UserDto?> Update(UserDto user);
|
||||||
|
public Task<bool> ChangeBalance(UserSearch search, decimal amount);
|
||||||
public Task<UserDto?> Delete(UserSearch search);
|
public Task<UserDto?> Delete(UserSearch search);
|
||||||
}
|
}
|
@ -15,6 +15,25 @@ public class UserRepo : IUserRepo
|
|||||||
_factory = factory;
|
_factory = factory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<bool> 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<UserDto> Create(UserDto user)
|
public async Task<UserDto> Create(UserDto user)
|
||||||
{
|
{
|
||||||
using var context = _factory.CreateDbContext();
|
using var context = _factory.CreateDbContext();
|
||||||
|
@ -10,16 +10,20 @@ namespace Services.Domain;
|
|||||||
public class ChangeRecordService : IChangeRecordService
|
public class ChangeRecordService : IChangeRecordService
|
||||||
{
|
{
|
||||||
private readonly IChangeRecordRepo _changeRecordRepo;
|
private readonly IChangeRecordRepo _changeRecordRepo;
|
||||||
|
private readonly IUserRepo _userRepo;
|
||||||
|
|
||||||
public ChangeRecordService(IChangeRecordRepo changeRecordRepo)
|
public ChangeRecordService(IChangeRecordRepo changeRecordRepo, IUserRepo userRepo)
|
||||||
{
|
{
|
||||||
_changeRecordRepo = changeRecordRepo;
|
_changeRecordRepo = changeRecordRepo;
|
||||||
|
_userRepo = userRepo;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ChangeRecordViewModel> Create(ChangeRecordDto model)
|
public async Task<ChangeRecordViewModel> Create(ChangeRecordDto model)
|
||||||
{
|
{
|
||||||
var record = await _changeRecordRepo.Create(model);
|
var record = await _changeRecordRepo.Create(model);
|
||||||
|
|
||||||
|
await _userRepo.ChangeBalance(new() { Id = model.UserId }, model.Sum);
|
||||||
|
|
||||||
return record.ToView();
|
return record.ToView();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -30,6 +34,8 @@ public class ChangeRecordService : IChangeRecordService
|
|||||||
{
|
{
|
||||||
throw new EntryPointNotFoundException("При удалении не получилось найти запись измнения баланса");
|
throw new EntryPointNotFoundException("При удалении не получилось найти запись измнения баланса");
|
||||||
}
|
}
|
||||||
|
// Возвращает баланс обратно
|
||||||
|
await _userRepo.ChangeBalance(new() { Id = record.UserId }, -record.Sum);
|
||||||
return record.ToView();
|
return record.ToView();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,6 +53,7 @@ public class ChangeRecordService : IChangeRecordService
|
|||||||
{
|
{
|
||||||
throw new EntryPointNotFoundException("При изменении не получилось найти запись измнения баланса");
|
throw new EntryPointNotFoundException("При изменении не получилось найти запись измнения баланса");
|
||||||
}
|
}
|
||||||
|
await _userRepo.ChangeBalance(new() { Id = model.UserId }, model.Sum - record.Sum);
|
||||||
return record.ToView();
|
return record.ToView();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user