- NOTION_DATABASE_TASKS_GUIDE.md: réécriture complète (822→~750 lignes) - 16 sections: anatomie DB, 22 propriétés, relations/rollups, formules - 10 Database Views détaillées, filtres/tris/groupes - Data Sources & Linked Databases, Templates, Dashboards - Tasks, Sub-items, Dependencies, Sprints, My Tasks - Modèle de données complet (tables existantes + 5 nouvelles) - Plan d'implémentation en 5 phases (v4.1–v4.5) - ROADMAP: v4.1–v4.5 redéfini = Database/Views/Tasks - v4.1: Data Sources & Linked - v4.2: Templates & Dashboards - v4.3: 10 Database Views complètes - v4.4: Tasks, Sub-items & Dependencies - v4.5: Sprints & My Tasks - Versions suivantes renumérotées (v4.6→v6.0) - Sources: Guide_Complet_Notion_database.md + 15 URLs docs officielles Notion
773 lines
33 KiB
Markdown
773 lines
33 KiB
Markdown
# Guide Technique — Databases, Views & Tasks Notion → FlowDeck
|
||
|
||
> **Version:** 2.0 · **Date:** 2026-07-20
|
||
> **Auteur:** Hermes-Deepin · **Cible:** FlowDeck v4.0.x+
|
||
> **Sources:** [Notion Help — Databases](https://www.notion.com/help/category/databases), [Database Views](https://www.notion.com/help/category/database-views), [Tasks & Dependencies](https://www.notion.com/help/tasks-and-dependencies), [Sprints](https://www.notion.com/help/sprints), [Data Sources](https://www.notion.com/help/data-sources-and-linked-databases), [docs/Guide_Complet_Notion_database.md](Guide_Complet_Notion_database.md)
|
||
|
||
---
|
||
|
||
## Table des matières
|
||
|
||
1. [Introduction : les 3 piliers Notion](#1-introduction)
|
||
2. [Anatomy d'une Database Notion](#2-anatomy-database)
|
||
3. [Les propriétés (Database Properties)](#3-propriétés)
|
||
4. [Les relations et rollups](#4-relations-rollups)
|
||
5. [Les formules (Formulas)](#5-formules)
|
||
6. [Templates de database](#6-templates)
|
||
7. [Les Database Views (10 types)](#7-views)
|
||
8. [Filtres, tris & regroupements](#8-filtres-tris-groupes)
|
||
9. [Data Sources & Linked Databases](#9-data-sources)
|
||
10. [Tasks, Sub-items, Dependencies & Sprints](#10-tasks)
|
||
11. [My Tasks — vue unifiée](#11-my-tasks)
|
||
12. [Dashboards](#12-dashboards)
|
||
13. [Modèle de données FlowDeck](#13-modèle-de-données)
|
||
14. [Plan d'implémentation (5 phases)](#14-plan-implémentation)
|
||
15. [Limites Notion à respecter](#15-limites)
|
||
16. [Références](#16-références)
|
||
|
||
---
|
||
|
||
## 1. Introduction : les 3 piliers Notion {#1-introduction}
|
||
|
||
Notion repose sur 3 concepts fondamentaux interconnectés :
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ NOTION │
|
||
│ │
|
||
│ ┌─────────────────────┐ ┌─────────────────────┐ │
|
||
│ │ DATABASES │ │ DATABASE VIEWS │ │
|
||
│ │ │ │ │ │
|
||
│ │ • Collections de │ │ • 10 types de vues │ │
|
||
│ │ pages │ │ • Filtres/Tris/ │ │
|
||
│ │ • Propriétés typées │ │ Groupes │ │
|
||
│ │ • Relations/Rollups │ │ • Layouts & │ │
|
||
│ │ • Formules │ │ Dashboards │ │
|
||
│ │ • Templates │ │ • Charts/Graphiques │ │
|
||
│ └──────────┬──────────┘ └──────────┬──────────┘ │
|
||
│ │ │ │
|
||
│ └────────┬───────────────┘ │
|
||
│ ▼ │
|
||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||
│ │ TASKS │ │
|
||
│ │ • Sub-items (parent_id auto-référencé) │ │
|
||
│ │ • Dependencies (bloque/bloqué par) │ │
|
||
│ │ • Sprints (planification agile) │ │
|
||
│ │ • My Tasks (vue unifiée cross-databases) │ │
|
||
│ └─────────────────────────────────────────────────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### État actuel FlowDeck (v4.0.x)
|
||
|
||
```
|
||
✅ Workspaces → workspaces, workspace_members
|
||
✅ Pages + Arbre → pages (parent_id, sort_order)
|
||
✅ Block Editor → content_format='blocks', JSON blocks
|
||
✅ Sidebar Notion → Recents, Favorites, Shared, Published, Private
|
||
✅ Library multi-onglets → library.html + /api/library/*
|
||
✅ Share / Publish → page_shares, share_mode, publish_slug
|
||
✅ Recents tracking → recents table
|
||
✅ Tags → tags, page_tags
|
||
✅ Gitea / GitHub OAuth → auth_method, OAuth tokens
|
||
⚠️ Collections (ébauche) → collections, collection_pages
|
||
⚠️ Collection Properties (ébauche) → collection_properties (21 types définis)
|
||
⚠️ Collection Views (ébauche) → collection_views (structure partielle)
|
||
❌ Database multi-sources → ABSENT (data_sources concept)
|
||
❌ Full-page vs Inline databases → ABSENT
|
||
❌ Charts, Forms, Maps, Feed → ABSENT
|
||
❌ Dashboards → ABSENT (combinaison de vues)
|
||
❌ Templates de database → ABSENT (database_templates ébauche)
|
||
❌ Tasks / Sub-items → ABSENT
|
||
❌ Dependencies / Sprints → ABSENT
|
||
❌ My Tasks (cross-DB unifié) → ABSENT (/my-tasks ébauche statique)
|
||
```
|
||
|
||
---
|
||
|
||
## 2. Anatomy d'une Database Notion {#2-anatomy-database}
|
||
|
||
### 2.1 Concept fondamental
|
||
|
||
Une **Database Notion** est une **collection de pages**, chaque ligne/élément étant une **page Notion complète** — ouvrable et éditable comme n'importe quelle page (texte, images, sous-pages, embeds…).
|
||
|
||
| Concept | Définition |
|
||
|---------|-----------|
|
||
| **Database** | Conteneur global : 1+ data sources + 1+ vues |
|
||
| **Data source** | Un ensemble de pages liées. Chaque DB a ≥ 1 source |
|
||
| **Page / Item** | Une ligne = une page Notion complète, éditable |
|
||
| **Property** | Champ de métadonnées (date, statut, personne…) |
|
||
| **View** | Fenêtre d'affichage sur les données (table, board, etc.) |
|
||
|
||
### 2.2 Full-page vs Inline
|
||
|
||
| Type | Comportement |
|
||
|------|-------------|
|
||
| **Full-page** | Apparaît comme une page dans la sidebar, peut être verrouillée |
|
||
| **Inline** | Intégrée dans une page existante, contrôles masqués au survol, peut être étendue |
|
||
|
||
**Transformations :**
|
||
- Inline → Full-page : cliquer sur **⤡** (étendre) ou glisser vers la sidebar
|
||
- Full-page → Inline : glisser dans une autre page → `⋮⋮` → Turn into inline
|
||
|
||
### 2.3 Création d'une database
|
||
|
||
1. **New page** → sous *Get started with*, sélectionner **Table** (ou `•••` → Database)
|
||
2. **Slash command** : `/database` dans une page existante
|
||
3. **Options** : New empty / Link to existing data / Build with AI / Template
|
||
|
||
**Premières étapes :**
|
||
1. Créer une page → bouton **New page**
|
||
2. Ajouter une propriété → **Add property**
|
||
3. Ajouter une vue → par défaut Table view, puis autant que souhaité
|
||
4. Éditer la vue → nom, layout, propriétés visibles, filtres, tris, groupes
|
||
|
||
---
|
||
|
||
## 3. Les propriétés (Database Properties) {#3-propriétés}
|
||
|
||
### 3.1 Types disponibles (20 types)
|
||
|
||
| # | Propriété | Usage | Value format |
|
||
|---|-----------|-------|-------------|
|
||
| 1 | **Text** | Texte formaté (notes, descriptions) | String |
|
||
| 2 | **Number** | Nombre, format devise ou barre de progression | Float + format |
|
||
| 3 | **Select** | Une option parmi une liste de tags | String |
|
||
| 4 | **Status** | Progression : To-do, In Progress, Complete | String |
|
||
| 5 | **Multi-Select** | Plusieurs tags/catégories | Array[String] |
|
||
| 6 | **Date** | Date ou plage de dates (heure optionnelle) | ISO 8601 / range |
|
||
| 7 | **Formula** | Calculs basés sur d'autres propriétés | Expression → Dynamic |
|
||
| 8 | **Relation** | Connexion entre databases | FK référence |
|
||
| 9 | **Rollup** | Agrégation d'infos via une relation | Dynamic (count/sum/avg…) |
|
||
| 10 | **Person** | Assigner une personne/groupe | User ref |
|
||
| 11 | **File** | Upload de fichiers et images | File metadata |
|
||
| 12 | **Checkbox** | Booléen | Boolean |
|
||
| 13 | **URL** | Lien web cliquable | String (URL) |
|
||
| 14 | **Email** | Adresse email (ouvre client mail) | String (email) |
|
||
| 15 | **Phone** | Numéro de téléphone | String (phone) |
|
||
| 16 | **Created time** | Auto-généré, non éditable | Timestamp |
|
||
| 17 | **Created by** | Auto-généré, non éditable | User ref |
|
||
| 18 | **Last edited time** | Auto-mis à jour | Timestamp |
|
||
| 19 | **Last edited by** | Auto-mis à jour | User ref |
|
||
| 20 | **Button** | Automatiser des actions (v5.0) | Action config |
|
||
| 21 | **ID** | Identifiant unique, immuable | Auto-incrément |
|
||
| 22 | **Place** | Localisation (services, nom, adresse) | Geo + text |
|
||
|
||
> ⚠️ Limite : 500 propriétés max par database.
|
||
|
||
### 3.2 Gestion des propriétés
|
||
|
||
- **Créer** : `Add property` ou `+` à droite → nom + type
|
||
- **Éditer** : menu ⚙️ → Edit properties
|
||
- **Masquer** : cliquer l'icône 👁️
|
||
- **Réordonner** : drag & drop
|
||
- **Dupliquer** : `•••` → Duplicate property (ne duplique pas les valeurs)
|
||
- **Supprimer** : supprime définitivement la propriété et toutes ses valeurs
|
||
|
||
---
|
||
|
||
## 4. Relations & Rollups {#4-relations-rollups}
|
||
|
||
### 4.1 Relations
|
||
|
||
Une **relation** connecte les pages de deux databases (ou d'une database à elle-même).
|
||
|
||
```
|
||
┌──────────────────────┐ ┌──────────────────────┐
|
||
│ Customers │ │ Deals │
|
||
│ │────────▶│ │
|
||
│ id, name, email │ related │ id, amount, stage │
|
||
│ │◀────────│ │
|
||
└──────────────────────┘ └──────────────────────┘
|
||
```
|
||
|
||
**Config :**
|
||
- **1-way** (par défaut) ou **2-way** (bidirectionnelle)
|
||
- **Limit** : nombre de pages liées (1 ou illimité)
|
||
- **Property visibility** : Always show / Hide when empty / Always hide
|
||
- **Relation vers soi-même** : ex. tâches liées entre elles (dependencies)
|
||
|
||
### 4.2 Rollups
|
||
|
||
Un **rollup** agrège les données issues d'une relation selon une fonction :
|
||
|
||
| Fonction | Description |
|
||
|----------|-------------|
|
||
| `count` | Nombre d'éléments liés |
|
||
| `count values` | Nombre de valeurs non vides |
|
||
| `count unique values` | Nombre de valeurs uniques |
|
||
| `count empty` | Nombre de valeurs vides |
|
||
| `percent empty` | % de valeurs vides |
|
||
| `percent not empty` | % de valeurs non vides |
|
||
| `sum` | Somme |
|
||
| `average` | Moyenne |
|
||
| `min` / `max` | Valeur min / max |
|
||
| `range` | Intervalle (max - min) |
|
||
| `earliest date` / `latest date` | Date la plus ancienne / récente |
|
||
| `show original` | Affiche la valeur brute |
|
||
|
||
> ⚠️ **Pas de rollup d'un rollup** (anti-boucle).
|
||
|
||
---
|
||
|
||
## 5. Formules (Formulas) {#5-formules}
|
||
|
||
Une propriété **Formula** exécute des calculs via le langage de formules Notion.
|
||
|
||
### 5.1 Éléments du langage
|
||
|
||
```
|
||
Properties : prop("Nom")
|
||
Math : + - * / % ^
|
||
Booléens : true, false
|
||
Comparaison : ==, !=, <, <=, >, >=
|
||
Logiques : and, or, not
|
||
Ternaire : X ? Y : Z (équivaut à if(X, Y, Z))
|
||
```
|
||
|
||
### 5.2 Fonctions courantes
|
||
|
||
`if()`, `ifs()`, `empty()`, `length()`, `substring()`, `contains()`, `replace()`, `lower()`, `upper()`, `style()`, `format()`, `formatDate()`, `now()`, `today()`, `dateAdd()`, `dateBetween()`, `.first()`, `.last()`, `.every()`, `.filter()`, `.map()`, `.at()`, `round()`, `ceil()`, `floor()`, `min()`, `max()`, `sum()`, `mean()`, `median()`, `join()`, `toNumber()`, `toString()`, `concat()`, `id()`, `let()`…
|
||
|
||
### 5.3 Exemples
|
||
|
||
```notion
|
||
// Due date = date de début + 2 semaines
|
||
dateAdd(Start Date, 2, "week")
|
||
|
||
// Marquer "Overdue" en rouge/gras si dépassé et non terminé
|
||
if(and(now() > Due Date, Status != "Done"), style("Overdue", "red", "b"), "")
|
||
|
||
// Nombre de tâches liées
|
||
Tasks.length()
|
||
|
||
// Priorité calculée à partir de l'impact et l'effort
|
||
if(and(Impact == "High", Effort == "Low"), "🔥 Quick win", "Normal")
|
||
|
||
// Calcul du CA journalier
|
||
prop("Prix unitaire") * prop("Quantité")
|
||
```
|
||
|
||
---
|
||
|
||
## 6. Templates de database {#6-templates}
|
||
|
||
Permettent de répliquer une structure de page en un clic.
|
||
|
||
**Créer :**
|
||
1. Flèche déroulante à côté de **New** → **+ New template**
|
||
2. Nommer le template
|
||
3. Prédéfinir propriétés (ex. Priority = P1) et contenu (texte, images, embeds)
|
||
|
||
**Fonctionnalités :**
|
||
- **Récurrence** : quotidienne, hebdomadaire, mensuelle, annuelle
|
||
- **Nesting max** : 3 niveaux (sauf template quotidien → pas de nesting)
|
||
|
||
> ⚠️ Templates propres à chaque database. Ne pas pré-remplir les relations dans un template (sinon toutes les pages pointeront sur la même cible).
|
||
|
||
---
|
||
|
||
## 7. Les Database Views {#7-views}
|
||
|
||
Une **vue** est une fenêtre d'affichage sur les données. Chaque vue possède ses propres filtres, tris, groupes et propriétés visibles — **indépendants** de la database source.
|
||
|
||
### 7.1 Les 10 types de vues
|
||
|
||
| # | Vue | Idéal pour | Caractéristique |
|
||
|---|-----|-----------|-----------------|
|
||
| 1 | **Table** | Données structurées, aperçu complet | Lignes × colonnes, calculs en bas de colonne |
|
||
| 2 | **Board (Kanban)** | Workflows, gestion de tâches | Colonnes regroupées par propriété, cartes |
|
||
| 3 | **Timeline** | Planification, dépendances | Chronologie horizontale type Gantt |
|
||
| 4 | **Calendar** | Événements, deadlines | Basé sur propriété Date, vues jour/semaine/mois |
|
||
| 5 | **List** | Notes, docs, lecture simple | Minimaliste et épurée |
|
||
| 6 | **Gallery** | Moodboards, portfolios | Cartes visuelles avec aperçu image |
|
||
| 7 | **Chart** | Analyse, reporting | Barres, courbes, camemberts, donuts, scatter |
|
||
| 8 | **Form** | Collecte de données, sondages | Formulaire de saisie → crée pages |
|
||
| 9 | **Map** | Lieux, adresses | Géolocalisation (propriété Place) |
|
||
| 10 | **Feed** | Mises à jour, annonces | Flux de contenu type actualité |
|
||
|
||
### 7.2 Ajouter une vue
|
||
|
||
1. Cliquer **+** à côté des onglets de vues existants
|
||
2. Choisir le type de layout
|
||
3. Donner un nom
|
||
4. Configurer : propriétés visibles, filtres, tris, groupes, layout
|
||
|
||
### 7.3 Layouts personnalisables
|
||
|
||
Chaque vue possède des options de **layout** :
|
||
- **Card size** : small / medium / large (board, gallery)
|
||
- **Card preview** : page cover / page content / none
|
||
- **Properties** : choisir lesquelles afficher sur les cartes
|
||
- **Open pages in** : center peek / side peek / full page
|
||
|
||
---
|
||
|
||
## 8. Filtres, tris & regroupements {#8-filtres-tris-groupes}
|
||
|
||
### 8.1 Filtres
|
||
|
||
Affichent uniquement les éléments correspondant à des critères.
|
||
|
||
**Structure :**
|
||
```
|
||
┌─ Filter group (AND)
|
||
│ ├─ Status = "In Progress"
|
||
│ ├─ Due Date is within this week
|
||
│ └─ Filter group (OR)
|
||
│ ├─ Priority = "P1"
|
||
│ └─ Priority = "P2"
|
||
```
|
||
|
||
**Opérateurs disponibles :** `is`, `is not`, `contains`, `does not contain`, `starts with`, `ends with`, `is empty`, `is not empty`, `is before`, `is after`, `is within`, `is today`, `is this week`
|
||
|
||
### 8.2 Tris
|
||
|
||
Ordonnent les éléments. Multi-niveaux (ex. trier par Status ASC puis Due Date DESC).
|
||
|
||
### 8.3 Regroupements (Groups)
|
||
|
||
Regroupent visuellement les éléments par propriété :
|
||
- **Group** (principal), **Sub-group** (secondaire, surtout en board)
|
||
- Exemples : par Status, par Assignee, par Date (mois/semaine)
|
||
|
||
---
|
||
|
||
## 9. Data Sources & Linked Databases {#9-data-sources}
|
||
|
||
### 9.1 Concept
|
||
|
||
Chaque database a ≥ 1 **data source**. Une database peut en regrouper **plusieurs**.
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────────┐
|
||
│ DATABASE (CRM tout-en-un) │
|
||
│ │
|
||
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
||
│ │ Contacts │ │Entreprises│ │ Deals │ │Activités │ │
|
||
│ │ (source) │ │ (source) │ │ (source) │ │ (linked) │ │
|
||
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
|
||
└──────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 9.2 Databases liées
|
||
|
||
Une **linked database** est une copie d'une database existante qui :
|
||
- Peut avoir ses propres vues/filtres/tris/**sans affecter l'originale**
|
||
- Mais l'édition du contenu/titres/propriétés **est répercutée** sur la source
|
||
- L'accès respecte celui de la database originale
|
||
|
||
---
|
||
|
||
## 10. Tasks, Sub-Items, Dependencies & Sprints {#10-tasks}
|
||
|
||
### 10.1 Task Database
|
||
|
||
Une database standard avec des **propriétés obligatoires** :
|
||
- **Status** (To-do, In Progress, Done)
|
||
- **Assignee** (Person)
|
||
- **Due Date** (Date)
|
||
|
||
**Activation :** ⚙️ → More settings → **Turn into Tasks**
|
||
|
||
Effets :
|
||
- Les tâches assignées apparaissent dans **My Tasks** (widget Home)
|
||
- Propriété **ID** auto-générée (format `TASK-123`)
|
||
- URL directe : `notion.so/TASK-123`
|
||
- Fonctionnalités Sprints débloquées
|
||
|
||
### 10.2 Sub-items
|
||
|
||
Permettent de découper une tâche en sous-tâches, visibles dans toutes les vues.
|
||
|
||
**Activation :** ⚙️ → More settings → Sub-items → Turn on
|
||
|
||
**Modes d'affichage :**
|
||
- **Nested in toggle** — arborescence pliable (défaut)
|
||
- **Flattened list** — liste plate indentée
|
||
- **Card property** — affichée sur la carte parente
|
||
|
||
**Filtres :** Parents only / Parents and sub-items / Sub-items only
|
||
|
||
### 10.3 Dependencies
|
||
|
||
Relient les tâches de façon linéaire (`A bloque B`).
|
||
|
||
**Calendrier automatique :**
|
||
- Shift only when dates overlap
|
||
- Shift & maintain time between items
|
||
- Do not automatically shift
|
||
|
||
**Éviction des week-ends** : configurable.
|
||
|
||
### 10.4 Sprints
|
||
|
||
Nécessitent une **Task database** préalable.
|
||
|
||
**Activation :** ⚙️ → More settings → Sprints → Turn on sprints
|
||
|
||
**Éléments :**
|
||
- **Sprint board** : 3 colonnes (Current Sprint / Sprint planning / Backlog)
|
||
- **Sprints database** : vue globale + Timeline
|
||
- **Réglages** : durée (1-8 semaines), jour de début, gestion incomplètes, complétion auto
|
||
- **Vélocité** : suivi de la capacité de l'équipe
|
||
|
||
---
|
||
|
||
## 11. My Tasks — vue unifiée {#11-my-tasks}
|
||
|
||
### 11.1 Qu'est-ce que My Tasks ?
|
||
|
||
**My Tasks** agrège **toutes les tâches assignées à l'utilisateur** à travers **toutes les databases** du workspace, dans une vue unique.
|
||
|
||
Pas besoin de naviguer dans chaque database pour trouver ses tâches — tout est consolidé.
|
||
|
||
### 11.2 Fonctionnement
|
||
|
||
1. Une database est marquée comme **Task database**
|
||
2. L'utilisateur est assigné à certaines pages (propriété **Person**)
|
||
3. Ces pages apparaissent automatiquement dans **My Tasks**
|
||
4. Filtrage possible : aujourd'hui, overdue, next 7 days, par collection
|
||
|
||
### 11.3 Interface
|
||
|
||
```
|
||
┌─────────────────────────────────────────────┐
|
||
│ 📋 My Tasks │
|
||
│ │
|
||
│ [All] [Today] [Overdue] [Next 7 days] │
|
||
│ │
|
||
│ ── Collection A (3) ── │
|
||
│ ┌──────────────────────────────────────────┐ │
|
||
│ │ 📋 Tâche 1 ⏳ In Progress 15 juil │ │
|
||
│ │ 📋 Tâche 2 ✅ Done 10 juil │ │
|
||
│ │ 📋 Tâche 3 📝 Todo — │ │
|
||
│ └──────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ── Collection B (1) ── │
|
||
│ ┌──────────────────────────────────────────┐ │
|
||
│ │ 📋 Tâche 4 🚀 P1 20 juil │ │
|
||
│ └──────────────────────────────────────────┘ │
|
||
│ │
|
||
│ 4 tasks across 2 collections │
|
||
└─────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 11.4 API nécessaire
|
||
|
||
```
|
||
GET /my-tasks?view=all|today|overdue|upcoming&days=7
|
||
→ Retourne toutes les pages de type tâche assignées à l'utilisateur
|
||
→ Groupées par collection
|
||
→ Avec statut, due date, priorité
|
||
```
|
||
|
||
---
|
||
|
||
## 12. Dashboards {#12-dashboards}
|
||
|
||
Transforment une database en **tableau de bord** centralisé en combinant plusieurs vues/widgets sur une même page.
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────────┐
|
||
│ DASHBOARD — Suivi Projet │
|
||
│ │
|
||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
|
||
│ │ 📊 Chart │ │ 📊 Chart │ │ 📋 Board (Kanban) │ │
|
||
│ │ Burn-down │ │ Status │ │ Current Sprint │ │
|
||
│ │ │ │ répartition │ │ │ │
|
||
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────┐ │
|
||
│ │ 📅 Calendar — Échéances du mois │ │
|
||
│ └─────────────────────────────────────────────────────┘ │
|
||
└──────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 13. Modèle de données FlowDeck {#13-modèle-de-données}
|
||
|
||
### 13.1 Tables existantes (v4.0) — à conserver
|
||
|
||
```sql
|
||
-- Collections (existantes, à enrichir)
|
||
CREATE TABLE collections (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
workspace_id INTEGER REFERENCES workspaces(id),
|
||
name TEXT NOT NULL,
|
||
description TEXT DEFAULT '',
|
||
icon TEXT DEFAULT '📋',
|
||
schema_json TEXT NOT NULL DEFAULT '[]', -- propriétés
|
||
gitea_owner TEXT,
|
||
gitea_repo TEXT,
|
||
is_locked BOOLEAN NOT NULL DEFAULT 0,
|
||
is_inline BOOLEAN NOT NULL DEFAULT 0,
|
||
parent_page_id INTEGER REFERENCES collection_pages(id),
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
created_by INTEGER REFERENCES users(id),
|
||
UNIQUE(workspace_id, name)
|
||
);
|
||
|
||
-- Pages dans une collection
|
||
CREATE TABLE collection_pages (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE,
|
||
title TEXT NOT NULL DEFAULT '',
|
||
icon TEXT DEFAULT '📄',
|
||
position INTEGER NOT NULL DEFAULT 0,
|
||
parent_id INTEGER REFERENCES collection_pages(id), -- sub-items
|
||
gitea_issue_id INTEGER,
|
||
gitea_issue_number INTEGER,
|
||
property_values_json TEXT NOT NULL DEFAULT '{}', -- valeurs des propriétés
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
created_by INTEGER REFERENCES users(id),
|
||
updated_by INTEGER REFERENCES users(id)
|
||
);
|
||
|
||
-- Vues d'une collection
|
||
CREATE TABLE collection_views (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE,
|
||
name TEXT NOT NULL DEFAULT 'Default View',
|
||
view_type TEXT NOT NULL DEFAULT 'table',
|
||
config_json TEXT NOT NULL DEFAULT '{}',
|
||
position INTEGER NOT NULL DEFAULT 0,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- Propriétés d'une collection
|
||
CREATE TABLE collection_properties (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE,
|
||
name TEXT NOT NULL,
|
||
prop_type TEXT NOT NULL DEFAULT 'text',
|
||
options_json TEXT DEFAULT '[]',
|
||
number_format TEXT DEFAULT 'number',
|
||
related_collection_id INTEGER REFERENCES collections(id),
|
||
reverse_name TEXT,
|
||
relation_property_id INTEGER REFERENCES collection_properties(id),
|
||
target_property_id INTEGER REFERENCES collection_properties(id),
|
||
rollup_function TEXT,
|
||
formula_expression TEXT,
|
||
position INTEGER NOT NULL DEFAULT 0,
|
||
required BOOLEAN NOT NULL DEFAULT 0,
|
||
visible_in_views BOOLEAN NOT NULL DEFAULT 1,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
UNIQUE(collection_id, name)
|
||
);
|
||
```
|
||
|
||
### 13.2 Nouvelles tables — Database Views enrichies
|
||
|
||
```sql
|
||
-- Dashboard : combinaison de vues/widgets sur une page
|
||
CREATE TABLE collection_dashboards (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE,
|
||
name TEXT NOT NULL DEFAULT 'Dashboard',
|
||
layout_json TEXT NOT NULL DEFAULT '{"columns":1,"widgets":[]}',
|
||
-- [{view_id, x, y, width, height}, ...]
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- Templates de collection
|
||
CREATE TABLE collection_templates (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE,
|
||
name TEXT NOT NULL DEFAULT 'Default',
|
||
description TEXT DEFAULT '',
|
||
property_defaults_json TEXT NOT NULL DEFAULT '{}',
|
||
content_json TEXT DEFAULT '[]',
|
||
is_recurring BOOLEAN NOT NULL DEFAULT 0,
|
||
recurrence_rule TEXT, -- 'daily', 'weekly', 'monthly', 'yearly'
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- Data sources multiples par collection
|
||
CREATE TABLE collection_data_sources (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE,
|
||
source_collection_id INTEGER NOT NULL REFERENCES collections(id),
|
||
source_name TEXT, -- nom d'affichage dans la DB composite
|
||
is_linked BOOLEAN NOT NULL DEFAULT 0, -- 1 = linked (provient d'ailleurs)
|
||
position INTEGER NOT NULL DEFAULT 0,
|
||
UNIQUE(collection_id, source_collection_id)
|
||
);
|
||
|
||
-- Dependencies entre pages (tâches)
|
||
CREATE TABLE page_dependencies (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
page_id INTEGER NOT NULL REFERENCES collection_pages(id) ON DELETE CASCADE,
|
||
dependency_id INTEGER NOT NULL REFERENCES collection_pages(id) ON DELETE CASCADE,
|
||
dependency_type TEXT NOT NULL DEFAULT 'blocks', -- blocks | blocked_by | related
|
||
auto_shift TEXT DEFAULT 'overlap', -- overlap | maintain_time | never
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
UNIQUE(page_id, dependency_id)
|
||
);
|
||
|
||
-- Sprints
|
||
CREATE TABLE sprints (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE,
|
||
name TEXT NOT NULL,
|
||
start_date TEXT NOT NULL,
|
||
end_date TEXT NOT NULL,
|
||
goal TEXT DEFAULT '',
|
||
status TEXT NOT NULL DEFAULT 'planning', -- planning | active | completed
|
||
auto_complete BOOLEAN NOT NULL DEFAULT 1,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
CREATE TABLE sprint_pages (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
sprint_id INTEGER NOT NULL REFERENCES sprints(id) ON DELETE CASCADE,
|
||
page_id INTEGER NOT NULL REFERENCES collection_pages(id) ON DELETE CASCADE,
|
||
status_at_start TEXT, -- snapshot du statut au début du sprint
|
||
velocity_points INTEGER DEFAULT 1,
|
||
UNIQUE(sprint_id, page_id)
|
||
);
|
||
```
|
||
|
||
### 13.3 Diagramme des relations clés
|
||
|
||
```
|
||
collections ──1:N── collection_pages ── self-ref ── parent_id (sub-items)
|
||
│ │
|
||
│1:N │N:N
|
||
▼ ▼
|
||
collection_views page_dependencies (bloque/bloqué par)
|
||
│
|
||
│1:N
|
||
▼
|
||
collection_properties
|
||
│
|
||
│ self-ref
|
||
├── related_collection_id (relation)
|
||
├── relation_property_id (rollup)
|
||
└── target_property_id (rollup)
|
||
|
||
collections ──1:N── collection_data_sources (multi-sources)
|
||
collections ──1:N── collection_templates
|
||
collections ──1:N── sprints ──1:N── sprint_pages
|
||
collections ──1:N── collection_dashboards
|
||
```
|
||
|
||
---
|
||
|
||
## 14. Plan d'implémentation (5 phases) {#14-plan-implémentation}
|
||
|
||
### Phase 1 — Data Sources & Linked Databases (v4.1.0)
|
||
|
||
**Objectif :** Permettre à une collection d'avoir plusieurs sources de données et des vues liées.
|
||
|
||
```
|
||
✅ Table collection_data_sources
|
||
✅ API: POST /db/{id}/sources (add)
|
||
✅ API: DELETE /db/{id}/sources/{sid} (remove)
|
||
✅ API: POST /db/{id}/linked (créer une linked DB)
|
||
✅ UI: Data source manager dans settings database
|
||
✅ Règle: les linked DB héritent des permissions de la source
|
||
```
|
||
|
||
### Phase 2 — Templates & Dashboard (v4.2.0)
|
||
|
||
**Objectif :** Templates réutilisables + combinaison de vues en dashboard.
|
||
|
||
```
|
||
✅ Table collection_templates (avec récurrence)
|
||
✅ Table collection_dashboards (layout widgets)
|
||
✅ API: templates CRUD
|
||
✅ API: POST /db/{id}/templates/{tid}/apply
|
||
✅ API: dashboards CRUD
|
||
✅ UI: Dashboard view (grille configurable de widgets)
|
||
✅ UI: Template picker dans le dropdown New
|
||
```
|
||
|
||
### Phase 3 — Database Views complètes (v4.3.0)
|
||
|
||
**Objectif :** Compléter les 10 types de vues avec leurs layouts.
|
||
|
||
```
|
||
✅ Charts: barres, courbes, camemberts, donuts, scatter (morris.js / chart.js)
|
||
✅ Form: formulaire HTML → POST création page
|
||
✅ Map: intégration Leaflet pour propriété Place
|
||
✅ Feed: vue chronologique type fil d'actualité
|
||
✅ Timeline/Gantt: barres horizontales avec dépendances
|
||
✅ Layout options: card size, card preview, open in peek/side/full
|
||
✅ View tabs: navigation fluide entre vues
|
||
```
|
||
|
||
### Phase 4 — Tasks, Sub-items & Dependencies (v4.4.0)
|
||
|
||
**Objectif :** Implémenter le système complet de gestion de tâches Notion-style.
|
||
|
||
```
|
||
✅ Flag is_task sur collections (Turn into Tasks)
|
||
✅ Sub-items: parent_id dans collection_pages (existant, à enrichir)
|
||
✅ Propriété ID auto-générée (TASK-XXX)
|
||
✅ Table page_dependencies (bloque/bloqué par)
|
||
✅ API: POST/GET/DELETE /db/{c}/pages/{p}/dependencies
|
||
✅ Auto-shift des dates (overlap / maintain_time / never)
|
||
✅ UI: vue dépendances (graphe ou liste), toggle sub-items
|
||
✅ Filtres sub-items: parents only / all / sub-items only
|
||
```
|
||
|
||
### Phase 5 — Sprints & My Tasks (v4.5.0)
|
||
|
||
**Objectif :** Sprints agiles + vue My Tasks cross-databases.
|
||
|
||
```
|
||
✅ Tables sprints, sprint_pages
|
||
✅ API: sprints CRUD + assignation pages aux sprints
|
||
✅ Sprint board: Current Sprint / Planning / Backlog
|
||
✅ Vélocité: calcul points/burndown chart
|
||
✅ My Tasks: agrégation cross-databases
|
||
✅ My Tasks API: /my-tasks?view=all|today|overdue|upcoming
|
||
✅ My Tasks UI: groupes par collection, status badges
|
||
✅ Assignee property sync avec users FlowDeck
|
||
```
|
||
|
||
---
|
||
|
||
## 15. Limites Notion à respecter {#15-limites}
|
||
|
||
| Limite | Valeur |
|
||
|--------|--------|
|
||
| Propriétés max par database | 500 |
|
||
| Pas de rollup d'un rollup | ✅ À respecter |
|
||
| Pages avant indexation non linéaire | ~1 000 |
|
||
| Nesting templates | max 3 niveaux |
|
||
| Nesting template quotidien | interdit |
|
||
| Templates | propres à chaque database |
|
||
| Database liée : partage | nécessite accès à l'originale |
|
||
|
||
---
|
||
|
||
## 16. Références {#16-références}
|
||
|
||
**Documentation Notion officielle :**
|
||
- [Intro to databases](https://www.notion.com/help/intro-to-databases)
|
||
- [Database properties](https://www.notion.com/help/database-properties)
|
||
- [Relations & rollups](https://www.notion.com/help/relations-and-rollups)
|
||
- [Formulas](https://www.notion.com/help/formulas)
|
||
- [Formula syntax](https://www.notion.com/help/formula-syntax)
|
||
- [Database templates](https://www.notion.com/help/database-templates)
|
||
- [Tasks & dependencies](https://www.notion.com/help/tasks-and-dependencies)
|
||
- [Sprints](https://www.notion.com/help/sprints)
|
||
- [Data sources & linked databases](https://www.notion.com/help/data-sources-and-linked-databases)
|
||
- [Views, filters & sorts](https://www.notion.com/help/views-filters-and-sorts)
|
||
- [Tables](https://www.notion.com/help/tables), [Boards](https://www.notion.com/help/boards), [Timelines](https://www.notion.com/help/timelines)
|
||
- [Calendars](https://www.notion.com/help/calendars), [Lists](https://www.notion.com/help/lists), [Galleries](https://www.notion.com/help/galleries)
|
||
- [Charts](https://www.notion.com/help/charts), [Forms](https://www.notion.com/help/forms), [Maps](https://www.notion.com/help/maps)
|
||
- [Feeds](https://www.notion.com/help/feeds), [Layouts](https://www.notion.com/help/layouts), [Dashboards](https://www.notion.com/help/dashboards)
|
||
- [My Tasks with Task databases](https://www.notion.com/help/guides/give-your-to-dos-a-home-with-task-databases)
|
||
|
||
**Documents FlowDeck :**
|
||
- [Guide Complet Notion Database](Guide_Complet_Notion_database.md)
|
||
- [Architecture FlowDeck v4.0](../ARCHITECTURE.md)
|
||
- [Roadmap](../ROADMAP.md)
|
||
- [FlowDeck Agent Integration](Flowdeck_Agent_integration.md)
|