import { use } from 'react'; import { fetchServerAPI } from './base'; import { User, Role, userSchema, UserCreate, userCreateSchema, roleSchema } from '@/lib/schemas'; export interface UserListParams { username?: string; role_name?: string; sort_by?: string; sort_desc?: boolean; page?: number; limit?: number; } const membershipRoute = '/membership'; export async function getUsers(token: string, params: UserListParams = {}): Promise { const searchParams = new URLSearchParams(); Object.entries(params).forEach(([key, value]) => { if (value !== undefined) { searchParams.set(key, value.toString()); } }); const queryString = searchParams.toString(); const endpoint = `${membershipRoute}${queryString ? `?${queryString}` : ''}`; const response = await fetchServerAPI(endpoint, token); return userSchema.array().parse(response.data); } export async function createUser(token: string, userData: UserCreate): Promise { await fetchServerAPI(membershipRoute, token, 'POST', userCreateSchema.parse(userData)); } export async function getUserById(token: string, userId: string): Promise { const response = await fetchServerAPI(`${membershipRoute}/${userId}`, token); return userSchema.parse(response.data); } export async function updateUser( token: string, userId: string, userData: Partial ): Promise { await fetchServerAPI( `${membershipRoute}/${userId}`, token, 'PUT', userCreateSchema.parse(userData) ); } export async function deleteUser(token: string, userId: string): Promise { await fetchServerAPI(`${membershipRoute}/${userId}`, token, 'DELETE'); } export async function getRoles(token: string): Promise { const response = await fetchServerAPI(`${membershipRoute}/roles`, token); return roleSchema.array().parse(response.data); }