feat: database scaffolding, docker-compose and schema DDL
This commit is contained in:
35
docker-compose.yml
Normal file
35
docker-compose.yml
Normal file
@@ -0,0 +1,35 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: ankane/pgvector:latest
|
||||
container_name: rit-postgres
|
||||
environment:
|
||||
POSTGRES_USER: rit_admin
|
||||
POSTGRES_PASSWORD: rit_password
|
||||
POSTGRES_DB: rit_freshers_hub
|
||||
ports:
|
||||
- "5432:5432"
|
||||
volumes:
|
||||
- pgdata:/var/lib/postgresql/data
|
||||
restart: unless-stopped
|
||||
|
||||
minio:
|
||||
image: minio/minio:latest
|
||||
container_name: rit-minio
|
||||
environment:
|
||||
MINIO_ROOT_USER: minio_admin
|
||||
MINIO_ROOT_PASSWORD: minio_password
|
||||
ports:
|
||||
- "9000:9000"
|
||||
- "9001:9001"
|
||||
volumes:
|
||||
- miniodata:/data
|
||||
command: server /data --console-address ":9001"
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
pgdata:
|
||||
driver: local
|
||||
miniodata:
|
||||
driver: local
|
||||
140
schema.sql
Normal file
140
schema.sql
Normal file
@@ -0,0 +1,140 @@
|
||||
-- ─── DATABASE INITIALIZATION SCHEMA FOR RIT FRESHERS HUB ───
|
||||
-- Stack: PostgreSQL 16 + pgvector
|
||||
|
||||
-- Enable the pgvector extension for AI semantic search capabilities
|
||||
CREATE EXTENSION IF NOT EXISTS vector;
|
||||
|
||||
-- 1. Notes & PYQs Module Table
|
||||
CREATE TABLE IF NOT EXISTS notes_pyqs (
|
||||
id SERIAL PRIMARY KEY,
|
||||
title VARCHAR(255) NOT NULL,
|
||||
subject VARCHAR(250) NOT NULL,
|
||||
department VARCHAR(250) NOT NULL,
|
||||
semester INT NOT NULL CHECK (semester BETWEEN 1 AND 8),
|
||||
file_type VARCHAR(50) NOT NULL, -- 'notes', 'pyq', 'syllabus', 'assignment'
|
||||
download_url TEXT NOT NULL,
|
||||
file_size VARCHAR(50) NOT NULL,
|
||||
downloads_count INT DEFAULT 0,
|
||||
uploaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 2. AI Assistant Chat History Table (RAG System)
|
||||
CREATE TABLE IF NOT EXISTS ai_chat_messages (
|
||||
id SERIAL PRIMARY KEY,
|
||||
conversation_id VARCHAR(100) NOT NULL,
|
||||
sender_role VARCHAR(20) NOT NULL CHECK (sender_role IN ('user', 'assistant')),
|
||||
content TEXT NOT NULL,
|
||||
embedding vector(1536), -- Vector representation of message for semantic search (e.g. OpenAI/Gemini embeddings)
|
||||
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 3. Campus Map Module Table
|
||||
CREATE TABLE IF NOT EXISTS campus_locations (
|
||||
id SERIAL PRIMARY KEY,
|
||||
location_key VARCHAR(100) UNIQUE NOT NULL, -- e.g., 'library', 'cse_block'
|
||||
name VARCHAR(255) NOT NULL,
|
||||
description TEXT,
|
||||
coordinates_x VARCHAR(50), -- Map coordinates
|
||||
coordinates_y VARCHAR(50),
|
||||
block_info VARCHAR(150),
|
||||
amenities TEXT[] -- List of amenities
|
||||
);
|
||||
|
||||
-- 4. Bus Routes Module Tables
|
||||
CREATE TABLE IF NOT EXISTS bus_routes (
|
||||
id SERIAL PRIMARY KEY,
|
||||
route_number VARCHAR(50) UNIQUE NOT NULL, -- e.g., 'RIT-01'
|
||||
route_name VARCHAR(255) NOT NULL,
|
||||
start_point VARCHAR(150) NOT NULL,
|
||||
end_point VARCHAR(150) NOT NULL,
|
||||
departure_time VARCHAR(50) NOT NULL,
|
||||
arrival_time VARCHAR(50) NOT NULL,
|
||||
color_code VARCHAR(7) DEFAULT '#F97316'
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS bus_stops (
|
||||
id SERIAL PRIMARY KEY,
|
||||
route_id INT REFERENCES bus_routes(id) ON DELETE CASCADE,
|
||||
stop_name VARCHAR(150) NOT NULL,
|
||||
arrival_time VARCHAR(50) NOT NULL,
|
||||
stop_order INT NOT NULL
|
||||
);
|
||||
|
||||
-- 5. Faculty Directory Module Table
|
||||
CREATE TABLE IF NOT EXISTS faculty (
|
||||
id SERIAL PRIMARY KEY,
|
||||
name VARCHAR(255) NOT NULL,
|
||||
designation VARCHAR(255) NOT NULL,
|
||||
department VARCHAR(255) NOT NULL,
|
||||
email VARCHAR(255) UNIQUE NOT NULL,
|
||||
office_location VARCHAR(255),
|
||||
specialization VARCHAR(255),
|
||||
phone VARCHAR(50),
|
||||
avatar_url TEXT
|
||||
);
|
||||
|
||||
-- 6. Freshers Q&A Module Tables
|
||||
CREATE TABLE IF NOT EXISTS community_questions (
|
||||
id SERIAL PRIMARY KEY,
|
||||
title VARCHAR(255) NOT NULL,
|
||||
body TEXT NOT NULL,
|
||||
author VARCHAR(150) NOT NULL,
|
||||
upvotes INT DEFAULT 0,
|
||||
tags TEXT[],
|
||||
is_answered BOOLEAN DEFAULT FALSE,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS community_answers (
|
||||
id SERIAL PRIMARY KEY,
|
||||
question_id INT REFERENCES community_questions(id) ON DELETE CASCADE,
|
||||
body TEXT NOT NULL,
|
||||
author VARCHAR(150) NOT NULL,
|
||||
upvotes INT DEFAULT 0,
|
||||
is_accepted BOOLEAN DEFAULT FALSE,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 7. Clubs & Events Module Tables
|
||||
CREATE TABLE IF NOT EXISTS clubs (
|
||||
id SERIAL PRIMARY KEY,
|
||||
name VARCHAR(255) UNIQUE NOT NULL,
|
||||
description TEXT,
|
||||
category VARCHAR(100), -- 'Technical', 'Cultural', 'Social', etc.
|
||||
members_count INT DEFAULT 0,
|
||||
contact_email VARCHAR(255)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS events (
|
||||
id SERIAL PRIMARY KEY,
|
||||
title VARCHAR(255) NOT NULL,
|
||||
description TEXT,
|
||||
event_date DATE NOT NULL,
|
||||
event_time VARCHAR(50) NOT NULL,
|
||||
venue VARCHAR(255) NOT NULL,
|
||||
organizer VARCHAR(255) NOT NULL,
|
||||
category VARCHAR(100), -- 'technical', 'cultural', 'seminar', etc.
|
||||
registration_url TEXT,
|
||||
is_upcoming BOOLEAN DEFAULT TRUE,
|
||||
club_id INT REFERENCES clubs(id) ON DELETE SET NULL
|
||||
);
|
||||
|
||||
-- 8. Student Toolkit Table
|
||||
CREATE TABLE IF NOT EXISTS toolkit_items (
|
||||
id SERIAL PRIMARY KEY,
|
||||
title VARCHAR(255) NOT NULL,
|
||||
description TEXT,
|
||||
resource_type VARCHAR(50) NOT NULL, -- 'pdf', 'link', 'form'
|
||||
download_url TEXT NOT NULL,
|
||||
category VARCHAR(100) NOT NULL, -- 'Academic', 'Administrative', etc.
|
||||
icon_name VARCHAR(100)
|
||||
);
|
||||
|
||||
-- 9. Anonymous Confessions Table
|
||||
CREATE TABLE IF NOT EXISTS confessions (
|
||||
id SERIAL PRIMARY KEY,
|
||||
content TEXT NOT NULL,
|
||||
category VARCHAR(100) DEFAULT 'General', -- 'Funny', 'Crush', 'Wholesome'
|
||||
reactions_count INT DEFAULT 0,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
Reference in New Issue
Block a user