import { Project } from "../entities/Project"; import { handleAuthResponse } from "./authUtils"; export const fetchProjects = async (activeFilter = "all", areaFilter = ""): Promise => { let url = `/api/projects`; const params = new URLSearchParams(); if (activeFilter !== "all") params.append("active", activeFilter); if (areaFilter) params.append("area_id", areaFilter); if (params.toString()) url += `?${params.toString()}`; const response = await fetch(url, { credentials: 'include', headers: { Accept: 'application/json' }, }); await handleAuthResponse(response, 'Failed to fetch projects.'); const data = await response.json(); return data.projects || data; }; export const fetchGroupedProjects = async (activeFilter = "all", areaFilter = ""): Promise> => { let url = `/api/projects`; const params = new URLSearchParams(); params.append("grouped", "true"); if (activeFilter !== "all") params.append("active", activeFilter); if (areaFilter) params.append("area_id", areaFilter); if (params.toString()) url += `?${params.toString()}`; const response = await fetch(url, { credentials: 'include', headers: { Accept: 'application/json' }, }); await handleAuthResponse(response, 'Failed to fetch projects.'); const data = await response.json(); return data; }; export const fetchProjectById = async (projectId: string): Promise => { const response = await fetch(`/api/project/${projectId}`, { credentials: 'include', headers: { Accept: 'application/json' }, }); await handleAuthResponse(response, 'Failed to fetch project details.'); return await response.json(); }; export const createProject = async (projectData: Partial): Promise => { const response = await fetch('/api/project', { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', }, body: JSON.stringify(projectData), }); await handleAuthResponse(response, 'Failed to create project.'); return await response.json(); }; export const updateProject = async (projectId: number, projectData: Partial): Promise => { const response = await fetch(`/api/project/${projectId}`, { method: 'PATCH', credentials: 'include', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', }, body: JSON.stringify(projectData), }); await handleAuthResponse(response, 'Failed to update project.'); return await response.json(); }; export const deleteProject = async (projectId: number): Promise => { const response = await fetch(`/api/project/${projectId}`, { method: 'DELETE', credentials: 'include', headers: { 'Accept': 'application/json', }, }); await handleAuthResponse(response, 'Failed to delete project.'); };