aboutsummaryrefslogtreecommitdiffstats
path: root/code/app/src/lib/api/account
diff options
context:
space:
mode:
Diffstat (limited to 'code/app/src/lib/api/account')
-rw-r--r--code/app/src/lib/api/account/index.ts39
-rw-r--r--code/app/src/lib/api/account/models/CreateAccountPayload.ts4
-rw-r--r--code/app/src/lib/api/account/models/LoginPayload.ts5
-rw-r--r--code/app/src/lib/api/account/models/UpdateProfilePayload.ts4
4 files changed, 52 insertions, 0 deletions
diff --git a/code/app/src/lib/api/account/index.ts b/code/app/src/lib/api/account/index.ts
new file mode 100644
index 0000000..305bd9f
--- /dev/null
+++ b/code/app/src/lib/api/account/index.ts
@@ -0,0 +1,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);
+ }
+ }
+} \ No newline at end of file
diff --git a/code/app/src/lib/api/account/models/CreateAccountPayload.ts b/code/app/src/lib/api/account/models/CreateAccountPayload.ts
new file mode 100644
index 0000000..d116308
--- /dev/null
+++ b/code/app/src/lib/api/account/models/CreateAccountPayload.ts
@@ -0,0 +1,4 @@
+export interface CreateAccountPayload {
+ username: string,
+ password: string
+}
diff --git a/code/app/src/lib/api/account/models/LoginPayload.ts b/code/app/src/lib/api/account/models/LoginPayload.ts
new file mode 100644
index 0000000..beb96cf
--- /dev/null
+++ b/code/app/src/lib/api/account/models/LoginPayload.ts
@@ -0,0 +1,5 @@
+export interface LoginPayload {
+ username: string,
+ password: string,
+ persist: boolean
+}
diff --git a/code/app/src/lib/api/account/models/UpdateProfilePayload.ts b/code/app/src/lib/api/account/models/UpdateProfilePayload.ts
new file mode 100644
index 0000000..d2983ff
--- /dev/null
+++ b/code/app/src/lib/api/account/models/UpdateProfilePayload.ts
@@ -0,0 +1,4 @@
+export interface UpdateProfilePayload {
+ username?: string,
+ password?: string,
+}