[init] Add initial database migration files for PostgreSQL, SQLite, and MySQL
This commit is contained in:
116
api/migrations/sqlite3/001_init.up.sql
Normal file
116
api/migrations/sqlite3/001_init.up.sql
Normal file
@@ -0,0 +1,116 @@
|
||||
-- ===========
|
||||
-- Users & Plans
|
||||
-- ===========
|
||||
|
||||
CREATE TABLE users
|
||||
(
|
||||
id INTEGER PRIMARY KEY,
|
||||
email TEXT NOT NULL UNIQUE,
|
||||
username TEXT,
|
||||
hashed_password TEXT NOT NULL,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE plans
|
||||
(
|
||||
id INTEGER PRIMARY KEY,
|
||||
name TEXT NOT NULL UNIQUE, -- 'Free', 'Pro', 'Enterprise'
|
||||
-- Features des Plans als JSON. Flexibel für zukünftige Änderungen.
|
||||
features TEXT NOT NULL,
|
||||
stripe_price_id TEXT UNIQUE,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- ===========
|
||||
-- Tenancy (Workspaces & Members)
|
||||
-- ===========
|
||||
|
||||
CREATE TABLE workspaces
|
||||
(
|
||||
id INTEGER PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
owner_id INTEGER NOT NULL REFERENCES users (id),
|
||||
plan_id INTEGER NOT NULL REFERENCES plans (id),
|
||||
subscription_status TEXT NOT NULL, -- z.B. 'active', 'trialing'
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE workspace_members
|
||||
(
|
||||
user_id INTEGER NOT NULL REFERENCES users (id) ON DELETE CASCADE,
|
||||
workspace_id INTEGER NOT NULL REFERENCES workspaces (id) ON DELETE CASCADE,
|
||||
role_id INTEGER NOT NULL REFERENCES roles (id),
|
||||
joined_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (user_id, workspace_id)
|
||||
);
|
||||
|
||||
-- ===========
|
||||
-- RBAC (Roles & Permissions)
|
||||
-- ===========
|
||||
|
||||
CREATE TABLE roles
|
||||
(
|
||||
id INTEGER PRIMARY KEY,
|
||||
name TEXT NOT NULL UNIQUE -- 'Workspace Owner', 'Admin', 'Developer', 'Viewer'
|
||||
);
|
||||
|
||||
CREATE TABLE permissions
|
||||
(
|
||||
id INTEGER PRIMARY KEY,
|
||||
action TEXT NOT NULL UNIQUE, -- 'project:create', 'route:delete', etc.
|
||||
description TEXT
|
||||
);
|
||||
|
||||
CREATE TABLE role_permissions
|
||||
(
|
||||
role_id INTEGER NOT NULL REFERENCES roles (id) ON DELETE CASCADE,
|
||||
permission_id INTEGER NOT NULL REFERENCES permissions (id) ON DELETE CASCADE,
|
||||
PRIMARY KEY (role_id, permission_id)
|
||||
);
|
||||
|
||||
-- ===========
|
||||
-- Product Logic (Projects & Routes)
|
||||
-- ===========
|
||||
|
||||
CREATE TABLE projects
|
||||
(
|
||||
id INTEGER PRIMARY KEY,
|
||||
workspace_id INTEGER NOT NULL REFERENCES workspaces (id) ON DELETE CASCADE,
|
||||
name TEXT NOT NULL,
|
||||
description TEXT,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE routes
|
||||
(
|
||||
id INTEGER PRIMARY KEY,
|
||||
project_id INTEGER NOT NULL REFERENCES projects (id) ON DELETE CASCADE,
|
||||
-- Matching Rules
|
||||
method TEXT NOT NULL,
|
||||
path TEXT NOT NULL,
|
||||
request_body_contains TEXT,
|
||||
-- Protocol Dispatcher (kompatibel mit SQLite & Postgres)
|
||||
protocol TEXT NOT NULL CHECK (protocol IN ('REST_JSON', 'GRAPHQL', 'RAW_BYTESTREAM', 'JSON_RPC')),
|
||||
schema_definition TEXT,
|
||||
-- Response Definition
|
||||
response_mode TEXT NOT NULL CHECK (response_mode IN ('STATIC', 'DYNAMIC')) DEFAULT 'STATIC',
|
||||
response_script TEXT,
|
||||
status_code INTEGER NOT NULL DEFAULT 200,
|
||||
-- Für SQLite: TEXT-Spalte, die JSON enthält.
|
||||
response_headers TEXT, -- In Postgres: JSONB
|
||||
response_body TEXT,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- ===========
|
||||
-- Indizes für schnelle Abfragen
|
||||
-- ===========
|
||||
|
||||
CREATE INDEX idx_workspaces_owner_id ON workspaces (owner_id);
|
||||
CREATE INDEX idx_projects_workspace_id ON projects (workspace_id);
|
||||
CREATE INDEX idx_routes_project_id ON routes (project_id);
|
Reference in New Issue
Block a user