Initial commit: Ressourcenplanung-App
Vue 3 + Vite Frontend und Node/Express + SQLite Backend für Projekt-, Aufgaben-, Mitarbeiter- und Teamverwaltung inkl. Gantt-Zeitplan und Auslastungs-Heatmap.
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
async function request(method, url, body) {
|
||||
const res = await fetch(url, {
|
||||
method,
|
||||
headers: body ? { 'Content-Type': 'application/json' } : undefined,
|
||||
body: body ? JSON.stringify(body) : undefined,
|
||||
});
|
||||
if (!res.ok) {
|
||||
const text = await res.text().catch(() => '');
|
||||
throw new Error(`${method} ${url} fehlgeschlagen: ${res.status} ${text}`);
|
||||
}
|
||||
if (res.status === 204) return null;
|
||||
return res.json();
|
||||
}
|
||||
|
||||
export const api = {
|
||||
// employees
|
||||
getEmployees: () => request('GET', '/api/employees'),
|
||||
createEmployee: (data) => request('POST', '/api/employees', data),
|
||||
updateEmployee: (id, data) => request('PUT', `/api/employees/${id}`, data),
|
||||
deleteEmployee: (id) => request('DELETE', `/api/employees/${id}`),
|
||||
|
||||
// teams
|
||||
getTeams: () => request('GET', '/api/teams'),
|
||||
createTeam: (data) => request('POST', '/api/teams', data),
|
||||
updateTeam: (id, data) => request('PUT', `/api/teams/${id}`, data),
|
||||
deleteTeam: (id) => request('DELETE', `/api/teams/${id}`),
|
||||
addTeamMember: (teamId, employeeId) =>
|
||||
request('POST', `/api/teams/${teamId}/members`, { employee_id: employeeId }),
|
||||
removeTeamMember: (teamId, employeeId) =>
|
||||
request('DELETE', `/api/teams/${teamId}/members/${employeeId}`),
|
||||
|
||||
// projects & tasks
|
||||
getProjects: () => request('GET', '/api/projects'),
|
||||
createProject: (data) => request('POST', '/api/projects', data),
|
||||
updateProject: (id, data) => request('PUT', `/api/projects/${id}`, data),
|
||||
deleteProject: (id) => request('DELETE', `/api/projects/${id}`),
|
||||
|
||||
createTask: (data) => request('POST', '/api/tasks', data),
|
||||
updateTask: (id, data) => request('PUT', `/api/tasks/${id}`, data),
|
||||
deleteTask: (id) => request('DELETE', `/api/tasks/${id}`),
|
||||
addDependency: (taskId, dependsOnId) =>
|
||||
request('POST', `/api/tasks/${taskId}/dependencies`, { depends_on_task_id: dependsOnId }),
|
||||
removeDependency: (taskId, dependsOnId) =>
|
||||
request('DELETE', `/api/tasks/${taskId}/dependencies/${dependsOnId}`),
|
||||
|
||||
// assignments
|
||||
createAssignment: (data) => request('POST', '/api/assignments', data),
|
||||
updateAssignment: (id, data) => request('PUT', `/api/assignments/${id}`, data),
|
||||
deleteAssignment: (id) => request('DELETE', `/api/assignments/${id}`),
|
||||
|
||||
// utilization
|
||||
getUtilization: (params = {}) => {
|
||||
const qs = new URLSearchParams(params).toString();
|
||||
return request('GET', `/api/utilization${qs ? `?${qs}` : ''}`);
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user