| import api from './axiosInstance.api'; |
|
|
| import type { |
| User, |
| LoginRequest, |
| LoginResponse, |
| SignupOrganizationRequest, |
| SignupTrainerRequest, |
| SignupTraineeRequest, |
| ChangePasswordRequest, |
| ResetPasswordRequest, |
| ForgotPasswordRequest, |
| UpdateUserRequest, |
| VerifyTrainerRequest, |
| VerifyOrganizationRequest, |
| Organization, |
| PendingOrganization, |
| PendingTrainer |
| } from '../Types' |
|
|
|
|
| |
| |
| |
| |
| export const googleLogin = async (code: string, role: string = 'trainee'): Promise<LoginResponse> => { |
| const response = await api.get<LoginResponse>(`/users/auth/google?code=${code}&state=${role}`); |
| return response.data; |
| }; |
|
|
| |
| |
| |
| export const login = async (credentials: LoginRequest & { otp?: string }): Promise<LoginResponse> => { |
| const response = await api.post<LoginResponse>('/users/login', credentials); |
| return response.data; |
| }; |
|
|
| |
| |
| |
| export const signupTrainee = async (userData: SignupTraineeRequest): Promise<{ message: string }> => { |
| const response = await api.post<{ message: string }>('/users/signup/trainee', userData); |
| return response.data; |
| }; |
|
|
| |
| |
| |
| export const signupTrainer = async (userData: SignupTrainerRequest): Promise<{ message: string }> => { |
| const response = await api.post<{ message: string }>('/users/signup/trainer', userData); |
| return response.data; |
| }; |
|
|
| |
| |
| |
| export const signupOrganization = async (userData: SignupOrganizationRequest): Promise<{ message: string }> => { |
| const response = await api.post<{ message: string }>('/users/signup/organization', userData); |
| return response.data; |
| }; |
|
|
| |
| |
| |
| export const getCurrentUser = async (): Promise<User> => { |
| const response = await api.get<User>('/users/me'); |
| return response.data; |
| }; |
|
|
| |
| |
| |
| export const updateUser = async (userData: UpdateUserRequest): Promise<User> => { |
| const response = await api.put<User>('/users/me', userData); |
| return response.data; |
| }; |
|
|
| |
| |
| |
| export const deleteUser = async (): Promise<{ message: string }> => { |
| const response = await api.delete<{ message: string }>('/users/me'); |
| return response.data; |
| }; |
|
|
| |
| |
| |
| export const changePassword = async (passwordData: ChangePasswordRequest): Promise<{ message: string }> => { |
| const response = await api.put<{ message: string }>('/users/change-password', passwordData); |
| return response.data; |
| }; |
|
|
| |
| |
| |
| export const uploadProfilePhoto = async (file: File): Promise<{ message: string; profilePhoto: string }> => { |
| const formData = new FormData(); |
| formData.append('profilePhoto', file); |
|
|
| const response = await api.post<{ message: string; profilePhoto: string }>( |
| '/users/upload-photo', |
| formData, |
| { |
| headers: { |
| 'Content-Type': 'multipart/form-data', |
| }, |
| } |
| ); |
| return response.data; |
| }; |
|
|
| |
| |
| |
| export const uploadOrganizationDocuments = async (files: { |
| profilePhoto?: File; |
| registrationCertificate?: File; |
| gstCertificate?: File; |
| authorizationLetter?: File; |
| additionalDocs?: File[]; |
| }): Promise<{ message: string; documents: any }> => { |
| const formData = new FormData(); |
|
|
| if (files.profilePhoto) formData.append('profilePhoto', files.profilePhoto); |
| if (files.registrationCertificate) formData.append('registrationCertificate', files.registrationCertificate); |
| if (files.gstCertificate) formData.append('gstCertificate', files.gstCertificate); |
| if (files.authorizationLetter) formData.append('authorizationLetter', files.authorizationLetter); |
| if (files.additionalDocs) { |
| files.additionalDocs.forEach((file) => { |
| formData.append('additionalDocs', file); |
| }); |
| } |
|
|
| const response = await api.post<{ message: string; documents: any }>( |
| '/users/upload-documents', |
| formData, |
| { |
| headers: { |
| 'Content-Type': 'multipart/form-data', |
| }, |
| } |
| ); |
| return response.data; |
| }; |
|
|
| |
| |
| |
| export const forgotPassword = async (emailData: ForgotPasswordRequest): Promise<{ message: string }> => { |
| const response = await api.post<{ message: string }>('/users/forgot-password', emailData); |
| return response.data; |
| }; |
|
|
| |
| |
| |
| export const resetPassword = async (token: string, passwordData: ResetPasswordRequest): Promise<{ message: string }> => { |
| const response = await api.post<{ message: string }>(`/users/reset-password/${token}`, passwordData); |
| return response.data; |
| }; |
|
|
| |
| |
| |
| export const setup2FA = async (): Promise<{ secret: string; qrCode: string }> => { |
| const response = await api.post<{ secret: string; qrCode: string }>('/users/auth/2fa/setup'); |
| return response.data; |
| }; |
|
|
| |
| |
| |
| export const verify2FA = async (token: string): Promise<{ message: string }> => { |
| const response = await api.post<{ message: string }>('/users/auth/2fa/verify', { token }); |
| return response.data; |
| }; |
|
|
| |
|
|
| |
| |
| |
| export const verifyTrainer = async (verificationData: VerifyTrainerRequest): Promise<{ |
| message: string; |
| trainer: { |
| _id: string; |
| username: string; |
| email: string; |
| organizationVerificationStatus: string; |
| } |
| }> => { |
| const response = await api.put<{ |
| message: string; |
| trainer: { |
| _id: string; |
| username: string; |
| email: string; |
| organizationVerificationStatus: string; |
| } |
| }>('/users/verify-trainer', verificationData); |
| return response.data; |
| }; |
|
|
| |
| |
| |
| export const getPendingTrainers = async (): Promise<{ |
| count: number; |
| trainers: PendingTrainer[] |
| }> => { |
| const response = await api.get<{ |
| count: number; |
| trainers: PendingTrainer[] |
| }>('/users/pending-trainers'); |
| return response.data; |
| }; |
|
|
| |
|
|
| |
| |
| |
| export const verifyOrganization = async (verificationData: VerifyOrganizationRequest): Promise<{ |
| message: string; |
| organization: { |
| _id: string; |
| username: string; |
| email: string; |
| verificationStatus: string; |
| } |
| }> => { |
| const response = await api.put<{ |
| message: string; |
| organization: { |
| _id: string; |
| username: string; |
| email: string; |
| verificationStatus: string; |
| } |
| }>('/users/verify-organization', verificationData); |
| return response.data; |
| }; |
|
|
| |
| |
| |
| export const getPendingOrganizations = async (): Promise<{ |
| count: number; |
| organizations: PendingOrganization[] |
| }> => { |
| const response = await api.get<{ |
| count: number; |
| organizations: PendingOrganization[] |
| }>('/users/pending-organizations'); |
| return response.data; |
| }; |
|
|
| |
| |
| |
| export const getAllUsers = async (params: { |
| role?: string; |
| search?: string; |
| limit?: number; |
| skip?: number; |
| userId?: string; |
| }): Promise<{ |
| count: number; |
| total: number; |
| users: User[]; |
| }> => { |
| const response = await api.get<{ |
| count: number; |
| total: number; |
| users: User[]; |
| }>('/users/all', { params }); |
| return response.data; |
| }; |
|
|
| |
|
|
| |
| |
| |
| export const getAllOrganizations = async (): Promise<{ |
| count: number; |
| organizations: Organization[] |
| }> => { |
| const response = await api.get<{ |
| count: number; |
| organizations: Organization[] |
| }>('/users/organizations'); |
| return response.data; |
| }; |
|
|
| |
|
|
| |
| |
| |
| export const storeToken = (token: string): void => { |
| localStorage.setItem('token', token); |
| }; |
|
|
| |
| |
| |
| export const removeToken = (): void => { |
| localStorage.removeItem('token'); |
| }; |
|
|
| |
| |
| |
| export const getToken = (): string | null => { |
| return localStorage.getItem('token'); |
| }; |
|
|
| |
| |
| |
| export const isAuthenticated = (): boolean => { |
| return !!getToken(); |
| }; |
|
|
| |
| |
| |
| export const storeUser = (user: User): void => { |
| localStorage.setItem('user', JSON.stringify(user)); |
| }; |
|
|
| |
| |
| |
| export const getStoredUser = (): User | null => { |
| const userStr = localStorage.getItem('user'); |
| return userStr ? JSON.parse(userStr) : null; |
| }; |
|
|
| |
| |
| |
| export const removeUser = (): void => { |
| localStorage.removeItem('user'); |
| }; |
|
|
| |
| |
| |
| export const logout = (): void => { |
| removeToken(); |
| removeUser(); |
| }; |
|
|
| export default { |
| |
| googleLogin, |
| login, |
| signupTrainee, |
| signupTrainer, |
| signupOrganization, |
|
|
| |
| getCurrentUser, |
| updateUser, |
| deleteUser, |
| changePassword, |
| uploadProfilePhoto, |
| uploadOrganizationDocuments, |
|
|
| |
| forgotPassword, |
| resetPassword, |
| setup2FA, |
| verify2FA, |
|
|
| |
| verifyTrainer, |
| getPendingTrainers, |
|
|
| |
| verifyOrganization, |
| getPendingOrganizations, |
| getAllUsers, |
|
|
| |
| getAllOrganizations, |
|
|
| |
| storeToken, |
| removeToken, |
| getToken, |
| isAuthenticated, |
| storeUser, |
| getStoredUser, |
| removeUser, |
| logout, |
| }; |