Initial commit

This commit is contained in:
2026-02-08 19:34:50 +03:00
commit c5804e3b53
167 changed files with 23898 additions and 0 deletions

View File

@@ -0,0 +1,50 @@
import { apiRequest } from "@/lib/api/api-service";
import { ApiResponse } from "@/types/api-response";
import { LoginDto, RegisterDto, RefreshTokenDto, AuthResponse } from "./types";
/**
* Auth Service - Example Implementation
* Matches Backend: /api/auth/*
*/
const login = (data: LoginDto) => {
return apiRequest<ApiResponse<AuthResponse>>({
url: "/auth/login",
client: "auth",
method: "post",
data,
});
};
const register = (data: RegisterDto) => {
return apiRequest<ApiResponse<AuthResponse>>({
url: "/auth/register",
client: "auth",
method: "post",
data,
});
};
const refreshToken = (data: RefreshTokenDto) => {
return apiRequest<ApiResponse<AuthResponse>>({
url: "/auth/refresh",
client: "auth",
method: "post",
data,
});
};
const logout = () => {
return apiRequest<ApiResponse<null>>({
url: "/auth/logout",
client: "auth",
method: "post",
});
};
export const authService = {
login,
register,
refreshToken,
logout,
};

View File

@@ -0,0 +1,32 @@
// Auth Request DTOs
export interface LoginDto {
email: string;
password: string;
}
export interface RegisterDto {
email: string;
password: string;
firstName: string;
lastName: string;
username?: string;
}
export interface RefreshTokenDto {
refreshToken: string;
}
// Auth Response DTOs
export interface AuthResponse {
accessToken: string;
refreshToken: string;
expiresIn: number;
user: {
id: string;
email: string;
firstName: string;
lastName: string;
isActive?: boolean;
roles: string[];
};
}

View File

@@ -0,0 +1,64 @@
import { useMutation, useQueryClient } from "@tanstack/react-query";
import { ApiResponse } from "@/types/api-response";
import { authService } from "./service";
import { LoginDto, RegisterDto, RefreshTokenDto, AuthResponse } from "./types";
export const AuthQueryKeys = {
all: ["auth"] as const,
session: () => [...AuthQueryKeys.all, "session"] as const,
};
export function useLogin() {
const queryClient = useQueryClient();
const { data, ...rest } = useMutation<
ApiResponse<AuthResponse>,
Error,
LoginDto
>({
mutationFn: (credentials: LoginDto) => authService.login(credentials),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: AuthQueryKeys.session() });
},
});
return { data: data?.data, ...rest };
}
export function useRegister() {
const { data, ...rest } = useMutation<
ApiResponse<AuthResponse>,
Error,
RegisterDto
>({
mutationFn: (userData: RegisterDto) => authService.register(userData),
});
return { data: data?.data, ...rest };
}
export function useRefreshToken() {
const { data, ...rest } = useMutation<
ApiResponse<AuthResponse>,
Error,
RefreshTokenDto
>({
mutationFn: (tokenData: RefreshTokenDto) =>
authService.refreshToken(tokenData),
});
return { data: data?.data, ...rest };
}
export function useLogout() {
const queryClient = useQueryClient();
const { data, ...rest } = useMutation<ApiResponse<null>, Error, void>({
mutationFn: () => authService.logout(),
onSuccess: () => {
queryClient.clear();
},
});
return { data: data?.data, ...rest };
}