Migrate the hardcoded wechat field to the new extensible user attributes system and improve the users management UI. Migration: - Add migration 019 to move wechat data to user_attribute_values - Remove wechat field from User entity, DTOs, and API contracts - Clean up wechat-related code from backend and frontend UsersView enhancements: - Add text labels to action buttons (Filter Settings, Column Settings, Attributes Config) for better UX - Change status column to show colored dot + Chinese text instead of English text - Add dynamic attribute columns support with batch loading - Add column visibility settings with localStorage persistence - Add filter settings modal for search and filter preferences - Update i18n translations 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
55 lines
1.2 KiB
TypeScript
55 lines
1.2 KiB
TypeScript
/**
|
|
* User API endpoints
|
|
* Handles user profile management and password changes
|
|
*/
|
|
|
|
import { apiClient } from './client'
|
|
import type { User, ChangePasswordRequest } from '@/types'
|
|
|
|
/**
|
|
* Get current user profile
|
|
* @returns User profile data
|
|
*/
|
|
export async function getProfile(): Promise<User> {
|
|
const { data } = await apiClient.get<User>('/user/profile')
|
|
return data
|
|
}
|
|
|
|
/**
|
|
* Update current user profile
|
|
* @param profile - Profile data to update
|
|
* @returns Updated user profile data
|
|
*/
|
|
export async function updateProfile(profile: {
|
|
username?: string
|
|
}): Promise<User> {
|
|
const { data } = await apiClient.put<User>('/user', profile)
|
|
return data
|
|
}
|
|
|
|
/**
|
|
* Change current user password
|
|
* @param passwords - Old and new password
|
|
* @returns Success message
|
|
*/
|
|
export async function changePassword(
|
|
oldPassword: string,
|
|
newPassword: string
|
|
): Promise<{ message: string }> {
|
|
const payload: ChangePasswordRequest = {
|
|
old_password: oldPassword,
|
|
new_password: newPassword
|
|
}
|
|
|
|
const { data } = await apiClient.put<{ message: string }>('/user/password', payload)
|
|
return data
|
|
}
|
|
|
|
export const userAPI = {
|
|
getProfile,
|
|
updateProfile,
|
|
changePassword
|
|
}
|
|
|
|
export default userAPI
|