c68cca4f17
Introduce an OTP input box on login/register, surface user roles and a cafe chooser, add a dashboard switch button in the POS screen, and register OTP validators explicitly to survive Docker layer caching. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
37 lines
1.3 KiB
C#
37 lines
1.3 KiB
C#
namespace Meezi.API.Models.Auth;
|
|
|
|
public record SendOtpRequest(string Phone);
|
|
|
|
public record VerifyOtpRequest(string Phone, string Code, string? CafeId = null);
|
|
|
|
public record RefreshTokenRequest(string RefreshToken);
|
|
|
|
public record SwitchCafeRequest(string CafeId);
|
|
|
|
/// <summary>Step 1 of self-registration: send OTP to a new phone number.</summary>
|
|
public record RegisterRequest(string Phone, string CafeName);
|
|
|
|
/// <summary>Step 2 of self-registration: verify OTP and create the cafe account.</summary>
|
|
public record VerifyRegisterRequest(string Phone, string Code);
|
|
|
|
/// <summary>One café membership entry returned when user belongs to multiple cafés.</summary>
|
|
public record CafeMembershipDto(string CafeId, string CafeName, string Role, string PlanTier);
|
|
|
|
public record AuthTokenResponse(
|
|
string AccessToken,
|
|
string RefreshToken,
|
|
DateTime ExpiresAt,
|
|
string UserId,
|
|
string CafeId,
|
|
string Role,
|
|
string PlanTier,
|
|
string Language,
|
|
string Actor = Meezi.Core.Constants.MeeziActorKinds.Merchant,
|
|
string? BranchId = null,
|
|
List<CafeMembershipDto>? Memberships = null);
|
|
|
|
public record SendOtpResponse(bool Sent, int ExpiresInSeconds);
|
|
|
|
/// <summary>Returned when a phone number belongs to multiple cafés and no CafeId was specified.</summary>
|
|
public record CafeChoicesResponse(List<CafeMembershipDto> Cafes);
|