feat: version 2.10.0 -- Notas en tarjetas, crear/editar en popup, compartir de solo lectura

Rediseno completo del modulo Notas (era lista inline, sin popup, sin compartir):
- Tarjetas con resumen del contenido en vez de lista vertical; la primera tarjeta siempre es
  un "+" para crear.
- Crear y editar se hacen en un DetailPopup (antes: textarea fijo arriba + edicion inline por
  tarjeta).
- Nueva tabla note_shares (migracion 019): compartir una nota con otro usuario ya registrado,
  siempre de solo lectura -- el dueño sigue siendo el unico que edita/borra/comparte (mismo
  patron que project_members pero sin rol ni invitacion por correo, ya que acá no hace falta).
  Quien recibe la nota la ve con "Compartida por {nombre}", sin ningun control de edicion.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Milton Gonzalez
2026-10-12 12:09:04 -05:00
parent dd8384fc88
commit 926215297e
14 changed files with 278 additions and 90 deletions
+6 -2
View File
@@ -1,14 +1,18 @@
import { Router } from 'express';
import { requireAuth } from '../../middleware/auth.js';
import { getNotes, postNote, putNote, deleteNote } from './controller.js';
import { getNotes, postNote, putNote, deleteNote, getNoteShares, postNoteShare, deleteNoteShare } from './controller.js';
const router = Router();
// Sin restriccion de rol: cualquier usuario autenticado tiene sus propias notas.
// Sin restriccion de rol: cualquier usuario autenticado tiene sus propias notas (y ve las que
// otros compartieron con el). Los permisos de compartir se resuelven en el service (dueño-only).
router.use(requireAuth);
router.get('/', getNotes);
router.post('/', postNote);
router.put('/:id', putNote);
router.delete('/:id', deleteNote);
router.get('/:id/shares', getNoteShares);
router.post('/:id/shares', postNoteShare);
router.delete('/:id/shares/:userId', deleteNoteShare);
export default router;