/** * API usage reference for Vue template. * Mirrors react-vite conventions while keeping Vue-friendly consumption. */ import { api, extractApiData, type ApiResponse } from '@/lib/api'; type ID = string | number; export interface PaginatedResult { list: T[]; total: number; page: number; pageSize: number; } export interface ListParams { page: number; pageSize: number; keyword?: string; } export interface User { id: ID; name: string; email: string; avatar?: string; role: 'admin' | 'user'; createdAt: string; } export interface CreateUserParams { name: string; email: string; password: string; role?: 'admin' | 'user'; } export interface UpdateUserParams { name?: string; email?: string; avatar?: string; } export const userApi = { async getList(params: ListParams): Promise> { const response = await api.get>>( '/api/users', { params } ); return extractApiData>(response); }, async getById(id: ID): Promise { const response = await api.get>(`/api/users/${id}`); return extractApiData(response); }, async create(data: CreateUserParams): Promise { const response = await api.post>('/api/users', data); return extractApiData(response); }, async update(id: ID, data: UpdateUserParams): Promise { const response = await api.put>(`/api/users/${id}`, data); return extractApiData(response); }, async delete(id: ID): Promise { await api.delete(`/api/users/${id}`); }, };