diff --git a/app/api/client.ts b/app/api/client.ts index 92d6e13..338b348 100644 --- a/app/api/client.ts +++ b/app/api/client.ts @@ -1,4 +1,4 @@ -interface paths { +interface get { "/item": { parameters: { query: { @@ -11,12 +11,56 @@ interface paths { parameters: { query?: never; }; + return?: Array; + }; + "/case": { + parameters: { + query: { + uuid: string; + }; + }; + return: Case; + }; + "/cases": { + parameters: { + query?: never; + }; + return?: Array; + }; +} + +interface post { + "/login": { + parameters: { + query?: never; + body: { + username: string; + password: string; + }; + }; + return: User; + }; + "/logout": { + parameters: { + query?: never; + body?: never; + }; + return?: never; + }; + "/register": { + parameters: { + query?: never; + body: { + username: string; + password: string; + email: string; + }; + }; return?: never; }; } export interface Item { - id: number; uuid: string; name: string; rarity: number; @@ -24,6 +68,18 @@ export interface Item { image: string; } +export interface Case { + uuid: string; + name: string; + price: number; + image: string; +} + +export interface User { + uuid: string; + username: string; +} + class Client { baseUrl: string; @@ -31,20 +87,44 @@ class Client { this.baseUrl = baseUrl; } - GET( + async GET( path: T, - parameters: paths[T]["parameters"] - ): Promise { + parameters: get[T]["parameters"] + ): Promise<[get[T]["return"], number]> { let query = parameters["query"] ? "?" + new URLSearchParams(parameters["query"]) : ""; - return fetch(this.baseUrl + path + query, { + let response = await fetch(this.baseUrl + path + query, { method: "GET", headers: { "Content-Type": "application/json", }, - // body: parameters ? JSON.stringify(parameters) : undefined, - }).then((response) => response.json()); + }); + let data = await response.json(); + return [data, response.status]; + } + + async POST( + path: T, + parameters: post[T]["parameters"] + ): Promise<[post[T]["return"], number]> { + let query = parameters["query"] + ? "?" + new URLSearchParams(parameters["query"]) + : ""; + let response = await fetch(this.baseUrl + path + query, { + method: "POST", + body: JSON.stringify(parameters["body"]), + headers: { + "Content-Type": "application/json", + }, + }); + let data; + try { + data = await response.json(); + } catch (_) { + data = null; + } + return [data, response.status]; } }