dishplanner/frontend-old/app/utils/api/scheduleApi.ts

112 lines
No EOL
3.2 KiB
TypeScript

import { apiRequest } from "@/utils/api/apiRequest";
import { isValidDate } from "@/helpers/Date";
export const listSchedule = async (startDate?: string, endDate?: string) => {
const token = localStorage.getItem('token');
if (!token) {
throw new Error('No token found in localStorage.');
}
if (startDate && !isValidDate(startDate)) {
throw new Error('Invalid start date');
}
if (endDate && !isValidDate(endDate)) {
throw new Error('Invalid end date');
}
const params = new URLSearchParams();
if (startDate) params.append('start', startDate);
if (endDate) params.append('end', endDate);
const endpoint = `/api/schedule${params.toString() ? `?${params.toString()}` : ''}`;
return apiRequest.get(endpoint, {
headers: {
Authorization: `Bearer ${token}`,
}
})
.then((scheduleData) => scheduleData?.payload?.schedule);
};
export const getScheduleForDate = async (date: string) => {
const token = localStorage.getItem('token');
if (!token) {
throw new Error('No token found in localStorage.');
}
if (!isValidDate(date)) {
throw new Error('Invalid date');
}
const endpoint = `/api/schedule/${date}`;
return apiRequest.get(endpoint, {
headers: {
Authorization: `Bearer ${token}`,
}
})
.then((scheduleData) => scheduleData?.payload?.schedule)
.catch((err) => {
throw err;
});
};
// Update the schedule for a specific date (e.g., mark as skipped)
export const updateScheduleForDate = async (date: string, isSkipped: boolean) => {
const token = localStorage.getItem('token');
if (!token) {
throw new Error('No token found in localStorage.');
}
if (!isValidDate(date)) {
throw new Error('Invalid date');
}
const endpoint = `/api/schedule/${date}`;
return apiRequest.put(endpoint, { is_skipped: isSkipped }, {
headers: {
Authorization: `Bearer ${token}`,
}
})
.then((scheduleData) => scheduleData?.payload?.schedule)
.catch((err) => {
throw err;
});
};
// Generate a new schedule (optional: overwrite the existing one)
export const generateSchedule = async (overwrite: boolean) => {
const token = localStorage.getItem('token');
if (!token) {
throw new Error('No token found in localStorage.');
}
const endpoint = `/api/schedule/generate`;
return apiRequest.post(endpoint, { overwrite }, {
headers: {
Authorization: `Bearer ${token}`,
}
})
.then((scheduleData) => scheduleData?.payload?.schedule)
.catch((err) => {
throw err;
});
};
export const scheduleUserDish = async (date: string, user_id: number, user_dish_id: number|null, skipped: boolean = false) => {
const token = localStorage.getItem('token');
if (!token) throw new Error('No token found in localStorage.');
const endpoint = `/api/schedule/${date}/user-dishes`;
return apiRequest.post(endpoint, { user_dish_id, user_id, skipped }, { headers: { Authorization: `Bearer ${token}`} })
.then((scheduleData) => scheduleData?.payload?.schedule)
.catch((err) => { throw err });
};