GeneIT/geneit_app/src/api/FamilyApi.ts

88 lines
1.7 KiB
TypeScript
Raw Normal View History

2023-06-27 15:13:12 +00:00
import { APIClient } from "./ApiClient";
2023-07-07 16:41:00 +00:00
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;
}
2023-06-27 15:13:12 +00:00
2023-06-27 16:52:49 +00:00
export enum JoinFamilyResult {
TooManyRequests,
InvalidCode,
AlreadyMember,
Error,
Success,
}
2023-06-27 15:13:12 +00:00
export class FamilyApi {
/**
* Create a new family
*/
static async CreateFamily(name: string): Promise<void> {
await APIClient.exec({
method: "POST",
uri: "/family/create",
jsonData: { name: name },
});
}
2023-06-27 16:52:49 +00:00
/**
* Join an existing family
*/
static async JoinFamily(code: string): Promise<JoinFamilyResult> {
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;
}
}
2023-07-04 17:05:36 +00:00
/**
* Get the list of families
*/
2023-07-07 16:41:00 +00:00
static async GetList(): Promise<Family[]> {
return (
await APIClient.exec({
method: "GET",
uri: "/family/list",
})
).data;
}
2023-07-04 17:05:36 +00:00
2023-07-07 16:41:00 +00:00
/**
* 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<void> {
await APIClient.exec({
method: "POST",
uri: `/family/${id}/leave`,
});
}
}