using ROLAC.API.DTOs.Permissions;
namespace ROLAC.API.DTOs.Auth;
public class LoginResponse
{
/// Short-lived JWT (15 min). Store in memory — never in localStorage.
public string AccessToken { get; set; } = null!;
/// Seconds until the access token expires. Always 900 (15 × 60).
public int ExpiresIn { get; set; }
public UserInfo User { get; set; } = null!;
}
public class UserInfo
{
public string Id { get; set; } = null!;
public string Email { get; set; } = null!;
public IList Roles { get; set; } = [];
public string LanguagePreference { get; set; } = "en";
///
/// Effective permissions (union across the user's roles), keyed by module name.
/// Lets the SPA hide nav/buttons. Authoritative enforcement is server-side.
///
public Dictionary Permissions { get; set; } = [];
///
/// The church member linked to this login account, or null for admin-only
/// accounts (no MemberId) and accounts whose member record was deleted.
/// Lets the SPA greet the user by their real name.
///
public MemberInfo? MemberInfo { get; set; }
}
/// Minimal member identity for greeting the signed-in user.
public class MemberInfo
{
public int Id { get; set; }
public string? NickName { get; set; }
public string FirstName_en { get; set; } = "";
public string LastName_en { get; set; } = "";
public string? FirstName_zh { get; set; }
public string? LastName_zh { get; set; }
}