TTMT.ManageWebGUI/src/services/auth.service.ts

103 lines
2.8 KiB
TypeScript
Raw Normal View History

2026-03-06 17:54:09 +07:00
import axios from "@/config/axios";
2025-12-22 14:53:19 +07:00
import { API_ENDPOINTS } from "@/config/api";
2026-03-06 17:54:09 +07:00
import type { LoginResquest, LoginResponse, CreateAccountRequest } from "@/types/auth";
2025-12-22 14:53:19 +07:00
/**
* Đă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<LoginResponse> {
const response = await axios.post<LoginResponse>(
API_ENDPOINTS.AUTH.LOGIN,
credentials
);
return response.data;
}
2026-04-01 16:46:33 +07:00
/**
* 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<LoginResponse> {
const response = await axios.post<LoginResponse>(
API_ENDPOINTS.AUTH.SSO_EXCHANGE,
{ code }
);
return response.data;
}
2025-12-22 14:53:19 +07:00
/**
* Đăng xuất
*/
export async function logout(): Promise<void> {
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
2026-03-06 17:54:09 +07:00
* @param data - Dữ liệu tạo tài khoản (maps to CreateAccountRequest DTO)
2025-12-22 14:53:19 +07:00
*/
2026-03-06 17:54:09 +07:00
export async function createAccount(data: CreateAccountRequest): Promise<{ message: string }> {
2025-12-22 14:53:19 +07:00
const response = await axios.post(API_ENDPOINTS.AUTH.CREATE_ACCOUNT, data);
return response.data;
}