feat: database scaffolding, docker-compose and schema DDL

This commit is contained in:
Amudieshwar A G
2026-07-21 12:22:38 +05:30
parent e2c86755ef
commit 276338b05a
2 changed files with 175 additions and 0 deletions

35
docker-compose.yml Normal file
View 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
View 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
);