profileShare

rasmusjy / splitapp-backend-modular-monolith

Read-only snapshot

No repository description.

main default branch 418 files Expires Sep 13, 2026, 9:06 AM
CurrencyAdminService.cs 2,708 bytes
1 using SplitApp.WebApp.Application.DTO;
2 using SplitApp.WebApp.Application.Mappers;
3 using SplitApp.Modules.Trips.Domain.Entities;
4 using SplitApp.Modules.Trips.Domain.Enums;
5 using SplitApp.Modules.Expenses.Domain.Entities;
6 using SplitApp.Modules.Expenses.Domain.Enums;
7 using SplitApp.Modules.Users.Domain.Entities;
8 using SplitApp.WebApp.Application.Contracts;
9 using SplitApp.Shared.Kernel.Domain;
10 using SplitApp.Shared.Kernel.Localization;
11
12 namespace SplitApp.WebApp.Application.Services.Admin;
13
14 public class CurrencyAdminService : ICurrencyAdminService
15 {
16 private readonly IAppUnitOfWork _uow;
17
18 public CurrencyAdminService(IAppUnitOfWork uow)
19 {
20 _uow = uow;
21 }
22
23 public async Task<List<CurrencyBllDto>> GetAllAsync(string? search)
24 {
25 var items = (await _uow.GetRepository<Currency>().GetAllAsync()).OrderBy(c => c.Code).ToList();
26 if (!string.IsNullOrEmpty(search))
27 items = items.Where(c =>
28 c.Code.Contains(search, StringComparison.OrdinalIgnoreCase) ||
29 c.Name.ToString().Contains(search, StringComparison.OrdinalIgnoreCase)).ToList();
30 return CurrencyBllDtoFactory.CreateList(items);
31 }
32
33 public async Task<CurrencyBllDto?> GetByIdAsync(Guid id)
34 {
35 var entity = await _uow.GetRepository<Currency>().GetByIdAsync(id);
36 return entity == null ? null : CurrencyBllDtoFactory.Create(entity);
37 }
38
39 public async Task CreateAsync(CurrencyBllDto entity, string? nameEn, string? nameEt)
40 {
41 var domainEntity = CurrencyBllDtoFactory.ToEntity(entity);
42 ApplyLangStr(domainEntity, nameEn, nameEt);
43 domainEntity.Id = Guid.NewGuid();
44 _uow.GetRepository<Currency>().Add(domainEntity);
45 await _uow.SaveChangesAsync();
46 }
47
48 public async Task UpdateAsync(CurrencyBllDto entity, string? nameEn, string? nameEt)
49 {
50 var existing = await _uow.GetRepository<Currency>().GetByIdAsync(entity.Id);
51 if (existing == null) return;
52 existing.Code = entity.Code;
53 existing.Symbol = entity.Symbol;
54 ApplyLangStr(existing, nameEn, nameEt);
55 _uow.GetRepository<Currency>().Update(existing);
56 await _uow.SaveChangesAsync();
57 }
58
59 public async Task DeleteAsync(Guid id)
60 {
61 await _uow.GetRepository<Currency>().RemoveAsync(id);
62 await _uow.SaveChangesAsync();
63 }
64
65 public Task<bool> ExistsAsync(Guid id) => _uow.GetRepository<Currency>().ExistsAsync(id);
66
67 private static void ApplyLangStr(Currency entity, string? nameEn, string? nameEt)
68 {
69 var name = new LangStr(nameEn ?? "", "en");
70 name.SetTranslation(nameEt ?? nameEn ?? "", "et");
71 entity.Name = name;
72 }
73 }
74