/** * Admin User Attributes API endpoints * Handles user custom attribute definitions and values */ import { apiClient } from '../client' import type { UserAttributeDefinition, UserAttributeValue, CreateUserAttributeRequest, UpdateUserAttributeRequest, UserAttributeValuesMap } from '@/types' /** * Get all attribute definitions */ export async function listDefinitions(): Promise { const { data } = await apiClient.get('/admin/user-attributes') return data } /** * Get enabled attribute definitions only */ export async function listEnabledDefinitions(): Promise { const { data } = await apiClient.get('/admin/user-attributes', { params: { enabled: true } }) return data } /** * Create a new attribute definition */ export async function createDefinition( request: CreateUserAttributeRequest ): Promise { const { data } = await apiClient.post('/admin/user-attributes', request) return data } /** * Update an attribute definition */ export async function updateDefinition( id: number, request: UpdateUserAttributeRequest ): Promise { const { data } = await apiClient.put( `/admin/user-attributes/${id}`, request ) return data } /** * Delete an attribute definition */ export async function deleteDefinition(id: number): Promise<{ message: string }> { const { data } = await apiClient.delete<{ message: string }>(`/admin/user-attributes/${id}`) return data } /** * Reorder attribute definitions */ export async function reorderDefinitions(ids: number[]): Promise<{ message: string }> { const { data } = await apiClient.put<{ message: string }>('/admin/user-attributes/reorder', { ids }) return data } /** * Get user's attribute values */ export async function getUserAttributeValues(userId: number): Promise { const { data } = await apiClient.get( `/admin/users/${userId}/attributes` ) return data } /** * Update user's attribute values (batch) */ export async function updateUserAttributeValues( userId: number, values: UserAttributeValuesMap ): Promise<{ message: string }> { const { data } = await apiClient.put<{ message: string }>( `/admin/users/${userId}/attributes`, { values } ) return data } /** * Batch response type */ export interface BatchUserAttributesResponse { attributes: Record> } /** * Get attribute values for multiple users */ export async function getBatchUserAttributes( userIds: number[] ): Promise { const { data } = await apiClient.post( '/admin/user-attributes/batch', { user_ids: userIds } ) return data } export const userAttributesAPI = { listDefinitions, listEnabledDefinitions, createDefinition, updateDefinition, deleteDefinition, reorderDefinitions, getUserAttributeValues, updateUserAttributeValues, getBatchUserAttributes } export default userAttributesAPI