ROADMAP.md: - Ajout v2.4.0 (tags/user), v2.5.0 (admin panel), v2.6.0 (my account) - Ajout v2.7.0 (Gitea P1), v2.7.1 (private pages) - Roadmap future: v2.8.0 (Gitea P2), v2.9.0 (GitHub), v3.0.0 (Pro UX) CHANGELOG.md: - Entries v2.4.0 → v2.7.1 avec tous les détails - Structure Added/Fixed cohérente docs/ROADMAP.md (v3.0): - Phase 1-5 checkboxes mises à jour (45/52 items done) - Reste: GitHub OAuth, Quick switch, API tokens, sessions actives
197 lines
9.1 KiB
Markdown
197 lines
9.1 KiB
Markdown
# Changelog — FlowDeck
|
||
|
||
## v2.7.1 (2026-07-13) — Private Pages Gitea
|
||
|
||
### Added
|
||
- **Table `gitea_private_pages`**: pages FlowDeck locales liées à un projet Gitea (user_id, owner, repo)
|
||
- **API CRUD**: GET/POST/PUT/DELETE `/api/gitea/projects/{owner}/{repo}/private-pages`
|
||
- **UI**: liste des pages privées + éditeur titre/contenu dans le workspace Gitea
|
||
- **Sidebar**: lien "Private Pages" dans l'arborescence du workspace
|
||
- **Persistance**: les pages survivent au changement de workspace / session
|
||
|
||
### Fixed
|
||
- `get_user_repos(limit=100)` — `bruno/flowdeck` était tronqué à la page 2 (30 repos par défaut)
|
||
|
||
## v2.7.0 (2026-07-13) — Intégration Gitea Phase 1
|
||
|
||
### Added
|
||
- **OAuth2 Provider**: Gitea comme fournisseur OAuth2 pour FlowDeck (Client ID/Secret dans `.env`)
|
||
- **Redirect URI dynamique**: basé sur le header `Host` — fonctionne depuis `localhost` et `192.168.x.x`
|
||
- **Workspace listing**: 2 sections — My Workspaces + Gitea Projects (groupés par organisation)
|
||
- **Tabs par org**: All | user | org1 | org2 avec compteurs de projets
|
||
- **Barre de recherche**: filtrage live par nom/description dans Gitea Projects
|
||
- **Lazy tree**: arborescence chargée un dossier à la fois (API Gitea `GET /repos/{o}/{r}/contents`)
|
||
- **File viewer**: lecture fichiers Gitea avec décodage base64
|
||
- **Éditeur + commit**: modifier un fichier et commiter dans Gitea avec message personnalisé
|
||
- **Delete fichier**: suppression avec confirmation + commit
|
||
- **Arborescence dans le sidebar**: comme un workspace local, avec lazy-load des sous-dossiers
|
||
- **Settings › Integrations**: connecter/déconnecter Gitea (`GET /api/gitea/status`, `DELETE /api/gitea/disconnect`)
|
||
- **Fallback token admin**: opérations GET utilisent le token serveur si pas de token OAuth utilisateur
|
||
- **Write ops protégées**: commit et delete exigent un token OAuth utilisateur
|
||
- **Routes API**: `/api/gitea/orgs`, `/api/gitea/projects`, `/api/gitea/projects/{o}/{r}/tree`, `/api/gitea/projects/{o}/{r}/file`, `/api/gitea/projects/{o}/{r}/labels`
|
||
|
||
### Fixed
|
||
- Bouton "Register with Gitea" ne crée plus de session admin fantôme (fallback retiré)
|
||
- `_sidebar_data` gère le cookie `gitea:owner:repo` pour l'arborescence
|
||
|
||
## v2.6.0 (2026-07-13) — My Account & Auth Locale
|
||
|
||
### Added
|
||
- **Section My Account**: modifier username, full name, email, mot de passe
|
||
- **Toggle mot de passe**: bouton voir/cacher dans les formulaires login/register
|
||
- **Label "Email or username"**: login accepte les deux formats
|
||
- **Refresh cookie session**: après modification du compte, le cookie est mis à jour
|
||
- **Register avec Gitea**: boutons dynamiques "Login/Register with Gitea" selon l'onglet actif
|
||
|
||
### Fixed
|
||
- Session cookie non rafraîchi après `PUT /api/settings/account` (création nouvelle session)
|
||
- Input login `type="email"` → `type="text"` (accepte usernames non-email)
|
||
|
||
## v2.5.0 (2026-07-13) — Administration Avancée
|
||
|
||
### Added
|
||
- **Premier compte = admin automatique**: `is_admin=1` pour le premier utilisateur créé
|
||
- **Panneau Admin dans Settings**: visible uniquement pour les admins
|
||
- **Users & Roles**: créer/modifier/supprimer utilisateurs, changer rôles
|
||
- **Table `login_history`**: audit des connexions (IP, user_agent, timestamp)
|
||
- **Statistiques par utilisateur**: workspaces, pages, dernière connexion
|
||
- **API `/api/admin/*`**: users, stats, audit — protégées par `admin_required`
|
||
- **CSRF fix**: token CSRF dans toutes les requêtes admin (`adminFetch`)
|
||
|
||
## v2.4.0 (2026-07-13) — Tags Personnalisés par Utilisateur
|
||
|
||
### Added
|
||
- **Tags isolés par `user_id`**: chaque utilisateur voit uniquement ses propres tags
|
||
- **`UNIQUE(name, user_id)`**: remplace `UNIQUE(name)` dans la table `tags`
|
||
- **Migration**: tags existants assignés au premier utilisateur
|
||
- **Filtrage transparent**: l'API retourne les tags filtrés par `user_id` (session cookie)
|
||
|
||
### Fixed
|
||
- Affichage des tags dans le menu contextuel workspace (sync Alpine.js)
|
||
- Création de tag avec couleur persistée
|
||
- Fermeture auto du menu contextuel après ajout de tag
|
||
- Filtrage par tags: `toggleTagFilter()` appelle `doFilter()`
|
||
- Pastilles tags: fond = couleur du tag, sans rond séparé
|
||
|
||
## v2.3.0 (2026-07-12) — Multi-Vues Workspace & Preview Panel
|
||
|
||
### Added
|
||
- **Sélecteur de vue**: Tree, List, Details, Title, Content — 5 modes d'affichage
|
||
- **Vue List**: liste compacte avec Name, Type, Size, Modified
|
||
- **Vue Details**: table complète avec Path, Author, Tags
|
||
- **Vue Title**: grille de cartes avec icônes et métadonnées
|
||
- **Vue Content**: liste avec aperçu inline (taille ou nombre d'items)
|
||
- **Preview Panel**: panneau latéral droit avec contenu du fichier sélectionné
|
||
- Header avec icône + titre + bouton fermer
|
||
- Métadonnées (type, taille, date)
|
||
- Tags affichés en chips
|
||
- Corps avec rendu du contenu (blocks JSON → HTML, texte brut)
|
||
- Actions: Open, Rename, Delete
|
||
- Animation slide-in/out
|
||
- **Tri par date**: options Oldest/Newest dans le selecteur de tri
|
||
|
||
## v2.2.0 (2026-07-12) — Tags & Recherche Avancée
|
||
|
||
### Added
|
||
- **Tags**: système complet de tags avec tables `tags` + `page_tags`, CRUD API
|
||
- **API Tags**: `GET/POST/DELETE /api/local-workspace/items/{id}/tags`, `GET /api/local-workspace/tags`
|
||
- **Vue Table enrichie**: colonnes Name, Path, Size, Modified, Type, Author, Tags
|
||
- **Filtrage par tags**: barre de chips avec compteurs, clic pour filtrer
|
||
- **Ajout/retrait tags inline**: bouton + dans la table, chips avec × pour retirer
|
||
- **Tree endpoint enrichi**: chaque nœud retourne `size`, `size_display`, `created_at`, `updated_at`, `author`, `tags`
|
||
- **Filtre "Dossiers"**: nouveau chip Folders dans la barre de filtres
|
||
- **Auto-switch table**: quand recherche/filtre actif, passe en vue table automatiquement
|
||
|
||
## v2.1.1 (2026-07-12) — Fix Arborescence Workspace
|
||
|
||
### Fixed
|
||
- **Arborescence**: création fichier/dossier dans un sous-dossier met à jour l'arbre sans rechargement
|
||
- **parentFolder**: corrigé le bug où `parentFolder` était nullifié avant l'insertion dans l'arbre JS
|
||
- **displayTree**: nouvelle référence array après chaque mutation pour forcer le re-render Alpine.js
|
||
- **doSort/doFilter**: gèrent maintenant le cas où un filtre/tri est actif après création
|
||
|
||
## v2.1.0 (2026-07-10) — Intégrations Avancées
|
||
|
||
### Added
|
||
- **API publique**: `/api/v1` (collections, pages, my-tasks) avec token auth
|
||
- **Token generation**: `POST /api/v1/token`
|
||
- **Webhooks sortants**: `GET/POST/DELETE /workspace/webhooks` + dispatcher
|
||
- **PWA**: `GET /manifest.json`
|
||
- **CSRF**: `/api/v1` exempté
|
||
|
||
### Tests
|
||
- 73/73 passent (+6 tests v2.1)
|
||
|
||
## v2.0.0 (2026-07-10) — Multi-User Workspaces & Editor Complete
|
||
|
||
### Added
|
||
- **Workspaces**: tables `workspaces` + `workspace_members`, CRUD API, roles admin/editor/commenter/viewer
|
||
- **Comments**: table `comments` avec thread (parent_id), resolved
|
||
- **Page History**: table `page_history`, snapshot JSON
|
||
- **Favorites**: table `favorites`, add/remove/list
|
||
- **Templates**: `database_templates` + `page_templates`, apply API
|
||
- **CSV Import/Export**: `POST .../import/csv`, `GET .../export/csv`
|
||
- **Public Sharing**: `GET /workspace/public/{id}` (read-only, no auth)
|
||
|
||
### Tests
|
||
- 67/67 passent (+7 tests v2.0)
|
||
|
||
## v1.9.0 (2026-07-10) — My Tasks Dashboard
|
||
|
||
### Added
|
||
- **My Tasks**: `GET /my-tasks` (HTML), `GET /my-tasks/api` (JSON)
|
||
- Agrégation cross-collection, vues All/Today/Overdue/Next 7 days
|
||
|
||
## v1.8.0 (2026-07-10) — Sub-items & Dependencies
|
||
|
||
### Added
|
||
- **Sub-items**: parent_id auto-référence, GET/POST sub-items
|
||
- **Status aggregate**: `GET .../status-aggregate`
|
||
- **Dependencies**: `POST .../dependencies`, `POST .../check-deps`
|
||
|
||
## v1.7.0 (2026-07-10) — Vues Améliorées
|
||
|
||
### Added
|
||
- **View config**: `PUT /db/views/{id}/config` (group_by, card_size, cover, visible)
|
||
- **Save view as**: `POST /db/{id}/views/save-as`
|
||
- **List views**: `GET /db/{id}/views/api`
|
||
|
||
## v1.6.0 (2026-07-10) — Vues Manquantes
|
||
|
||
### Added
|
||
- **Calendar**: grid mensuel, navigation mois
|
||
- **Gallery**: cartes visuelles, card_size configurable
|
||
- **List**: vue compacte avec preview
|
||
- **Timeline**: barres horizontales Gantt
|
||
- **Table**: rendu SSR avec colonnes properties
|
||
- **View tabs**: navigation Table/Board/Calendar/Gallery/List/Timeline
|
||
|
||
## v1.5.0 (2026-07-10) — Relations & Rollups
|
||
|
||
### Added
|
||
- **FormulaEngine**: 19 fonctions (prop, if, concat, round, now, today, dateAdd, replace, ...)
|
||
- **RollupEngine**: 12 agrégations (count, sum, avg, min, max, range, unique, percent_checked)
|
||
- **Relation**: lien bidirectionnel, API create/link
|
||
|
||
## v1.4.0 (2026-07-10) — Propriétés Avancées
|
||
|
||
### Added
|
||
- **Table `collection_properties`**: 21 types Notion
|
||
- **Service `property_types.py`**: validation, formatage, auto-values
|
||
|
||
## v1.3.0 (2026-07-10) — Database Concept
|
||
|
||
### Added
|
||
- **Tables**: `collections`, `collection_pages`, `collection_views`
|
||
- **Router `/db`**: CRUD collections + pages (16 endpoints)
|
||
- **GiteaBoardCompat**: adaptateur boards legacy → Collections
|
||
|
||
## v1.0.0 (2026-07-08) — Production
|
||
|
||
### Added
|
||
- FastAPI lifespan, 28 tests, CI/CD Gitea Actions, CSS 31KB, 10 templates
|
||
- 5 vues: Kanban, Table, Status Overview, Team Load, Detailed Board
|
||
- Filtres cumulables AND, tri multi-critères
|
||
- Card detail modal, checklists, commentaires Gitea
|
||
- Propriétés custom, AI keywords, sync API
|