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