feat: version 4.4.0 -- Calendario de reuniones
Menu Calendario (Mes/Semana/Dia/Agenda) para agendar reuniones con participantes internos y externos, RSVP, vinculo a proyecto, vencimientos de actividades, invitaciones iCalendar por correo, recurrencia con excepciones, recordatorios in-app y aviso de choques. Migracion 034_meetings.sql. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -31,6 +31,29 @@ catálogos, notas, tareas recurrentes, equipos y SMTP exigen `editVersion` (ente
|
||||
obtenido de la lectura correspondiente como `edit_version`. El `PUT /api/company` exige el mismo
|
||||
campo en multipart. La API responde `428` si falta o es inválido y `409` si otro guardado cambió
|
||||
el registro. En empresa y SMTP la respuesta `GET` incluye `edit_version`.
|
||||
Las reuniones siguen el mismo contrato (`PUT /api/meetings/:id`).
|
||||
|
||||
## Calendario de reuniones (v4.4.0)
|
||||
|
||||
Todas las rutas requieren JWT y módulo `calendar`. Las fechas son `YYYY-MM-DD HH:mm:ss` en hora
|
||||
civil `America/Guayaquil` (UTC-5). `GET /api/meetings?from=&to=&page=&pageSize=` devuelve
|
||||
`{items,total,page,pageSize}` con ocurrencias expandidas (`occurrence_start`, `occurrence_end`);
|
||||
rango máximo 93 días y hasta 1500 ocurrencias por página (predeterminado: 1500).
|
||||
`GET /api/meetings/activities?from=&to=` devuelve hasta 1000 vencimientos legibles.
|
||||
|
||||
- `GET /api/meetings/:id`: detalle, participantes con RSVP y excepciones.
|
||||
- `POST /api/meetings`: `{title,description,startsAt,endsAt,allDay,location,videoUrl,projectId,reminderMinutes,participantUserIds,externalEmails,recurrence}`.
|
||||
- `PUT /api/meetings/:id`: mismo cuerpo con `editVersion` (aplica a toda la serie).
|
||||
- `DELETE /api/meetings/:id`: **cancelación lógica** de toda la serie, con `METHOD:CANCEL`.
|
||||
- `POST /api/meetings/:id/occurrences/:date/cancel`: excluye una ocurrencia; `date` URL encoded.
|
||||
- `PUT /api/meetings/:id/rsvp`: `{status:"accepted"|"declined"|"tentative"}`; solo participante propio.
|
||||
|
||||
`recurrence` es `null` o `{frequency:"daily"|"weekly"|"monthly",interval,weekdays,until,count}`;
|
||||
`weekdays` usa 0=lunes a 6=domingo. Se exige exactamente uno de `until` o `count` y máximo
|
||||
365 ocurrencias. Cuando hay choque de participantes, POST/PUT devuelve
|
||||
`{requiresConfirmation:true,warnings:[nombres]}` sin guardar; reenviar con
|
||||
`confirmConflicts:true` confirma. Correo y avisos se despachan en segundo plano; sin SMTP el correo
|
||||
se registra en consola de desarrollo. Antes de usar estas rutas se debe aplicar la migración 034.
|
||||
|
||||
## Endpoints principales
|
||||
|
||||
@@ -66,7 +89,7 @@ el registro. En empresa y SMTP la respuesta `GET` incluye `edit_version`.
|
||||
- `POST /api/users/:id/approve` — `{ roleId?, departmentId?, editVersion }`, solo sobre usuarios `pending_approval`; también rechaza cambios concurrentes con `409`.
|
||||
- `POST /api/users/:id/reject` — borra al usuario `pending_approval` (se audita el email antes)
|
||||
- `GET /api/users/:id/modules` · `PUT /api/users/:id/modules` `{ modules: [...] }` — solo Superadministrador.
|
||||
Módulos: `projects`, `recurring_tasks`, `notes`, `vault`, `devices`, `organization`. No aplica a
|
||||
Módulos: `projects`, `calendar`, `recurring_tasks`, `notes`, `vault`, `devices`, `organization`. No aplica a
|
||||
un superadmin (`400`). `GET /api/auth/me` y el login devuelven `modules` (efectivos del usuario).
|
||||
Las rutas de un módulo deshabilitado responden `403`; la búsqueda global devuelve vacío.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user