import { APIClient } from "./ApiClient"; export interface Family { user_id: number; family_id: number; name: string; time_create: number; is_admin: boolean; invitation_code: string; count_members: number; count_admins: number; } export enum JoinFamilyResult { TooManyRequests, InvalidCode, AlreadyMember, Error, Success, } export class FamilyApi { /** * Create a new family */ static async CreateFamily(name: string): Promise { await APIClient.exec({ method: "POST", uri: "/family/create", jsonData: { name: name }, }); } /** * Join an existing family */ static async JoinFamily(code: string): Promise { const res = await APIClient.exec({ method: "POST", uri: "/family/join", allowFail: true, jsonData: { code: code }, }); if (res.status >= 200 && res.status < 300) return JoinFamilyResult.Success; switch (res.status) { case 429: return JoinFamilyResult.TooManyRequests; case 404: return JoinFamilyResult.InvalidCode; case 409: return JoinFamilyResult.AlreadyMember; default: return JoinFamilyResult.Error; } } /** * Get the list of families */ static async GetList(): Promise { return ( await APIClient.exec({ method: "GET", uri: "/family/list", }) ).data; } /** * Check if the current user user can leave a family */ static CanLeaveFamily(f: Family): boolean { return !f.is_admin || f.count_admins > 1; } /** * Attempt to leave a family */ static async LeaveFamily(id: number): Promise { await APIClient.exec({ method: "POST", uri: `/family/${id}/leave`, }); } }