Compare commits

...

3 Commits

Author SHA1 Message Date
278cf844c2
feat(services): update apiRequest module
Updated the apiRequest module with refinements in authorization and removal of redundant comments. The changes allow handling server-side rendering and type enforcement in request body.
2024-06-11 16:08:57 +02:00
e9048ca7eb
feat(interfaces): add API request/response interfaces
Created new typescript interfaces for API. They include IApiRegisterReq, IApiLoginReq, IAbstractApiResponse, IApiRegisterRes, and IApiLoginRes. These interfaces will be used to properly structure the data for API requests and responses, thus enhancing type safety and maintainability.
2024-06-11 16:08:34 +02:00
950cb9137f
feat(interface): extend IUserData properties
This commit enriches the IUserData interface by adding a series of new properties for a more comprehensive representation of a user. These additional properties include id, firstName, lastName, pseudo, email, roleId, isActive, city, dollarAvailables, age, created_at, and updated_at.
2024-06-11 16:07:59 +02:00
3 changed files with 55 additions and 50 deletions

View File

@ -0,0 +1,36 @@
import {IUserData} from "@/interfaces/userdata.interface";
// ----- Request -----
export interface IApiRegisterReq {
firstName: string;
lastName: string;
pseudo: string;
city: string;
email: string;
password: string;
age: number;
}
export interface IApiLoginReq {
email: string;
password: string;
}
// ----- Response -----
export interface IAbstractApiResponse {
message?: Array<string>;
error?: string;
statusCode?: number
}
export interface IApiRegisterRes extends IAbstractApiResponse {
access_token?: string;
user?: IUserData
}
export interface IApiLoginRes extends IAbstractApiResponse {
access_token?: string
}

View File

@ -1,3 +1,14 @@
export interface IUserData {
name: string
id: string;
firstName: string;
lastName: string;
pseudo: string;
email: string;
roleId: string;
isActive: boolean;
city: string;
dollarAvailables: number;
age: number;
created_at: string;
updated_at: string;
}

View File

@ -10,7 +10,7 @@ const AxiosConfigs = {
return {
headers: {
'content-type': 'application/json',
Authorization: `Bearer ${localStorage.getItem('sub')}`,
Authorization: `Bearer ${typeof window !== 'undefined' ? window.localStorage.getItem('sub') : "not-ssr"}`,
},
validateStatus: function (status: number) {
return status < 500; // Resolve only if the status code is less than 500
@ -32,72 +32,30 @@ const AxiosConfigs = {
}
}
/**
* Makes an authenticated JSON POST request using axios.
* @param {string} route - The route to send the request to.
* @param {object} body - The request body.
* @returns {Promise<AxiosResponse<ReqT, ResT>>} - The promise that resolves to the response from the server.
*/
async function doAuthenticatedJsonPostReq<ReqT, ResT>(route:string, body:object): Promise<AxiosResponse<ReqT, ResT>> {
async function doAuthenticatedJsonPostReq<ReqT, ResT>(route:string, body:ReqT): Promise<AxiosResponse<ResT>> {
return await axios.post(baseUrl + route, body, AxiosConfigs.authenticated.json())
}
/**
* Makes an authenticated GET request to the specified route using Axios.
*
* @param {string} route - The route to which the GET request is sent.
* @returns {Promise<AxiosResponse>} - A promise that resolves to the Axios response object containing the request data and response details.
*/
async function doAuthenticatedGetReq<ReqT, ResT>(route:string): Promise<AxiosResponse<ReqT, ResT>> {
async function doAuthenticatedGetReq<ResT>(route:string): Promise<AxiosResponse<ResT>> {
return await axios.get(baseUrl + route, AxiosConfigs.authenticated.json())
}
/**
* Performs an authenticated PATCH request to the specified route with the given body.
*
* @param {string} route - The route to send the PATCH request to.
* @param {object} body - The body of the request.
* @returns {Promise<AxiosResponse<ReqT, ResT>>} - A Promise that resolves to the AxiosResponse object containing the response data.
*/
async function doAuthenticatedPatchReq<ReqT, ResT>(route:string, body: object): Promise<AxiosResponse<ReqT, ResT>> {
async function doAuthenticatedPatchReq<ReqT, ResT>(route:string, body: ReqT): Promise<AxiosResponse<ResT>> {
return await axios.patch(baseUrl + route, body, AxiosConfigs.authenticated.json())
}
/**
* Sends an authenticated DELETE request to the specified route.
*
* @param {string} route - The route to send the request to.
*
* @return {Promise<AxiosResponse<ReqT, ResT>>} A Promise that resolves to the AxiosResponse object containing the response data.
*/
async function doAuthenticatedDelReq<ReqT, ResT>(route:string): Promise<AxiosResponse<ReqT, ResT>> {
async function doAuthenticatedDelReq<ResT>(route:string): Promise<AxiosResponse<ResT>> {
return await axios.delete(baseUrl + route, AxiosConfigs.authenticated.json())
}
//TODO form/multipart req
/**
* Perform a JSON POST request.
*
* @param {string} route - The route to send the request to.
* @param {object} body - The JSON object to send in the request body.
*
* @return {Promise<AxiosResponse<ReqT, ResT>>} - A promise that resolves with the response from the server.
*
* @throws {Error} - If an error occurs during the request.
*/
async function doJsonPostReq<ReqT, ResT>(route:string, body: object): Promise<AxiosResponse<ReqT, ResT>> {
async function doJsonPostReq<ReqT, ResT>(route:string, body: ReqT): Promise<AxiosResponse<ResT>> {
return await axios.post(baseUrl + route, body, AxiosConfigs.standard.json())
}
/**
* Perform a JSON GET request using Axios.
*
* @param {string} route - The route URL to make the GET request to.
* @returns {Promise<AxiosResponse<ReqT, ResT>>} - A promise that resolves to the AxiosResponse object.
*/
async function doJsonGetReq<ReqT, ResT>(route:string): Promise<AxiosResponse<ReqT, ResT>> {
async function doJsonGetReq<ResT>(route:string): Promise<AxiosResponse<ResT>> {
return await axios.get(baseUrl + route, AxiosConfigs.standard.json());
}