Class ProjectInvitationService
- Namespace
- Builvero.Application.Services
- Assembly
- Builvero.Application.dll
Provides business logic for project invitation operations including sending, accepting, declining, and managing invitations.
public class ProjectInvitationService : IProjectInvitationService
- Inheritance
-
ProjectInvitationService
- Implements
- Inherited Members
Remarks
This service handles all project invitation-related operations:
- Inviting users to join projects (with access control)
- Accepting invitations (creates active membership)
- Declining invitations
- Retrieving invitations for users and projects
- Sending email notifications for invitation events
Constructors
ProjectInvitationService(IProjectInvitationRepository, IProjectRepository, IUserRepository, IProjectMembershipRepository, IUserNotificationRepository, ITokenGenerator, IProjectNotificationEmailSender, ILogger<ProjectInvitationService>)
Initializes a new instance of the ProjectInvitationService class.
public ProjectInvitationService(IProjectInvitationRepository invitationRepository, IProjectRepository projectRepository, IUserRepository userRepository, IProjectMembershipRepository membershipRepository, IUserNotificationRepository notificationRepository, ITokenGenerator tokenGenerator, IProjectNotificationEmailSender emailSender, ILogger<ProjectInvitationService> logger)
Parameters
invitationRepositoryIProjectInvitationRepositoryRepository for project invitation data access operations.
projectRepositoryIProjectRepositoryRepository for project data access operations.
userRepositoryIUserRepositoryRepository for user data access operations.
membershipRepositoryIProjectMembershipRepositoryRepository for project membership data access operations.
notificationRepositoryIUserNotificationRepositoryRepository for user notification data access operations.
tokenGeneratorITokenGeneratorService for generating secure tokens for invitation links.
emailSenderIProjectNotificationEmailSenderService for sending project invitation emails.
loggerILogger<ProjectInvitationService>Logger for recording service operations and errors.
Methods
CancelInvitationAsync(Guid, Guid, CancellationToken)
Cancels a pending invitation (inviter only).
public Task<ProjectInvitationDto> CancelInvitationAsync(Guid invitationId, Guid cancellerUserId, CancellationToken cancellationToken = default)
Parameters
invitationIdGuidThe unique identifier of the invitation to cancel.
cancellerUserIdGuidThe unique identifier of the user canceling the invitation (must be the inviter).
cancellationTokenCancellationTokenCancellation token to cancel the operation.
Returns
- Task<ProjectInvitationDto>
The canceled invitation DTO.
GetIncomingInvitationsAsync(Guid, CancellationToken)
Retrieves all incoming invitations for the specified user (invitations sent to them).
public Task<List<ProjectInvitationDto>> GetIncomingInvitationsAsync(Guid userId, CancellationToken cancellationToken = default)
Parameters
userIdGuidThe unique identifier of the user (invitee).
cancellationTokenCancellationTokenCancellation token to cancel the operation.
Returns
- Task<List<ProjectInvitationDto>>
A list of incoming invitation DTOs.
GetOutgoingInvitationsAsync(Guid, CancellationToken)
Retrieves all outgoing invitations created by the specified user (invitations they sent).
public Task<List<ProjectInvitationDto>> GetOutgoingInvitationsAsync(Guid userId, CancellationToken cancellationToken = default)
Parameters
userIdGuidThe unique identifier of the user (inviter).
cancellationTokenCancellationTokenCancellation token to cancel the operation.
Returns
- Task<List<ProjectInvitationDto>>
A list of outgoing invitation DTOs.
InviteUserAsync(Guid, Guid, Guid, string?, CancellationToken)
Sends a project invitation to a user.
public Task<ProjectInvitationDto> InviteUserAsync(Guid projectId, Guid fromUserId, Guid toUserId, string? message, CancellationToken cancellationToken = default)
Parameters
projectIdGuidThe unique identifier of the project to invite the user to.
fromUserIdGuidThe unique identifier of the user sending the invitation (must be project owner or active member).
toUserIdGuidThe unique identifier of the user being invited.
messagestringOptional message to include with the invitation.
cancellationTokenCancellationTokenCancellation token to cancel the operation.
Returns
- Task<ProjectInvitationDto>
A ProjectInvitationDto representing the created invitation.
Remarks
This method performs the following operations:
- Validates project existence and inviter permissions
- Checks if user is already a member or has a pending invitation
- Creates the invitation with a secure token and 30-day expiration
- Sends email notification to the invitee
- Creates in-app notification for the invitee
The invitation includes a secure token that allows acceptance/decline via email links without requiring login.
Exceptions
- Exception
Thrown when the project is not found, user is not found, user is already a member, or a pending invitation already exists.
- UnauthorizedAccessException
Thrown when the inviter is not a project owner or active member.
RespondToInvitationAsync(Guid, Guid, bool, string?, CancellationToken)
Responds to an invitation (accept or decline) by the invitee.
public Task<ProjectInvitationDto> RespondToInvitationAsync(Guid invitationId, Guid responderUserId, bool accept, string? reason, CancellationToken cancellationToken = default)
Parameters
invitationIdGuidThe unique identifier of the invitation to respond to.
responderUserIdGuidThe unique identifier of the user responding (must be the invitee).
acceptboolTrue to accept the invitation; false to decline.
reasonstringOptional reason for accepting or declining.
cancellationTokenCancellationTokenCancellation token to cancel the operation.
Returns
- Task<ProjectInvitationDto>
The updated invitation DTO.
RespondToInvitationByTokenAsync(string, bool, string?, CancellationToken)
Responds to an invitation via secure token (public endpoint, no authentication required).
public Task<ProjectInvitationDto> RespondToInvitationByTokenAsync(string token, bool accept, string? reason, CancellationToken cancellationToken = default)
Parameters
tokenstringThe secure token from the invitation email.
acceptboolTrue to accept the invitation; false to decline.
reasonstringOptional reason for accepting or declining.
cancellationTokenCancellationTokenCancellation token to cancel the operation.
Returns
- Task<ProjectInvitationDto>
The updated invitation DTO.