profileShare

rasmusjy / splitapp-backend-microservices

Read-only snapshot

No repository description.

main default branch 501 files Expires Sep 13, 2026, 9:06 AM
ExpenseBllDtoFactory.cs 2,547 bytes
1 using SplitApp.Modules.Expenses.Domain.Entities;
2 using SplitApp.Modules.Trips.Domain.Entities;
3 using SplitApp.WebApp.Application.DTO;
4
5 namespace SplitApp.WebApp.Application.Mappers;
6
7 public static class ExpenseBllDtoFactory
8 {
9 public static ExpenseBllDto Create(Expense entity, bool includeSplits = false) => new()
10 {
11 Id = entity.Id,
12 CreatedAt = entity.CreatedAt,
13 UpdatedAt = entity.UpdatedAt,
14 TripId = entity.TripId,
15 // entity.Trip is `object?` (Expenses module avoids direct ref to Trip type) — cast back here.
16 Trip = entity.Trip is Trip trip ? TripBllDtoFactory.Create(trip) : null,
17 PaidByUserId = entity.PaidByUserId,
18 PaidByUser = AppUserBllDtoFactory.Create(entity.PaidByUser),
19 BudgetCategoryId = entity.BudgetCategoryId,
20 CurrencyId = entity.CurrencyId,
21 Currency = entity.Currency != null ? CurrencyBllDtoFactory.Create(entity.Currency) : null,
22 Amount = entity.Amount,
23 Description = entity.Description,
24 ExpenseDate = entity.ExpenseDate,
25 SplitMethod = entity.SplitMethod,
26 Splits = includeSplits && entity.Splits != null
27 ? entity.Splits.Select(ExpenseSplitBllDtoFactory.Create).ToList()
28 : null
29 };
30
31 public static List<ExpenseBllDto> CreateList(IEnumerable<Expense> entities, bool includeSplits = false)
32 => entities.Select(e => Create(e, includeSplits)).ToList();
33
34 public static Expense ToEntity(ExpenseBllDto dto) => new()
35 {
36 Id = dto.Id,
37 TripId = dto.TripId,
38 PaidByUserId = dto.PaidByUserId,
39 BudgetCategoryId = dto.BudgetCategoryId,
40 CurrencyId = dto.CurrencyId,
41 Amount = dto.Amount,
42 Description = dto.Description,
43 ExpenseDate = dto.ExpenseDate,
44 SplitMethod = dto.SplitMethod
45 };
46 }
47
48 public static class ExpenseSplitBllDtoFactory
49 {
50 public static ExpenseSplitBllDto Create(ExpenseSplit entity) => new()
51 {
52 Id = entity.Id,
53 CreatedAt = entity.CreatedAt,
54 UpdatedAt = entity.UpdatedAt,
55 ExpenseId = entity.ExpenseId,
56 UserId = entity.UserId,
57 UserFullName = entity.User?.DisplayName,
58 UserEmail = entity.User?.Email,
59 Amount = entity.Amount,
60 Percentage = entity.Percentage
61 };
62
63 public static ExpenseSplit ToEntity(ExpenseSplitBllDto dto) => new()
64 {
65 Id = dto.Id,
66 ExpenseId = dto.ExpenseId,
67 UserId = dto.UserId,
68 Amount = dto.Amount,
69 Percentage = dto.Percentage
70 };
71 }
72