import type { UserData, UserWrite } from './dto/user-data' import type { HydraCollection } from '~/utils/api' import { extractHydraMembers } from '~/utils/api' export function useUserService() { const api = useApi() async function getAll(): Promise { const data = await api.get>('/users') return extractHydraMembers(data) } // Archived users are hidden from the default collection; an admin lists // them explicitly via the `archived` filter (handled server-side). async function getArchived(): Promise { const data = await api.get>('/users?archived=true') return extractHydraMembers(data) } async function getById(id: number): Promise { return api.get(`/users/${id}`) } async function create(payload: UserWrite): Promise { return api.post('/users', payload as Record, { toastSuccessKey: 'users.created', }) } async function update(id: number, payload: Partial): Promise { return api.patch(`/users/${id}`, payload as Record, { toastSuccessKey: 'users.updated', }) } // Deleting a user is a soft delete server-side: the account is archived // (kept for referential integrity) rather than removed. async function remove(id: number): Promise { await api.delete(`/users/${id}`, {}, { toastSuccessKey: 'users.archived', }) } async function restore(id: number): Promise { return api.patch(`/users/${id}`, { archived: false }, { toastSuccessKey: 'users.restored', }) } return { getAll, getArchived, getById, create, update, remove, restore } }