profileShare

rasmusjy / splitapp-backend-microservices

Read-only snapshot

No repository description.

main default branch 501 files Expires Sep 13, 2026, 9:06 AM
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