100 lines
3.7 KiB
SQL
100 lines
3.7 KiB
SQL
-- Ether PMS Database Migration Script
|
|
-- Version: 2.1
|
|
-- Description: Add project statistics, config and status history tables
|
|
|
|
-- ============================================
|
|
-- User Project Relation Table (if not exists)
|
|
-- ============================================
|
|
|
|
CREATE TABLE IF NOT EXISTS user_project (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
user_id UUID NOT NULL REFERENCES auth_user(id) ON DELETE CASCADE,
|
|
project_id UUID NOT NULL REFERENCES mdm_project(id) ON DELETE CASCADE,
|
|
role_in_project VARCHAR(20) DEFAULT 'member',
|
|
joined_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
UNIQUE(user_id, project_id)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_user_project_user ON user_project(user_id);
|
|
CREATE INDEX IF NOT EXISTS idx_user_project_project ON user_project(project_id);
|
|
|
|
-- ============================================
|
|
-- Project Statistics Table
|
|
-- ============================================
|
|
|
|
CREATE TABLE IF NOT EXISTS mdm_project_statistics (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
project_id UUID NOT NULL UNIQUE REFERENCES mdm_project(id) ON DELETE CASCADE,
|
|
member_count INTEGER DEFAULT 0,
|
|
building_count INTEGER DEFAULT 0,
|
|
unit_count INTEGER DEFAULT 0,
|
|
room_count INTEGER DEFAULT 0,
|
|
owner_count INTEGER DEFAULT 0,
|
|
tenant_count INTEGER DEFAULT 0,
|
|
last_synced_at TIMESTAMP,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_project_statistics_project ON mdm_project_statistics(project_id);
|
|
|
|
-- ============================================
|
|
-- Project Config Table
|
|
-- ============================================
|
|
|
|
CREATE TABLE IF NOT EXISTS mdm_project_config (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
project_id UUID NOT NULL UNIQUE REFERENCES mdm_project(id) ON DELETE CASCADE,
|
|
enable_reservation BOOLEAN DEFAULT FALSE,
|
|
enable_visitor BOOLEAN DEFAULT FALSE,
|
|
enable_complaint BOOLEAN DEFAULT TRUE,
|
|
enable_payment BOOLEAN DEFAULT FALSE,
|
|
enable_announcement BOOLEAN DEFAULT TRUE,
|
|
enable_survey BOOLEAN DEFAULT FALSE,
|
|
enable_vote BOOLEAN DEFAULT FALSE,
|
|
enable_maintenance BOOLEAN DEFAULT TRUE,
|
|
enable_asset BOOLEAN DEFAULT FALSE,
|
|
custom_config TEXT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_project_config_project ON mdm_project_config(project_id);
|
|
|
|
-- ============================================
|
|
-- Project Status History Table
|
|
-- ============================================
|
|
|
|
CREATE TABLE IF NOT EXISTS mdm_project_status_history (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
project_id UUID NOT NULL REFERENCES mdm_project(id) ON DELETE CASCADE,
|
|
from_status VARCHAR(20),
|
|
to_status VARCHAR(20) NOT NULL,
|
|
reason VARCHAR(500),
|
|
operator_id UUID REFERENCES auth_user(id),
|
|
operator_name VARCHAR(50),
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_project_status_history_project ON mdm_project_status_history(project_id);
|
|
CREATE INDEX IF NOT EXISTS idx_project_status_history_created ON mdm_project_status_history(created_at);
|
|
|
|
-- ============================================
|
|
-- Project Code Sequence Table
|
|
-- ============================================
|
|
|
|
CREATE TABLE IF NOT EXISTS mdm_project_code_sequence (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
prefix VARCHAR(10) NOT NULL,
|
|
current_sequence INTEGER DEFAULT 0,
|
|
year INTEGER NOT NULL,
|
|
UNIQUE(prefix, year)
|
|
);
|
|
|
|
-- ============================================
|
|
-- Update Project Status
|
|
-- ============================================
|
|
|
|
-- Add DRAFT status if not present
|
|
UPDATE mdm_project SET status = 'ACTIVE' WHERE status IS NULL;
|