aboutsummaryrefslogtreecommitdiffstats
path: root/code/app/src/lib/api/account/index.ts
blob: 305bd9f85e4817b416269692dd97bf33ec1b6657 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import { api_base } from "$lib/configuration";
import { http_delete_async, http_get_async, http_post_async, type InternalFetchResponse } from "../_fetch";
import type { LoginPayload } from "$lib/api/account/models/LoginPayload";
import type { Result } from "rustic";
import { isOk, Ok, Err } from "rustic";
import type { SessionData } from "$lib/models/base/SessionData";
import type { CreateAccountPayload } from "./models/CreateAccountPayload";
import type { UpdateProfilePayload } from "./models/UpdateProfilePayload";
import type { ErrorResult } from "$lib/models/internal/ErrorResult";

export const http_account = {
    async login_async(payload: LoginPayload): Promise<InternalFetchResponse<Result<void, ErrorResult>>> {
        const response = await http_post_async<Result<void, ErrorResult>>(api_base("_/account/login"), payload);
        if (isOk(response)) {
            return Ok();
        }
        return Err(response.data);
    },
    logout_async(): Promise<InternalFetchResponse<void>> {
        return http_get_async<void>(api_base("_/account/logout"));
    },
    delete_account_async(): Promise<InternalFetchResponse> {
        return http_delete_async(api_base("_/account/delete"));
    },
    update_profile_async(payload: UpdateProfilePayload): Promise<InternalFetchResponse> {
        if (!payload.password && !payload.username) throw new Error("Password and Username is empty");
        return http_post_async(api_base("_/account/update"), payload);
    },
    create_account_async(payload: CreateAccountPayload): Promise<InternalFetchResponse> {
        if (!payload.password && !payload.username) throw new Error("Password and Username is empty");
        return http_post_async(api_base("_/account/create"), payload);
    },
    async get_profile_async(suppress_401: boolean): Promise<Result<SessionData, string>> {
        const response = await http_get_async<SessionData>(api_base("_/account"), 0, true);
        if (isOk(response)) {
            return Ok(response.data.data);
        }
    }
}