-- Create dedicated user for navix application CREATE USER navix_user WITH PASSWORD 'Aa123456'; -- Create database CREATE DATABASE navix OWNER navix_user; -- Grant privileges GRANT ALL PRIVILEGES ON DATABASE navix TO navix_user; -- Connect to navix database \c navix; -- Grant schema privileges GRANT ALL ON SCHEMA public TO navix_user; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO navix_user; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO navix_user; -- Create users table CREATE TABLE users ( id SERIAL PRIMARY KEY, username VARCHAR(50) UNIQUE NOT NULL, email VARCHAR(255) UNIQUE NOT NULL, password_hash VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Create sections table CREATE TABLE sections ( id SERIAL PRIMARY KEY, user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, name VARCHAR(100) NOT NULL, display_order INTEGER DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE(user_id, name) ); -- Create apps table CREATE TABLE apps ( id SERIAL PRIMARY KEY, section_id INTEGER NOT NULL REFERENCES sections(id) ON DELETE CASCADE, name VARCHAR(100) NOT NULL, url TEXT NOT NULL, icon VARCHAR(255), description TEXT, display_order INTEGER DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Create indexes for better query performance CREATE INDEX idx_sections_user_id ON sections(user_id); CREATE INDEX idx_apps_section_id ON apps(section_id); CREATE INDEX idx_users_username ON users(username); CREATE INDEX idx_users_email ON users(email); -- Create updated_at trigger function CREATE OR REPLACE FUNCTION update_updated_at_column() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = CURRENT_TIMESTAMP; RETURN NEW; END; $$ language 'plpgsql'; -- Add triggers for updated_at CREATE TRIGGER update_users_updated_at BEFORE UPDATE ON users FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); CREATE TRIGGER update_apps_updated_at BEFORE UPDATE ON apps FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); -- Grant privileges on all objects to navix_user ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO navix_user; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO navix_user;