File size: 1,653 Bytes
b6bed80
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/**
 * User service for API calls related to user management
 */

import api from './api-wrapper.ts';
import type {
  UserRegisterRequest,
  UserRegisterResponse,
  UserUpdateNameRequest,
  UserUpdateNameResponse,
  User,
} from '../types/user.types.ts';
import { API_ENDPOINTS } from '../constants/index.ts';
import { getUserId } from '../utils/index.ts';

/**
 * Register a new user or get existing user by unique_id
 */
export async function registerUser(
  request: UserRegisterRequest
): Promise<UserRegisterResponse> {
  return api.post<UserRegisterResponse, UserRegisterRequest>(
    API_ENDPOINTS.USER_REGISTER,
    request
  );
}

/**
 * Get current user by user_id (requires X-User-ID header)
 */
export async function getCurrentUser(): Promise<User> {
  const userId = getUserId();
  if (!userId) {
    throw new Error('User ID not found in localStorage');
  }

  return api.get<User>(API_ENDPOINTS.USER_ME, {
    headers: {
      'X-User-ID': userId,
    },
  });
}

/**
 * Get user by unique_id
 */
export async function getUserByUniqueId(
  uniqueId: string
): Promise<User> {
  return api.get<User>(
    `${API_ENDPOINTS.USER_BY_UNIQUE_ID}?unique_id=${encodeURIComponent(uniqueId)}`
  );
}

/**
 * Update user's display name
 */
export async function updateUserName(
  request: UserUpdateNameRequest
): Promise<UserUpdateNameResponse> {
  const userId = getUserId();
  if (!userId) {
    throw new Error('User ID not found in localStorage');
  }

  return api.patch<UserUpdateNameResponse, UserUpdateNameRequest>(
    API_ENDPOINTS.USER_UPDATE_NAME,
    request,
    {
      headers: {
        'X-User-ID': userId,
      },
    }
  );
}