import axios from "@/config/axios"; import { API_ENDPOINTS } from "@/config/api"; import type { LoginResquest, LoginResponse, CreateAccountRequest } from "@/types/auth"; /** * Đăng nhập * @param credentials - Thông tin đăng nhập * @returns Response chứa token, name, username, access, role */ export async function login(credentials: LoginResquest): Promise { const response = await axios.post( API_ENDPOINTS.AUTH.LOGIN, credentials ); return response.data; } /** * Build SSO login URL * @param returnUrl - FE callback url */ export function buildSsoLoginUrl(returnUrl: string): string { const base = API_ENDPOINTS.AUTH.SSO_LOGIN; const encoded = encodeURIComponent(returnUrl); return `${base}?returnUrl=${encoded}`; } /** * Exchange one-time code for login payload * @param code - one-time code */ export async function exchangeSsoCode(code: string): Promise { const response = await axios.post( API_ENDPOINTS.AUTH.SSO_EXCHANGE, { code } ); return response.data; } /** * Đăng xuất */ export async function logout(): Promise { await axios.delete(API_ENDPOINTS.AUTH.LOGOUT); } /** * Kiểm tra phiên đăng nhập * @param token - Access token * @returns Response kiểm tra phiên */ export async function ping(token?: string): Promise<{ message: string; code: number }> { const response = await axios.get(API_ENDPOINTS.AUTH.PING, { params: token ? { token } : undefined, }); return response.data; } /** * Lấy CSRF token * @returns CSRF token */ export async function getCsrfToken(): Promise<{ token: string }> { const response = await axios.get(API_ENDPOINTS.AUTH.CSRF_TOKEN); return response.data; } /** * Thay đổi mật khẩu của user hiện tại * @param data - Dữ liệu thay đổi mật khẩu {currentPassword, newPassword} */ export async function changePassword(data: { currentPassword: string; newPassword: string; }): Promise<{ message: string }> { const response = await axios.put(API_ENDPOINTS.AUTH.CHANGE_PASSWORD, data); return response.data; } /** * Admin thay đổi mật khẩu của user khác * @param data - Dữ liệu {username, newPassword} */ export async function changePasswordAdmin(data: { username: string; newPassword: string; }): Promise<{ message: string }> { const response = await axios.put( API_ENDPOINTS.AUTH.CHANGE_PASSWORD_ADMIN, data ); return response.data; } /** * Tạo tài khoản mới * @param data - Dữ liệu tạo tài khoản (maps to CreateAccountRequest DTO) */ export async function createAccount(data: CreateAccountRequest): Promise<{ message: string }> { const response = await axios.post(API_ENDPOINTS.AUTH.CREATE_ACCOUNT, data); return response.data; }