Files
flowdeck/docs/NOTION_DATABASE_TASKS_GUIDE.md
T
bruno 2ca27d3398
FlowDeck CI / test (push) Failing after 5s
FlowDeck CI / docker (push) Has been skipped
docs: NOTION_DATABASE_TASKS_GUIDE.md v2.0 + ROADMAP Database/Views/Tasks
- 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
2026-07-20 15:58:52 -04:00

773 lines
33 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)