shoc-backend/SeaHaven.Services/DTOs/TeamMemberInviteDTOs.cs

71 lines
1.8 KiB
C#

namespace SeaHaven.Services.DTOs;
/// <summary>A freshly issued invite. The raw token is never persisted and never printed.</summary>
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; }
}