mirror of
https://github.com/Portabase/agent.git
synced 2026-09-10 18:16:55 +00:00
74 lines
2.5 KiB
SQL
74 lines
2.5 KiB
SQL
PRAGMA foreign_keys = ON;
|
|
BEGIN TRANSACTION;
|
|
|
|
-- Drop tables
|
|
DROP TABLE IF EXISTS users;
|
|
DROP TABLE IF EXISTS projects;
|
|
DROP TABLE IF EXISTS tasks;
|
|
|
|
-- Users
|
|
CREATE TABLE users (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
email TEXT NOT NULL UNIQUE,
|
|
full_name TEXT NOT NULL,
|
|
role TEXT NOT NULL CHECK (role IN ('admin','manager','user')),
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
-- Projects
|
|
CREATE TABLE projects (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL,
|
|
description TEXT,
|
|
owner_id INTEGER NOT NULL,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE CASCADE
|
|
);
|
|
|
|
-- Tasks
|
|
CREATE TABLE tasks (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
project_id INTEGER NOT NULL,
|
|
title TEXT NOT NULL,
|
|
status TEXT NOT NULL CHECK (status IN ('todo','in_progress','done')),
|
|
priority INTEGER NOT NULL DEFAULT 3,
|
|
due_date TEXT,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
|
|
);
|
|
|
|
-- Seed minimal users
|
|
INSERT INTO users (email, full_name, role) VALUES
|
|
('admin@example.com', 'System Admin', 'admin'),
|
|
('manager@example.com', 'Project Manager', 'manager'),
|
|
('user@example.com', 'Standard User', 'user');
|
|
|
|
-- Generate 10_000 projects
|
|
WITH RECURSIVE numbers(x) AS (
|
|
SELECT 1
|
|
UNION ALL
|
|
SELECT x+1 FROM numbers WHERE x<10000
|
|
)
|
|
INSERT INTO projects (name, description, owner_id)
|
|
SELECT
|
|
'Project #' || x,
|
|
'Auto-generated project description for project #' || x,
|
|
(1 + (x % 3)) -- cycle users 1..3
|
|
FROM numbers;
|
|
|
|
-- Generate 100_000 tasks
|
|
WITH RECURSIVE numbers(x) AS (
|
|
SELECT 1
|
|
UNION ALL
|
|
SELECT x+1 FROM numbers WHERE x<100000
|
|
)
|
|
INSERT INTO tasks (project_id, title, status, priority, due_date)
|
|
SELECT
|
|
(1 + (x % 10000)), -- project id cycle
|
|
'Task #' || x,
|
|
CASE (x % 3) WHEN 0 THEN 'todo' WHEN 1 THEN 'in_progress' ELSE 'done' END,
|
|
1 + (x % 5),
|
|
date('now', '+' || (x % 30) || ' days')
|
|
FROM numbers;
|
|
|
|
COMMIT; |