profileShare

rasmusjy / splitapp-backend-modular-monolith

Read-only snapshot

No repository description.

main default branch 418 files Expires Sep 13, 2026, 9:06 AM
IExpenseService.cs 2,054 bytes
1 using SplitApp.WebApp.Application.DTO;
2 using SplitApp.Modules.Trips.Domain.Entities;
3 using SplitApp.Modules.Trips.Domain.Enums;
4 using SplitApp.Modules.Expenses.Domain.Entities;
5 using SplitApp.Modules.Expenses.Domain.Enums;
6 using SplitApp.Modules.Users.Domain.Entities;
7
8 namespace SplitApp.WebApp.Application.Services;
9
10 public interface IExpenseService
11 {
12 Task<ExpenseBllDto> CreateExpenseWithSplitsAsync(ExpenseBllDto expense, Guid[] participants, decimal[] amounts, decimal[] percentages);
13 Task DeleteExpenseWithSplitsAsync(Guid expenseId);
14
15 // Queries (IDOR-aware)
16 Task<List<ExpenseBllDto>> GetByTripIdAsync(Guid tripId, Guid userId); // participant-only
17 Task<ExpenseBllDto?> GetByIdAsync(Guid expenseId, Guid userId); // participant-only
18 Task<ExpenseBllDto?> GetByIdWithDetailsAsync(Guid expenseId, Guid userId); // participant-only
19 Task<ExpenseBllDto?> GetRawByIdAsync(Guid expenseId); // no IDOR, raw entity
20
21 // Edit authorization
22 Task<bool> CanEditExpenseAsync(ExpenseBllDto expense, Guid userId);
23
24 // API-level full update (re-populates splits from explicit DTO data)
25 Task<(bool success, string? errorCode)> UpdateExpenseWithSplitsFromDtoAsync(
26 Guid id,
27 decimal amount,
28 string? description,
29 DateTime expenseDate,
30 ESplitMethod splitMethod,
31 Guid? budgetCategoryId,
32 Guid? currencyId,
33 List<(Guid UserId, decimal Amount, decimal? Percentage)> splits,
34 Guid userId);
35
36 // MVC-level partial update (re-splits for EqualAll only)
37 Task<(bool success, string? errorCode)> UpdateExpenseAsync(Guid id, ExpenseBllDto incoming, Guid userId);
38
39 // Split presets (used by MVC Expenses controller dropdowns)
40 Task<List<SplitPresetBllDto>> GetSplitPresetsByTripAsync(Guid tripId, Guid userId);
41 Task<bool> SavePresetAsync(Guid tripId, string presetName, ESplitMethod splitMethod,
42 Guid[] selectedParticipants, decimal[] splitPercentages, Guid userId);
43 Task<bool> DeletePresetAsync(Guid presetId, Guid tripId, Guid userId);
44 }
45