f96391d360
- Un proyecto puede tener uno o mas administradores (role_in_project= 'admin' en project_members), independiente del rol global del usuario. Nuevo PUT /api/projects/:id/members/:userId/role; canWriteProject lo reconoce ademas del comportamiento previo (admin/superadmin/it_manager global, o project_lead miembro). UI: casilla al agregar miembro + boton de escudo para promover/degradar (nunca toca al Dueño). - Menu "Configuracion" (apariencia, catalogos, SMTP) visible y accesible solo para el superadmin: oculto en el nav y con guarda en la ruta /configuracion para quien la teclee directo. Escritura de catalogos restringida de [superadmin, admin] a solo superadmin para que el backend sea consistente con la UI. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
17 lines
1.1 KiB
JavaScript
17 lines
1.1 KiB
JavaScript
import { api } from './api.js';
|
|
|
|
export const listProjects = (filters = {}) => {
|
|
const qs = new URLSearchParams(Object.entries(filters).filter(([, v]) => v)).toString();
|
|
return api.get(`/projects${qs ? `?${qs}` : ''}`);
|
|
};
|
|
export const getProject = (id) => api.get(`/projects/${id}`);
|
|
export const createProject = (data) => api.post('/projects', data);
|
|
export const updateProject = (id, data) => api.put(`/projects/${id}`, data);
|
|
export const deleteProject = (id) => api.delete(`/projects/${id}`);
|
|
export const restoreProject = (id) => api.post(`/projects/${id}/restore`);
|
|
export const permanentlyDeleteProject = (id) => api.delete(`/projects/${id}/permanent`);
|
|
export const addProjectMember = (id, userId, roleInProject) => api.post(`/projects/${id}/members`, { userId, roleInProject });
|
|
export const setProjectMemberAdmin = (id, userId, admin) => api.put(`/projects/${id}/members/${userId}/role`, { admin });
|
|
export const removeProjectMember = (id, userId) => api.delete(`/projects/${id}/members/${userId}`);
|
|
export const getGantt = (id) => api.get(`/projects/${id}/gantt`);
|