feat: export Markdown notes (ARQ/Redis) + backup/restore BDD — v0.5.2
- Volume data/ (bind mount ./data) remplace le volume uploads nommé
data/notes/ → .md auto-générés, data/uploads/ → médias, data/backup/ → dumps
- Service Redis (redis:7-alpine) + worker ARQ (backend-worker)
- notes_markdown.py : frontmatter YAML + contenu + pièces jointes (liens relatifs)
Nom : YYYY-MM-DD_slug-titre_shortid.md, rotation si titre modifié
- api/notes.py : publie export_note_markdown / remove_note_markdown sur Redis
après chaque create / update / delete / add_attachment / delete_attachment
- api/admin.py : POST /backup, GET /backups, POST /restore/{filename} (pg_dump/pg_restore)
- Backend Dockerfile : postgresql-client ; requirements : arq==0.26.1
- ConfigPage : section "Base de données" avec sauvegarde + liste + restauration
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+34
-5
@@ -177,7 +177,36 @@
|
||||
|
||||
---
|
||||
|
||||
## Phase 5 — Scan produits + enrichissement catalogue
|
||||
## Phase 5 — Export Markdown notes + Backup BDD ✅
|
||||
|
||||
**Objectif** : persistance double des notes (BDD source de vérité + fichiers Markdown partagés), infrastructure Redis, backup/restore depuis l'interface.
|
||||
|
||||
### Architecture
|
||||
- Volume Docker `./data/` (bind mount) remplace le volume nommé `uploads`
|
||||
- `data/notes/` — fichiers `.md` auto-générés
|
||||
- `data/uploads/` — médias (photos, audio)
|
||||
- `data/backup/` — dumps PostgreSQL
|
||||
|
||||
### Backend
|
||||
- [x] Service Redis : `redis:7-alpine` dans docker-compose
|
||||
- [x] Worker ARQ (`backend-worker`) : consomme la queue `notes:markdown`, même image que backend
|
||||
- [x] `app/core/redis.py` — pool ARQ, `enqueue()` best-effort (silence si Redis down)
|
||||
- [x] `app/workers/notes_worker.py` — tâches `export_note_markdown` + `remove_note_markdown`
|
||||
- [x] `app/services/notes_markdown.py` — génère le frontmatter YAML + contenu + pièces jointes (liens relatifs `../uploads/…`)
|
||||
- Nom de fichier : `YYYY-MM-DD_slug-du-titre_shortid.md`
|
||||
- Rotation automatique si titre modifié (recherche par `*_{shortid}.md`)
|
||||
- [x] `app/api/notes.py` — publie sur Redis après create / update / delete / add_attachment / delete_attachment
|
||||
- [x] `app/api/admin.py` — `POST /api/admin/backup`, `GET /api/admin/backups`, `POST /api/admin/restore/{filename}`
|
||||
- [x] `backend/Dockerfile` — ajout `postgresql-client` pour pg_dump / pg_restore
|
||||
- [x] `requirements.txt` — ajout `arq==0.26.1`
|
||||
|
||||
### Frontend
|
||||
- [x] `frontend/src/api/admin.ts` — client TypeScript backup/restore
|
||||
- [x] Page Config — section "Base de données" : bouton sauvegarde + liste des dumps + bouton Restaurer par fichier
|
||||
|
||||
---
|
||||
|
||||
## Phase 6 — Scan produits + enrichissement catalogue
|
||||
|
||||
**Objectif** : scan code-barres depuis mobile, auto-remplissage depuis OpenFoodFacts.
|
||||
|
||||
@@ -203,7 +232,7 @@
|
||||
|
||||
---
|
||||
|
||||
## Phase 6 — Service OCR (conteneur dédié)
|
||||
## Phase 7 — Service OCR (conteneur dédié)
|
||||
|
||||
**Objectif** : OCR partagé, prérequis pour shopping avancé et notes avancées.
|
||||
|
||||
@@ -214,7 +243,7 @@
|
||||
|
||||
---
|
||||
|
||||
## Phase 7 — Shopping avancé (OCR + suivi prix)
|
||||
## Phase 8 — Shopping avancé (OCR + suivi prix)
|
||||
|
||||
### Backend
|
||||
- [ ] `POST /api/shopping/ocr/price-tag` — photo étiquette → extraction prix
|
||||
@@ -228,7 +257,7 @@
|
||||
|
||||
---
|
||||
|
||||
## Phase 8 — MCP Server
|
||||
## Phase 9 — MCP Server
|
||||
|
||||
**Objectif** : exposer les outils HomeHub aux agents IA (Hermes, Claude, etc.).
|
||||
|
||||
@@ -262,5 +291,5 @@
|
||||
## Ordre de développement
|
||||
|
||||
```
|
||||
Phase 1 ✅ → Phase 2 ✅ → Phase 3 ✅ → Phase 4 ✅ → Phase 4b ✅ → Phase 5 (Scan) → Phase 6 (OCR) → Phase 7 (Shopping avancé) → Phase 8 (MCP)
|
||||
Phase 1 ✅ → Phase 2 ✅ → Phase 3 ✅ → Phase 4 ✅ → Phase 4b ✅ → Phase 5 ✅ → Phase 6 (Scan) → Phase 7 (OCR) → Phase 8 (Shopping avancé) → Phase 9 (MCP)
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user