This commit is contained in:
2023-06-23 09:03:00 +03:00
parent d549877567
commit 4bac59f322
27 changed files with 376 additions and 126 deletions
+77 -31
View File
@@ -8,6 +8,8 @@
using Data.Repositories.Account;
using Data.Repositories.Currency;
using Data.Repositories.Item;
using Item;
using Item.Domain;
using Microsoft.Extensions.Logging;
using MyOffice.Services.Account.Domain;
@@ -20,7 +22,8 @@
private readonly IAccountAccountCategoryRepository _accountAccountCategoryRepository;
private readonly IMotionRepository _motionRepository;
private readonly IItemRepository _itemRepository;
private readonly IItemGlobalRepository _motionGlobalRepository;
private readonly IItemGlobalRepository _itemGlobalRepository;
private readonly ItemService _itemService;
public AccountService(
ILogger<AccountService> logger,
@@ -30,7 +33,8 @@
IAccountAccountCategoryRepository accountAccountCategoryRepository,
IMotionRepository motionRepository,
IItemRepository itemRepository,
IItemGlobalRepository motionGlobalRepository
IItemGlobalRepository itemGlobalRepository,
ItemService itemService
)
{
_logger = logger;
@@ -40,7 +44,8 @@
_accountAccountCategoryRepository = accountAccountCategoryRepository;
_motionRepository = motionRepository;
_itemRepository = itemRepository;
_motionGlobalRepository = motionGlobalRepository;
_itemGlobalRepository = itemGlobalRepository;
_itemService = itemService;
}
public List<AccountCategory> GetAllCategories(Guid userId)
@@ -282,7 +287,7 @@
public Exec<Motion, MotionAddResult> MotionAdd(
Guid userId,
Guid accountId,
MotionAdd motion
MotionAddUpdate motion
)
{
if (motion == null)
@@ -298,31 +303,10 @@
return result.Set(MotionAddResult.account_not_found);
}
var motionGlobal = _motionGlobalRepository.GetByName(motion.Motion);
if (motionGlobal == null)
var itemExec = _itemService.GetOrCreate(userId, motion.Motion);
if (itemExec.Status != ItemGetOrAddResult.success)
{
// add global motion
motionGlobal = new ItemGlobal
{
Id = Guid.NewGuid(),
Name = motion.Motion.Trim(),
};
if (!_motionGlobalRepository.Add(motionGlobal))
{
return result.Set(MotionAddResult.failure);
}
}
var item = _itemRepository.GetByGlobal(userId, motionGlobal.Id);
if (item == null)
{
// add item
item = new Item
{
CategoryId = userId,
ItemGlobalId = motionGlobal.Id,
};
_itemRepository.Add(item);
return result.Set(MotionAddResult.failure);
}
var motionDb = new Motion
@@ -331,7 +315,7 @@
CreatedOn = DateTime.UtcNow,
DateTime = motion.Date,
AccountId = account.Id,
ItemId = item.Id,
ItemId = itemExec.Result!.Id,
AmountPlus = motion.Plus,
AmountMinus = motion.Minus,
Description = motion.Description,
@@ -343,12 +327,52 @@
}
item.ItemGlobal = motionGlobal;
motionDb.Item = item;
motionDb.Item = itemExec.Result!;
return result.Set(motionDb);
}
public Exec<Motion, MotionUpdateResult> MotionUpdate(
Guid userId,
Guid accountId,
Guid motionId,
MotionAddUpdate motion
)
{
if (motion == null)
throw new ArgumentNullException(nameof(motion));
if (motion.Motion == null)
throw new ArgumentNullException(nameof(motion.Motion));
var result = new Exec<Motion, MotionUpdateResult>(MotionUpdateResult.success);
var exists = _motionRepository.Get(userId, motionId);
if (exists == null || exists.AccountId != accountId)
{
return result.Set(MotionUpdateResult.not_found);
}
var itemExec = _itemService.GetOrCreate(userId, motion.Motion);
if (itemExec.Status != ItemGetOrAddResult.success)
{
return result.Set(MotionUpdateResult.failure);
}
exists.Item.Id = itemExec.Result!.Id;
exists.DateTime = motion.Date;
exists.Description = motion.Description;
exists.AmountPlus = motion.Plus;
exists.AmountMinus = motion.Minus;
if (!_motionRepository.Update(exists))
{
return result.Set(MotionUpdateResult.failure);
}
return result.Set(exists);
}
public Exec<List<Motion>, GeneralExecStatus> GetMotions(
Guid userId,
Guid accountId,
@@ -368,5 +392,27 @@
return result.Set(motions);
}
public Exec<Motion, MotionDeleteResult> MotionRemove(
Guid userId,
Guid accountId,
Guid motionId
)
{
var result = new Exec<Motion, MotionDeleteResult>(MotionDeleteResult.success);
var exists = _motionRepository.Get(userId, motionId);
if (exists == null || exists.AccountId != accountId)
{
return result.Set(MotionDeleteResult.not_found);
}
if (!_motionRepository.Remove(exists))
{
return result.Set(MotionDeleteResult.failure);
}
return result.Set(exists);
}
}
}