profileShare

rasmusjy / splitapp-backend-clean-onion

Read-only snapshot

No repository description.

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