mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-08-25 21:59:40 +00:00
feat: add find task by id endpoint
This commit is contained in:
@ -15,34 +15,32 @@ export const apiClient = axios.create({
|
||||
baseURL: API_BASE_URL,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'x-client-id': 'web-client'
|
||||
}
|
||||
'x-client-id': 'web-client',
|
||||
},
|
||||
});
|
||||
|
||||
// Add request interceptor to include current auth header
|
||||
apiClient.interceptors.request.use(config => {
|
||||
apiClient.interceptors.request.use((config) => {
|
||||
config.headers.Authorization = getAuthHeader();
|
||||
return config;
|
||||
});
|
||||
|
||||
// Add response interceptor to handle errors
|
||||
apiClient.interceptors.response.use(
|
||||
response => response,
|
||||
error => {
|
||||
const errorMessage = error.response?.data?.message ||
|
||||
error.response?.data?.error ||
|
||||
error.message ||
|
||||
'An unexpected error occurred';
|
||||
(response) => response,
|
||||
(error) => {
|
||||
const errorMessage =
|
||||
error.response?.data?.message || error.response?.data?.error || error.message || 'An unexpected error occurred';
|
||||
|
||||
console.error('API Error:', {
|
||||
status: error.response?.status,
|
||||
message: errorMessage,
|
||||
data: error.response?.data
|
||||
data: error.response?.data,
|
||||
});
|
||||
|
||||
// Throw error with meaningful message
|
||||
throw new Error(errorMessage);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
// Auth API
|
||||
@ -52,13 +50,13 @@ export const authApi = {
|
||||
const cleanPhoneNumber = phoneNumber.replace(/\D/g, '');
|
||||
return apiClient.post('/api/auth/register/otp', {
|
||||
countryCode: countryCode.startsWith('+') ? countryCode : `+${countryCode}`,
|
||||
phoneNumber: cleanPhoneNumber
|
||||
phoneNumber: cleanPhoneNumber,
|
||||
});
|
||||
},
|
||||
|
||||
verifyOtp: (countryCode: string, phoneNumber: string, otp: string) =>
|
||||
apiClient.post('/api/auth/register/verify', { countryCode, phoneNumber, otp }),
|
||||
|
||||
|
||||
setEmail: (email: string) => {
|
||||
// Use the stored token from localStorage
|
||||
const storedToken = localStorage.getItem('accessToken');
|
||||
@ -67,7 +65,7 @@ export const authApi = {
|
||||
}
|
||||
return apiClient.post('/api/auth/register/set-email', { email });
|
||||
},
|
||||
|
||||
|
||||
setPasscode: (passcode: string) => {
|
||||
// Use the stored token from localStorage
|
||||
const storedToken = localStorage.getItem('accessToken');
|
||||
@ -83,29 +81,23 @@ export const authApi = {
|
||||
email,
|
||||
password,
|
||||
fcmToken: 'web-client-token', // Required by API
|
||||
signature: 'web-login' // Required by API
|
||||
})
|
||||
signature: 'web-login', // Required by API
|
||||
}),
|
||||
};
|
||||
|
||||
// Juniors API
|
||||
export const juniorsApi = {
|
||||
createJunior: (data: CreateJuniorRequest) =>
|
||||
apiClient.post('/api/juniors', data),
|
||||
createJunior: (data: CreateJuniorRequest) => apiClient.post('/api/juniors', data),
|
||||
|
||||
getJuniors: (page = 1, size = 10) =>
|
||||
apiClient.get(`/api/juniors?page=${page}&size=${size}`),
|
||||
getJuniors: (page = 1, size = 10) => apiClient.get(`/api/juniors?page=${page}&size=${size}`),
|
||||
|
||||
getJunior: (juniorId: string) =>
|
||||
apiClient.get(`/api/juniors/${juniorId}`),
|
||||
getJunior: (juniorId: string) => apiClient.get(`/api/juniors/${juniorId}`),
|
||||
|
||||
setTheme: (data: JuniorTheme) =>
|
||||
apiClient.post('/api/juniors/set-theme', data),
|
||||
setTheme: (data: JuniorTheme) => apiClient.post('/api/juniors/set-theme', data),
|
||||
|
||||
getQrCode: (juniorId: string) =>
|
||||
apiClient.get(`/api/juniors/${juniorId}/qr-code`),
|
||||
getQrCode: (juniorId: string) => apiClient.get(`/api/juniors/${juniorId}/qr-code`),
|
||||
|
||||
validateQrCode: (token: string) =>
|
||||
apiClient.get(`/api/juniors/qr-code/${token}/validate`)
|
||||
validateQrCode: (token: string) => apiClient.get(`/api/juniors/qr-code/${token}/validate`),
|
||||
};
|
||||
|
||||
// Document API
|
||||
@ -116,16 +108,15 @@ export const documentApi = {
|
||||
formData.append('documentType', documentType);
|
||||
return apiClient.post('/api/document', formData, {
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
'Content-Type': 'multipart/form-data',
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
// Tasks API
|
||||
export const tasksApi = {
|
||||
createTask: (data: CreateTaskRequest) =>
|
||||
apiClient.post('/api/tasks', data),
|
||||
createTask: (data: CreateTaskRequest) => apiClient.post('/api/tasks', data),
|
||||
|
||||
getTasks: (status: TaskStatus, page = 1, size = 10, juniorId?: string) => {
|
||||
const url = new URL('/api/tasks', API_BASE_URL);
|
||||
@ -136,12 +127,11 @@ export const tasksApi = {
|
||||
return apiClient.get(url.pathname + url.search);
|
||||
},
|
||||
|
||||
submitTask: (taskId: string, data: TaskSubmission) =>
|
||||
apiClient.patch(`/api/tasks/${taskId}/submit`, data),
|
||||
getTaskById: (taskId: string) => apiClient.get(`/api/tasks/${taskId}`),
|
||||
|
||||
approveTask: (taskId: string) =>
|
||||
apiClient.patch(`/api/tasks/${taskId}/approve`),
|
||||
submitTask: (taskId: string, data: TaskSubmission) => apiClient.patch(`/api/tasks/${taskId}/submit`, data),
|
||||
|
||||
rejectTask: (taskId: string) =>
|
||||
apiClient.patch(`/api/tasks/${taskId}/reject`)
|
||||
approveTask: (taskId: string) => apiClient.patch(`/api/tasks/${taskId}/approve`),
|
||||
|
||||
rejectTask: (taskId: string) => apiClient.patch(`/api/tasks/${taskId}/reject`),
|
||||
};
|
||||
|
Reference in New Issue
Block a user