feat(epic8+docx): complete Inbound Webhooks CRM Inbox + Full DOCX Document Management
EPIC 8 - INBOUND WEBHOOKS & CRM INBOX✅ ======================================== Backend: - Add is_read field to memos table with auto-migration - Inbound webhook endpoint: POST /inbound_webhooks/{workspace_id} - Inbox endpoints: GET /users/{id}/inbox/unread_count, GET /users/{id}/inbox/memos - Webhook payload formatting (title+body → markdown, arbitrary → bullet list) - Optional secret verification via X-Webhook-Secret header - Database indexes: idx_memos_is_read, idx_memos_workspace Frontend: - Inboxes.tsx: Two tabs (Notifications + Unread Memos) - useInboxUnreadCount hook with 60s refetch - useMarkMemoAsRead mutation - Navigation badge: notifications + unread memos count - i18n: inbox.* keys (en/vi) DOCUMENT MANAGEMENT (DOCX/PDF)🆕 ================================== Backend: - New table: cuccu_documents with full schema - DocumentService: upload, list, get, update, delete, process, import_to_memo - AI enhancement via OpenAI (tag extraction + summarization) - python-docx integration for text extraction - Status workflow: PENDING → PROCESSING → COMPLETED/FAILED - API routes: /documents/upload, /documents, /documents/{id}, /documents/{id}/process, /documents/{id}/import Frontend: - New page: DocumentsPage (route: /app/documents) - Components: UploadArea, DocumentList, DocumentCard, PreviewPanel - Hooks: useDocuments, useDocumentUpload, useDocumentProcess, useDocumentImport - AI enhancement panel with toggles (extract tags, generate summary) - Drag-and-drop file upload with validation - Status badges, tag display, content preview - Workspace isolation support - Full i18n support (en/vi) Files changed: - Backend: 15+ files (new: api/documents/, common/sqlite_client.py updates, schemas, services, config) - Frontend: 20+ files (new: components/Documents/, hooks/useDocuments.ts, docxService.ts, pages/DocumentsPage.tsx) - Tests: test_inbox.py (5 tests passing) - Plan docs: epic-8-inbound-webhooks-crm-inbox-done.md, docx-frontend-detailed-plan.md🤖 Generated with Claude Code
Showing
CLAUDE.md
0 → 100644
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
File added
File added
File added
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
memos @ 583c3d24
This diff is collapsed.