profileShare

rasmusjy / splitapp-backend-clean-onion

Read-only snapshot

No repository description.

main default branch 429 files Expires Sep 13, 2026, 9:06 AM
ExpenseBllDtoFactory.cs 2,772 bytes
1 using App.BLL.DTO;
2 using App.Domain;
3
4 namespace App.BLL.Mappers;
5
6 public static class ExpenseBllDtoFactory
7 {
8 public static ExpenseBllDto Create(Expense entity, bool includeSplits = false) => new()
9 {
10 Id = entity.Id,
11 CreatedAt = entity.CreatedAt,
12 UpdatedAt = entity.UpdatedAt,
13 TripId = entity.TripId,
14 Trip = entity.Trip != null ? TripBllDtoFactory.Create(entity.Trip) : null,
15 PaidByUserId = entity.PaidByUserId,
16 PaidByUser = entity.PaidByUser != null ? new AppUserBllDto
17 {
18 Id = entity.PaidByUser.Id,
19 FirstName = entity.PaidByUser.FirstName,
20 LastName = entity.PaidByUser.LastName,
21 Email = entity.PaidByUser.Email
22 } : null,
23 BudgetCategoryId = entity.BudgetCategoryId,
24 BudgetCategory = entity.BudgetCategory != null
25 ? BudgetCategoryBllDtoFactory.Create(entity.BudgetCategory)
26 : null,
27 CurrencyId = entity.CurrencyId,
28 Currency = entity.Currency != null ? CurrencyBllDtoFactory.Create(entity.Currency) : null,
29 Amount = entity.Amount,
30 Description = entity.Description,
31 ExpenseDate = entity.ExpenseDate,
32 SplitMethod = entity.SplitMethod,
33 Splits = includeSplits && entity.Splits != null
34 ? entity.Splits.Select(ExpenseSplitBllDtoFactory.Create).ToList()
35 : null
36 };
37
38 public static List<ExpenseBllDto> CreateList(IEnumerable<Expense> entities, bool includeSplits = false)
39 => entities.Select(e => Create(e, includeSplits)).ToList();
40
41 public static Expense ToEntity(ExpenseBllDto dto) => new()
42 {
43 Id = dto.Id,
44 TripId = dto.TripId,
45 PaidByUserId = dto.PaidByUserId,
46 BudgetCategoryId = dto.BudgetCategoryId,
47 CurrencyId = dto.CurrencyId,
48 Amount = dto.Amount,
49 Description = dto.Description,
50 ExpenseDate = dto.ExpenseDate,
51 SplitMethod = dto.SplitMethod
52 };
53 }
54
55 public static class ExpenseSplitBllDtoFactory
56 {
57 public static ExpenseSplitBllDto Create(ExpenseSplit entity) => new()
58 {
59 Id = entity.Id,
60 CreatedAt = entity.CreatedAt,
61 UpdatedAt = entity.UpdatedAt,
62 ExpenseId = entity.ExpenseId,
63 UserId = entity.UserId,
64 UserFullName = entity.User != null
65 ? $"{entity.User.FirstName} {entity.User.LastName}".Trim()
66 : null,
67 UserEmail = entity.User?.Email,
68 Amount = entity.Amount,
69 Percentage = entity.Percentage
70 };
71
72 public static ExpenseSplit ToEntity(ExpenseSplitBllDto dto) => new()
73 {
74 Id = dto.Id,
75 ExpenseId = dto.ExpenseId,
76 UserId = dto.UserId,
77 Amount = dto.Amount,
78 Percentage = dto.Percentage
79 };
80 }
81