add auth api service

This commit is contained in:
thierryverse 2025-11-13 19:18:13 +02:00
parent c8fae413d2
commit 4d02c2eeed
3 changed files with 84 additions and 55 deletions

View file

@ -0,0 +1,50 @@
import { LoginRequest, LoginResponse, RegisterRequest, RegisterResponse } from "./contracts";
export class AuthApiService {
login = async (request: LoginRequest) : Promise<LoginResponse> => {
const requestBody = new URLSearchParams();
requestBody.append("username", request.email);
requestBody.append("password", request.password);
requestBody.append("grant_type", "password");
const response = await fetch(
`${process.env.NEXT_PUBLIC_FASTAPI_BACKEND_URL}/auth/jwt/login`,
{
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
body: requestBody.toString(),
}
);
const data = await response.json();
if (!response.ok) {
throw new Error(data.detail || `HTTP ${response.status}`);
}
return data;
};
register = async (request: RegisterRequest) : Promise<RegisterResponse> => {
const response = await fetch(
`${process.env.NEXT_PUBLIC_FASTAPI_BACKEND_URL}/auth/register`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(request),
}
);
const data = await response.json();
if (!response.ok) {
throw new Error(data.detail || `HTTP ${response.status}`);
}
return data;
};
}

View file

@ -0,0 +1,34 @@
/**
* LOGIN
*/
export type LoginRequest = {
email: string;
password: string;
grant_type?: string;
};
export type LoginResponse = {
access_token: string;
token_type: string;
};
/**
* REGISTER
*/
export type RegisterRequest = {
email: string;
password: string;
is_active: boolean;
is_superuser: boolean;
is_verified: boolean;
};
export type RegisterResponse = {
id: number;
email: string;
is_active: boolean;
is_superuser: boolean;
is_verified: boolean;
pages_limit: number;
pages_used: number;
};