Create a new tasks module with full CRUD operations, supporting both regular tasks and etapes (phases). Implements task hierarchy with parent-child relationships, assignees, and due dates. Includes database schema with validation triggers, SQLC query generation, in-memory repository implementation, HTTP handlers, view templates, and comprehensive test coverage.
144 lines
2.8 KiB
SQL
144 lines
2.8 KiB
SQL
INSERT INTO auth.users (
|
||
id,
|
||
email,
|
||
encrypted_password,
|
||
raw_user_meta_data,
|
||
created_at,
|
||
updated_at
|
||
) VALUES (
|
||
'11111111-1111-1111-1111-111111111111',
|
||
'demo@xtablo.com',
|
||
'$2a$10$/xeyC8tiOZTcw2BBOSrv.uWu.EbRMYwF7MpFcDHSS40fOoTR.QrLS',
|
||
jsonb_build_object('display_name', 'demo'),
|
||
now(),
|
||
now()
|
||
)
|
||
ON CONFLICT (email) DO NOTHING;
|
||
|
||
INSERT INTO public.tablos (
|
||
id,
|
||
owner_id,
|
||
name,
|
||
color,
|
||
status,
|
||
created_at,
|
||
updated_at,
|
||
deleted_at
|
||
) VALUES (
|
||
'22222222-2222-2222-2222-222222222222',
|
||
'11111111-1111-1111-1111-111111111111',
|
||
'Démo produit',
|
||
'#3B82F6',
|
||
'in_progress',
|
||
now(),
|
||
now(),
|
||
NULL
|
||
)
|
||
ON CONFLICT (id) DO NOTHING;
|
||
|
||
INSERT INTO public.tasks (
|
||
id,
|
||
tablo_id,
|
||
owner_id,
|
||
title,
|
||
description,
|
||
status,
|
||
assignee_id,
|
||
is_etape,
|
||
parent_task_id,
|
||
due_date,
|
||
created_at,
|
||
updated_at,
|
||
deleted_at
|
||
) VALUES
|
||
(
|
||
'33333333-3333-3333-3333-333333333331',
|
||
'22222222-2222-2222-2222-222222222222',
|
||
'11111111-1111-1111-1111-111111111111',
|
||
'Préparation',
|
||
'Étape de cadrage et de préparation de la démo.',
|
||
'in_progress',
|
||
'11111111-1111-1111-1111-111111111111',
|
||
TRUE,
|
||
NULL,
|
||
'2026-05-20',
|
||
now(),
|
||
now(),
|
||
NULL
|
||
),
|
||
(
|
||
'33333333-3333-3333-3333-333333333332',
|
||
'22222222-2222-2222-2222-222222222222',
|
||
'11111111-1111-1111-1111-111111111111',
|
||
'Livraison',
|
||
'Étape finale avant mise en ligne de la démo.',
|
||
'todo',
|
||
NULL,
|
||
TRUE,
|
||
NULL,
|
||
'2026-05-30',
|
||
now(),
|
||
now(),
|
||
NULL
|
||
),
|
||
(
|
||
'33333333-3333-3333-3333-333333333341',
|
||
'22222222-2222-2222-2222-222222222222',
|
||
'11111111-1111-1111-1111-111111111111',
|
||
'Valider le périmètre',
|
||
'Lister les fonctionnalités visibles dans la démo.',
|
||
'done',
|
||
'11111111-1111-1111-1111-111111111111',
|
||
FALSE,
|
||
'33333333-3333-3333-3333-333333333331',
|
||
'2026-05-15',
|
||
now(),
|
||
now(),
|
||
NULL
|
||
),
|
||
(
|
||
'33333333-3333-3333-3333-333333333342',
|
||
'22222222-2222-2222-2222-222222222222',
|
||
'11111111-1111-1111-1111-111111111111',
|
||
'Préparer les captures',
|
||
'Assembler les écrans et les textes de présentation.',
|
||
'in_progress',
|
||
'11111111-1111-1111-1111-111111111111',
|
||
FALSE,
|
||
'33333333-3333-3333-3333-333333333331',
|
||
'2026-05-18',
|
||
now(),
|
||
now(),
|
||
NULL
|
||
),
|
||
(
|
||
'33333333-3333-3333-3333-333333333343',
|
||
'22222222-2222-2222-2222-222222222222',
|
||
'11111111-1111-1111-1111-111111111111',
|
||
'Relire le message d’annonce',
|
||
'Vérifier le texte envoyé avec la démo.',
|
||
'todo',
|
||
NULL,
|
||
FALSE,
|
||
NULL,
|
||
'2026-05-19',
|
||
now(),
|
||
now(),
|
||
NULL
|
||
),
|
||
(
|
||
'33333333-3333-3333-3333-333333333344',
|
||
'22222222-2222-2222-2222-222222222222',
|
||
'11111111-1111-1111-1111-111111111111',
|
||
'Envoyer la démo',
|
||
'Partager la version finale aux premiers retours.',
|
||
'todo',
|
||
'11111111-1111-1111-1111-111111111111',
|
||
FALSE,
|
||
'33333333-3333-3333-3333-333333333332',
|
||
'2026-05-30',
|
||
now(),
|
||
now(),
|
||
NULL
|
||
)
|
||
ON CONFLICT (id) DO NOTHING;
|