aboutsummaryrefslogtreecommitdiffstats
path: root/code/app/src/lib/services/account-service.ts
diff options
context:
space:
mode:
authorivarlovlie <git@ivarlovlie.no>2022-11-25 08:30:33 +0100
committerivarlovlie <git@ivarlovlie.no>2022-11-25 08:30:33 +0100
commitca9c1cdf1ec2988f14ac4ca788edac31153f735f (patch)
tree09a8663520b5c97497bbe7f91176720019c64d3b /code/app/src/lib/services/account-service.ts
parentb60a027a4ab9203388470ac51114638983a183da (diff)
downloadgreatoffice-ca9c1cdf1ec2988f14ac4ca788edac31153f735f.tar.xz
greatoffice-ca9c1cdf1ec2988f14ac4ca788edac31153f735f.zip
feat: WIP! Rework http calls into services
Diffstat (limited to 'code/app/src/lib/services/account-service.ts')
-rw-r--r--code/app/src/lib/services/account-service.ts54
1 files changed, 54 insertions, 0 deletions
diff --git a/code/app/src/lib/services/account-service.ts b/code/app/src/lib/services/account-service.ts
new file mode 100644
index 0000000..90af163
--- /dev/null
+++ b/code/app/src/lib/services/account-service.ts
@@ -0,0 +1,54 @@
+import { http_delete_async, http_get_async, http_post_async } from "$lib/api/_fetch";
+import { api_base, CookieNames } from "$lib/configuration";
+import { is_known_problem } from "$lib/models/internal/KnownProblem";
+import type { CreateAccountPayload, CreateAccountResponse, DeleteAccountResponse, IAccountService, LoginPayload, LoginResponse, Session, UpdateAccountPayload, UpdateAccountResponse } from "./abstractions/IAccountService";
+
+export class AccountService implements IAccountService {
+ session: Session;
+ async login_async(payload: LoginPayload): Promise<LoginResponse> {
+ const response = await http_post_async(api_base("_/account/login"), payload);
+ return { isLoggedIn: response.ok };
+ }
+ async logout_async(): Promise<void> {
+ const response = await http_get_async(api_base("_/account/logout"));
+
+ if (!response.ok) {
+ const deleteCookieResponse = await fetch("/delete-cookie?key=" + CookieNames.session);
+ if (!deleteCookieResponse.ok) {
+ throw new Error("Could neither logout nor delete session cookie.");
+ }
+ }
+
+ return;
+ }
+ async create_account_async(payload: CreateAccountPayload): Promise<CreateAccountResponse> {
+ const response = await http_post_async(api_base("_/account/create"), payload);
+ if (response.ok) return { isCreated: true };
+ if (is_known_problem(response)) return {
+ isCreated: false,
+ knownProblem: await response.json()
+ }
+
+ return {
+ isCreated: false
+ }
+ }
+ async delete_current_async(): Promise<DeleteAccountResponse> {
+ const response = await http_delete_async(api_base("_/account/delete"));
+ return {
+ isDeleted: response.ok
+ }
+ }
+ async update_current_async(payload: UpdateAccountPayload): Promise<UpdateAccountResponse> {
+ const response = await http_post_async(api_base("_/account/update"), payload);
+ if (response.ok) return { isUpdated: true };
+ if (is_known_problem(response)) return {
+ isUpdated: false,
+ knownProblem: await response.json()
+ }
+
+ return {
+ isUpdated: false
+ }
+ }
+} \ No newline at end of file