82 lines
2.6 KiB
SQL
82 lines
2.6 KiB
SQL
-- Tasko Database Schema for PostgreSQL
|
|
-- Run this script as postgres superuser, then connect as tasko_user
|
|
|
|
-- Create database
|
|
CREATE DATABASE tasko_db;
|
|
|
|
-- Connect to the database
|
|
\c tasko_db
|
|
|
|
-- Create application user with limited privileges (best practice)
|
|
CREATE USER tasko_user WITH PASSWORD 'tasko_password';
|
|
|
|
-- Grant connection privilege
|
|
GRANT CONNECT ON DATABASE tasko_db TO tasko_user;
|
|
|
|
-- Create schema
|
|
CREATE SCHEMA IF NOT EXISTS public;
|
|
|
|
-- Grant schema usage
|
|
GRANT USAGE ON SCHEMA public TO tasko_user;
|
|
|
|
-- Create tables
|
|
CREATE TABLE users (
|
|
id VARCHAR(36) PRIMARY KEY,
|
|
username VARCHAR(100) UNIQUE NOT NULL,
|
|
email VARCHAR(255) UNIQUE NOT NULL,
|
|
password_hash VARCHAR(64) NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
|
|
);
|
|
|
|
CREATE TABLE tokens (
|
|
token VARCHAR(36) PRIMARY KEY,
|
|
user_id VARCHAR(36) NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE task_lists (
|
|
id VARCHAR(36) PRIMARY KEY,
|
|
user_id VARCHAR(36) NOT NULL,
|
|
name VARCHAR(200) NOT NULL,
|
|
icon VARCHAR(10) DEFAULT '📝',
|
|
color VARCHAR(7) DEFAULT '#667eea',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE tasks (
|
|
id VARCHAR(36) PRIMARY KEY,
|
|
list_id VARCHAR(36) NOT NULL,
|
|
user_id VARCHAR(36) NOT NULL,
|
|
title VARCHAR(500) NOT NULL,
|
|
description TEXT,
|
|
completed BOOLEAN DEFAULT FALSE NOT NULL,
|
|
priority VARCHAR(20) DEFAULT 'medium',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
FOREIGN KEY (list_id) REFERENCES task_lists(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
);
|
|
|
|
-- Create indexes for better query performance
|
|
CREATE INDEX idx_tokens_user_id ON tokens(user_id);
|
|
CREATE INDEX idx_task_lists_user_id ON task_lists(user_id);
|
|
CREATE INDEX idx_tasks_list_id ON tasks(list_id);
|
|
CREATE INDEX idx_tasks_user_id ON tasks(user_id);
|
|
CREATE INDEX idx_tasks_completed ON tasks(completed);
|
|
|
|
-- Grant privileges to tasko_user
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO tasko_user;
|
|
|
|
-- Grant sequence privileges (for any future auto-increment columns)
|
|
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO tasko_user;
|
|
|
|
-- Set default privileges for future tables
|
|
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO tasko_user;
|
|
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE, SELECT ON SEQUENCES TO tasko_user;
|
|
|
|
-- Display summary
|
|
\dt
|
|
\du
|