namespace SeaHaven.Services.DTOs; /// A freshly issued invite. The raw token is never persisted and never printed. public sealed class IssuedTeamMemberInvite { public IssuedTeamMemberInvite(string token, DateTime expiresAt) { Token = token; ExpiresAt = expiresAt; } public string Token { get; } public DateTime ExpiresAt { get; } public override string ToString() => $"IssuedTeamMemberInvite {{ ExpiresAt = {ExpiresAt:O} }}"; } public sealed class TeamMemberInviteResendOutcomeDTO { public bool Success { get; init; } public string? Error { get; init; } } public enum TeamMemberRegistrationStatus { Ok, InvalidInvite, CodeIncorrect, CodeExpired, CodeLocked, ResendTooSoon, ResendLimitReached, CodeDeliveryFailed, EmailNotConfirmed, PasswordRejected, InvalidPhone } public sealed class TeamMemberInviteDetailsDTO { public required string Name { get; init; } public required string Role { get; init; } public string? Email { get; init; } public string? Phone { get; init; } } public sealed class TeamMemberRegistrationOutcomeDTO { public TeamMemberRegistrationStatus Status { get; init; } public TeamMemberInviteDetailsDTO? Details { get; init; } public LoginResultDTO? Session { get; init; } public int? RetryAfterSeconds { get; init; } } public sealed class TeamMemberInviteTokenRequestDTO { public string? Token { get; init; } } public sealed class VerifyTeamMemberInviteCodeRequestDTO { public string? Token { get; init; } public string? Code { get; init; } } public sealed class CompleteTeamMemberRegistrationRequestDTO { public string? Token { get; init; } public string? Password { get; init; } public string? Phone { get; init; } }