Added POST routes to client

This commit is contained in:
2025-03-17 20:00:59 +01:00
parent 5699a4a60b
commit ca7fd3edfa

View File

@@ -1,4 +1,4 @@
interface paths { interface get {
"/item": { "/item": {
parameters: { parameters: {
query: { query: {
@@ -11,12 +11,56 @@ interface paths {
parameters: { parameters: {
query?: never; query?: never;
}; };
return?: Array<Item>;
};
"/case": {
parameters: {
query: {
uuid: string;
};
};
return: Case;
};
"/cases": {
parameters: {
query?: never;
};
return?: Array<Case>;
};
}
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; return?: never;
}; };
} }
export interface Item { export interface Item {
id: number;
uuid: string; uuid: string;
name: string; name: string;
rarity: number; rarity: number;
@@ -24,6 +68,18 @@ export interface Item {
image: string; image: string;
} }
export interface Case {
uuid: string;
name: string;
price: number;
image: string;
}
export interface User {
uuid: string;
username: string;
}
class Client { class Client {
baseUrl: string; baseUrl: string;
@@ -31,20 +87,44 @@ class Client {
this.baseUrl = baseUrl; this.baseUrl = baseUrl;
} }
GET<T extends keyof paths>( async GET<T extends keyof get>(
path: T, path: T,
parameters: paths[T]["parameters"] parameters: get[T]["parameters"]
): Promise<paths[T]["return"]> { ): Promise<[get[T]["return"], number]> {
let query = parameters["query"] let query = parameters["query"]
? "?" + new URLSearchParams(parameters["query"]) ? "?" + new URLSearchParams(parameters["query"])
: ""; : "";
return fetch(this.baseUrl + path + query, { let response = await fetch(this.baseUrl + path + query, {
method: "GET", method: "GET",
headers: { headers: {
"Content-Type": "application/json", "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<T extends keyof 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];
} }
} }