profileShare

rasmusjy / splitapp-backend-modular-monolith

Read-only snapshot

No repository description.

main default branch 418 files Expires Sep 13, 2026, 9:06 AM
IInvitationService.cs 1,354 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 IInvitationService
11 {
12 Task<TripInvitationBllDto> CreateInvitationAsync(Guid tripId, Guid userId);
13 Task<bool> AcceptInvitationAsync(string token, Guid userId);
14
15 // Guarded variant: also checks organizer
16 Task<(TripInvitationBllDto? invitation, string? errorCode)> CreateInvitationGuardedAsync(Guid tripId, Guid userId);
17
18 // Lookups
19 Task<TripInvitationBllDto?> GetByIdAsync(Guid id);
20 Task<TripInvitationBllDto?> GetByTokenAsync(string token);
21 Task<List<TripInvitationBllDto>> GetPendingByTripIdAsync(Guid tripId, Guid userId);
22
23 // Accept: full guarded flow (API)
24 Task<(bool success, string? errorCode)> AcceptInvitationGuardedAsync(string token, Guid userId);
25
26 // Revoke & Decline
27 Task<(bool success, string? errorCode)> RevokeInvitationAsync(Guid invitationId, Guid tripId, Guid userId);
28 Task<(bool success, string? errorCode)> RevokeInvitationByTokenAsync(string token, Guid userId);
29 Task<(bool success, string? errorCode)> DeclineInvitationAsync(string token);
30 }
31