feat(kanban): adjuntos de archivos por card (issue 0128) #1
Reference in New Issue
Block a user
Delete Branch "issue/0128-files-attachments"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Issue
0128 — kanban: adjuntos de archivos
Resumen
Habilita el tab "Archivos" del
CardEditPanelcon tres vias de upload + render inline:CardFilesPanel): grid con thumb (imagenes) o chip + icono (PDFs/excel/csv/txt/...), botones subir y borrar.CardForm): drag&drop sobre el textarea → upload + insertao[name](url)en posicion del cursor.CardChatPanel): drag&drop + boton paperclip → upload + envia mensaje con la ref markdown.MessageBodyrenderiza la imagen inline o el link.Backend
014_card_files.sql(aditiva, idempotente): tabla conid, card_id, uploader_id, filename, mime, size, stored_path, source, created_at, deleted_at+ index activo.apps/kanban/uploads/<card_id>/<random>__<safe_filename>(gitignored).backend/files.go:POST /api/cards/{id}/files— multipart, max 10 MB.GET /api/cards/{id}/files— lista activos.GET /api/files/{id}— sirve binario,inlinepara image/pdf/text,attachmentresto.DELETE /api/files/{id}— soft delete.Frontend
CardFilesPanel,MessageBody.CardFormyCardChatPanelrecibenonFileUploaded+ (en form)cardIdpara activar drop-zone solo en cards persistidas.api.ts:listCardFiles,uploadCardFile(FormData),deleteCardFile.types.ts: tipoCardFile.Tests
e2e/files_smoke.sh(registrado enapp.md::e2e_checks): build → login → crear card → upload PNG → lista → serve (verifica Content-Type) → delete → lista vacia. ✅ Verde local.pnpm tsc --noEmit✅pnpm test✅ (3/3)pnpm build✅ (dist regenerado y commiteado).go test ./...⚠️ pre-existing failure enTestExecuteTool_MoveCard_BetweenColumns_OpensHistory(no introducido por este PR — reproducido en master limpio).Version
apps/kanban/app.mdbump 0.1.0 → 0.2.0 (minor: feature aditiva). Entrada nueva en## Capability growth log.DoD
.schema card_files).e2e/files_smoke.shverde.🤖 Generated with Claude Code
- migration 014_card_files: tabla con soft-delete + index activo - handlers POST/GET/DELETE en backend/files.go - routes /api/cards/{id}/files, /api/files/{id} - limite 10MB, storage en uploads/<card_id>/<random>__<safe>