Files
2026-07-13 12:32:25 +08:00

2587 lines
71 KiB
PL/PgSQL

-- Downloaded from: https://github.com/Vanesor/zenith/blob/c6e7ebf9e6e71af74a410b62b344105c301743a2/schema_new.sql
--
-- PostgreSQL database dump
--
-- Dumped from database version 14.18 (Ubuntu 14.18-0ubuntu0.22.04.1)
-- Dumped by pg_dump version 14.18 (Ubuntu 14.18-0ubuntu0.22.04.1)
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Name: pgcrypto; Type: EXTENSION; Schema: -; Owner: -
--
CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA public;
--
-- Name: EXTENSION pgcrypto; Type: COMMENT; Schema: -; Owner: -
--
COMMENT ON EXTENSION pgcrypto IS 'cryptographic functions';
--
-- Name: uuid-ossp; Type: EXTENSION; Schema: -; Owner: -
--
CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA public;
--
-- Name: EXTENSION "uuid-ossp"; Type: COMMENT; Schema: -; Owner: -
--
COMMENT ON EXTENSION "uuid-ossp" IS 'generate universally unique identifiers (UUIDs)';
--
-- Name: generate_task_key(); Type: FUNCTION; Schema: public; Owner: -
--
CREATE FUNCTION public.generate_task_key() RETURNS trigger
LANGUAGE plpgsql
AS $_$
DECLARE
project_key_val text;
next_number integer;
BEGIN
-- Get project key
SELECT project_key INTO project_key_val
FROM projects
WHERE id = NEW.project_id;
-- Get next task number for this project
SELECT COALESCE(MAX(CAST(SUBSTRING(task_key FROM '[0-9]+$') AS integer)), 0) + 1
INTO next_number
FROM tasks
WHERE project_id = NEW.project_id;
-- Generate the task key
NEW.task_key := project_key_val || '-' || next_number;
RETURN NEW;
END;
$_$;
--
-- Name: update_post_search_vector(); Type: FUNCTION; Schema: public; Owner: -
--
CREATE FUNCTION public.update_post_search_vector() RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
NEW.search_vector := to_tsvector('english',
COALESCE(NEW.title, '') || ' ' ||
COALESCE(NEW.content, '') || ' ' ||
COALESCE(NEW.excerpt, '') || ' ' ||
COALESCE(array_to_string(NEW.tags, ' '), '')
);
RETURN NEW;
END;
$$;
--
-- Name: update_project_progress(); Type: FUNCTION; Schema: public; Owner: -
--
CREATE FUNCTION public.update_project_progress() RETURNS trigger
LANGUAGE plpgsql
AS $$
DECLARE
total_tasks_count integer;
completed_tasks_count integer;
progress_pct numeric;
BEGIN
-- Count total and completed tasks for the project
SELECT
COUNT(*) as total,
COUNT(*) FILTER (WHERE is_completed = true) as completed
INTO total_tasks_count, completed_tasks_count
FROM tasks
WHERE project_id = COALESCE(NEW.project_id, OLD.project_id);
-- Calculate progress percentage
IF total_tasks_count > 0 THEN
progress_pct := (completed_tasks_count::numeric / total_tasks_count::numeric) * 100;
ELSE
progress_pct := 0;
END IF;
-- Update project
UPDATE projects
SET
total_tasks = total_tasks_count,
completed_tasks = completed_tasks_count,
progress_percentage = progress_pct,
updated_at = CURRENT_TIMESTAMP
WHERE id = COALESCE(NEW.project_id, OLD.project_id);
RETURN COALESCE(NEW, OLD);
END;
$$;
--
-- Name: update_updated_at_column(); Type: FUNCTION; Schema: public; Owner: -
--
CREATE FUNCTION public.update_updated_at_column() RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
NEW.updated_at = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$;
SET default_tablespace = '';
SET default_table_access_method = heap;
--
-- Name: ai_assignment_generations; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.ai_assignment_generations (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
template_id uuid,
generated_assignment_id uuid,
source_file_url text NOT NULL,
generation_prompt text,
ai_model_used character varying,
generation_status character varying DEFAULT 'pending'::character varying,
questions_extracted integer DEFAULT 0,
questions_created integer DEFAULT 0,
processing_log jsonb DEFAULT '[]'::jsonb,
error_details text,
generated_by uuid,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
completed_at timestamp with time zone
);
--
-- Name: announcements; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.announcements (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
title character varying NOT NULL,
content text NOT NULL,
author_id uuid,
club_id character varying,
priority character varying DEFAULT 'normal'::character varying,
expires_at timestamp with time zone,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: assignment_attempts; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.assignment_attempts (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
assignment_id uuid NOT NULL,
user_id uuid NOT NULL,
attempt_number integer DEFAULT 1 NOT NULL,
start_time timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
end_time timestamp with time zone,
time_spent integer DEFAULT 0,
score integer DEFAULT 0,
max_score integer DEFAULT 0,
percentage numeric DEFAULT 0,
is_passing boolean DEFAULT false,
answers jsonb DEFAULT '{}'::jsonb,
graded_answers jsonb DEFAULT '{}'::jsonb,
violations jsonb DEFAULT '[]'::jsonb,
status character varying DEFAULT 'in_progress'::character varying,
submitted_at timestamp with time zone,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
is_fullscreen boolean DEFAULT false,
auto_save_data jsonb DEFAULT '{}'::jsonb,
window_violations integer DEFAULT 0,
last_auto_save timestamp with time zone,
browser_info jsonb DEFAULT '{}'::jsonb
);
--
-- Name: assignment_audit_log; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.assignment_audit_log (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
assignment_id uuid NOT NULL,
user_id uuid NOT NULL,
attempt_id uuid,
action character varying NOT NULL,
details jsonb DEFAULT '{}'::jsonb,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: assignment_questions; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.assignment_questions (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
assignment_id uuid NOT NULL,
question_text text NOT NULL,
question_type character varying NOT NULL,
marks integer DEFAULT 1 NOT NULL,
time_limit integer,
code_language character varying,
code_template text,
test_cases jsonb,
expected_output text,
solution text,
ordering integer DEFAULT 0 NOT NULL,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
type character varying,
title character varying,
description text,
options jsonb,
correct_answer jsonb,
points integer DEFAULT 1,
question_order integer DEFAULT 0,
starter_code text,
integer_min numeric,
integer_max numeric,
integer_step numeric DEFAULT 1,
explanation text,
allowed_languages jsonb DEFAULT '[]'::jsonb,
allow_any_language boolean DEFAULT false,
question_image_url text,
question_image_alt text,
question_images jsonb DEFAULT '[]'::jsonb,
answer_images jsonb DEFAULT '[]'::jsonb,
CONSTRAINT assignment_questions_question_type_check CHECK (((question_type)::text = ANY (ARRAY[('single_choice'::character varying)::text, ('multiple_choice'::character varying)::text, ('multi_select'::character varying)::text, ('coding'::character varying)::text, ('essay'::character varying)::text, ('true_false'::character varying)::text, ('integer'::character varying)::text])))
);
--
-- Name: assignment_submissions; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.assignment_submissions (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
assignment_id uuid,
user_id uuid,
submission_text text,
file_url text,
submitted_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
status character varying DEFAULT 'submitted'::character varying,
grade integer,
feedback text,
started_at timestamp with time zone,
completed_at timestamp with time zone,
violation_count integer DEFAULT 0,
time_spent integer,
auto_submitted boolean DEFAULT false,
ip_address character varying,
user_agent text,
total_score integer DEFAULT 0
);
--
-- Name: assignment_templates; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.assignment_templates (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
name character varying NOT NULL,
description text,
template_file_url text NOT NULL,
template_type character varying NOT NULL,
category character varying,
subject character varying,
difficulty_level character varying,
estimated_questions integer,
created_by uuid,
is_active boolean DEFAULT true,
usage_count integer DEFAULT 0,
metadata jsonb DEFAULT '{}'::jsonb,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: assignment_violations; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.assignment_violations (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
submission_id uuid NOT NULL,
violation_type character varying NOT NULL,
occurred_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
details jsonb
);
--
-- Name: assignments; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.assignments (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
title character varying NOT NULL,
description text NOT NULL,
club_id character varying,
created_by uuid,
due_date timestamp with time zone NOT NULL,
max_points integer DEFAULT 100,
instructions text,
status character varying DEFAULT 'active'::character varying,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
assignment_type character varying DEFAULT 'regular'::character varying,
target_audience character varying DEFAULT 'club'::character varying,
target_clubs character varying[] DEFAULT '{}'::character varying[],
time_limit integer,
allow_navigation boolean DEFAULT true,
passing_score integer DEFAULT 60,
is_proctored boolean DEFAULT false,
shuffle_questions boolean DEFAULT false,
allow_calculator boolean DEFAULT true,
show_results boolean DEFAULT true,
allow_review boolean DEFAULT true,
shuffle_options boolean DEFAULT false,
max_attempts integer DEFAULT 1,
is_published boolean DEFAULT false,
coding_instructions text DEFAULT 'Write your code solution. Make sure to test your code thoroughly before submitting.'::text,
objective_instructions text DEFAULT 'Choose the correct answer(s) for each question. For multi-select questions, you may choose multiple options.'::text,
mixed_instructions text DEFAULT 'This assignment contains different types of questions. Read each question carefully and provide appropriate answers.'::text,
essay_instructions text DEFAULT 'Provide detailed written responses to the essay questions. Ensure your answers are well-structured and comprehensive.'::text,
require_fullscreen boolean DEFAULT false,
auto_submit_on_violation boolean DEFAULT false,
max_violations integer DEFAULT 3,
code_editor_settings jsonb DEFAULT '{"theme": "vs-dark", "autoSave": true, "fontSize": 14, "wordWrap": true, "autoSaveInterval": 30000}'::jsonb,
require_camera boolean DEFAULT false,
require_microphone boolean DEFAULT false,
require_face_verification boolean DEFAULT false,
proctoring_settings jsonb DEFAULT '{}'::jsonb,
start_date timestamp with time zone,
start_time timestamp with time zone,
CONSTRAINT assignments_assignment_type_check CHECK (((assignment_type)::text = ANY (ARRAY[('regular'::character varying)::text, ('objective'::character varying)::text, ('coding'::character varying)::text, ('essay'::character varying)::text]))),
CONSTRAINT assignments_target_audience_check CHECK (((target_audience)::text = ANY (ARRAY[('club'::character varying)::text, ('all_clubs'::character varying)::text, ('specific_clubs'::character varying)::text])))
);
--
-- Name: audit_logs; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.audit_logs (
id uuid DEFAULT gen_random_uuid() NOT NULL,
user_id uuid,
action character varying NOT NULL,
resource_type character varying NOT NULL,
resource_id uuid,
old_values jsonb,
new_values jsonb,
metadata jsonb DEFAULT '{}'::jsonb,
ip_address inet,
user_agent text,
created_at timestamp with time zone DEFAULT now()
);
--
-- Name: chat_attachments; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.chat_attachments (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
message_id uuid,
room_id uuid NOT NULL,
filename character varying NOT NULL,
original_filename character varying NOT NULL,
file_path character varying NOT NULL,
file_type character varying NOT NULL,
file_size integer NOT NULL,
mime_type character varying,
encryption_key text,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: chat_invitations; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.chat_invitations (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
room_id uuid NOT NULL,
inviter_id uuid NOT NULL,
invitee_email character varying NOT NULL,
invitation_token character varying NOT NULL,
message text,
status character varying DEFAULT 'pending'::character varying,
expires_at timestamp with time zone NOT NULL,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
accepted_at timestamp with time zone
);
--
-- Name: chat_messages; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.chat_messages (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
room_id uuid,
user_id uuid,
message text NOT NULL,
message_type character varying DEFAULT 'text'::character varying,
file_url text,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
reply_to_message_id uuid,
is_edited boolean DEFAULT false,
reply_to uuid,
sender_id uuid,
content text,
is_encrypted boolean DEFAULT false,
updated_at timestamp with time zone,
attachments jsonb DEFAULT '[]'::jsonb,
message_images jsonb DEFAULT '[]'::jsonb,
reactions jsonb DEFAULT '{}'::jsonb,
thread_id uuid,
edited_at timestamp with time zone,
edited_by uuid,
can_edit_until timestamp with time zone
);
--
-- Name: chat_room_members; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.chat_room_members (
id uuid DEFAULT gen_random_uuid() NOT NULL,
chat_room_id uuid,
user_id uuid,
joined_at timestamp with time zone DEFAULT now(),
role character varying DEFAULT 'member'::character varying,
user_email character varying
);
--
-- Name: chat_rooms; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.chat_rooms (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
name character varying NOT NULL,
description text,
club_id character varying,
type character varying DEFAULT 'public'::character varying,
created_by uuid,
members uuid[] DEFAULT '{}'::uuid[],
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
room_type character varying DEFAULT 'public'::character varying,
encryption_enabled boolean DEFAULT false,
cover_image_url text,
room_images jsonb DEFAULT '[]'::jsonb,
room_settings jsonb DEFAULT '{}'::jsonb,
profile_picture_url text,
edited_at timestamp with time zone,
edited_by uuid,
CONSTRAINT chat_room_type_check CHECK (((type)::text = ANY ((ARRAY['public'::character varying, 'club'::character varying])::text[])))
);
--
-- Name: club_members; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.club_members (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
user_id uuid NOT NULL,
club_id uuid NOT NULL,
is_leader boolean DEFAULT false,
joined_at timestamp with time zone DEFAULT now()
);
--
-- Name: club_statistics_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE public.club_statistics_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: club_statistics; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.club_statistics (
id integer DEFAULT nextval('public.club_statistics_id_seq'::regclass) NOT NULL,
club_id character varying,
member_count integer DEFAULT 0,
event_count integer DEFAULT 0,
assignment_count integer DEFAULT 0,
comment_count integer DEFAULT 0,
total_engagement integer DEFAULT 0,
average_engagement numeric DEFAULT 0,
last_updated timestamp with time zone DEFAULT now()
);
--
-- Name: clubs; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.clubs (
id character varying NOT NULL,
name character varying NOT NULL,
type character varying NOT NULL,
description text NOT NULL,
long_description text,
icon character varying NOT NULL,
color character varying NOT NULL,
coordinator_id uuid,
co_coordinator_id uuid,
secretary_id uuid,
media_id uuid,
guidelines text,
meeting_schedule jsonb DEFAULT '{}'::jsonb,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
logo_url text,
banner_image_url text,
club_images jsonb DEFAULT '[]'::jsonb,
member_count integer DEFAULT 0
);
--
-- Name: code_results; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.code_results (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
response_id uuid NOT NULL,
test_case_index integer,
passed boolean,
stdout text,
stderr text,
execution_time integer,
memory_used integer,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: coding_submissions; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.coding_submissions (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
question_response_id uuid NOT NULL,
language character varying NOT NULL,
code text NOT NULL,
is_final boolean DEFAULT false,
execution_result jsonb DEFAULT '{}'::jsonb,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: comments; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.comments (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
post_id uuid,
author_id uuid,
content text NOT NULL,
parent_id uuid,
likes_count integer DEFAULT 0,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: committee_members; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.committee_members (
id uuid DEFAULT gen_random_uuid() NOT NULL,
committee_id uuid NOT NULL,
role_id uuid NOT NULL,
user_id uuid NOT NULL,
status character varying DEFAULT 'active'::character varying,
joined_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
term_start timestamp with time zone,
term_end timestamp with time zone,
achievements jsonb,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: committee_roles; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.committee_roles (
id uuid DEFAULT gen_random_uuid() NOT NULL,
committee_id uuid NOT NULL,
name character varying NOT NULL,
description text,
hierarchy integer DEFAULT 1 NOT NULL,
permissions text[] DEFAULT '{}'::text[],
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: committees; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.committees (
id uuid DEFAULT gen_random_uuid() NOT NULL,
name character varying NOT NULL,
description text,
hierarchy_level integer DEFAULT 1 NOT NULL,
is_active boolean DEFAULT true,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: discussion_replies; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.discussion_replies (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
discussion_id uuid,
author_id uuid,
content text NOT NULL,
parent_id uuid,
likes_count integer DEFAULT 0,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: discussions; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.discussions (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
title character varying NOT NULL,
description text,
author_id uuid,
club_id character varying,
tags text[] DEFAULT '{}'::text[],
is_locked boolean DEFAULT false,
is_pinned boolean DEFAULT false,
views_count integer DEFAULT 0,
replies_count integer DEFAULT 0,
last_activity timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: email_logs; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.email_logs (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
recipient character varying NOT NULL,
subject character varying NOT NULL,
content_preview text,
status character varying DEFAULT 'sent'::character varying,
message_id character varying,
category character varying,
related_id uuid,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
sent_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
email_service character varying DEFAULT 'resend'::character varying,
error_message text,
updated_at timestamp with time zone DEFAULT now()
);
--
-- Name: event_attendees; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.event_attendees (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
event_id uuid,
user_id uuid,
registered_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
attendance_status character varying DEFAULT 'registered'::character varying
);
--
-- Name: event_registrations; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.event_registrations (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
event_id uuid,
user_id uuid,
status character varying DEFAULT 'registered'::character varying,
registration_data jsonb,
registered_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: events; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.events (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
title character varying NOT NULL,
description text NOT NULL,
club_id character varying,
created_by uuid,
event_date date NOT NULL,
event_time time without time zone NOT NULL,
location character varying NOT NULL,
max_attendees integer,
status character varying DEFAULT 'upcoming'::character varying,
image_url text,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
event_images jsonb DEFAULT '[]'::jsonb,
banner_image_url text,
gallery_images jsonb DEFAULT '[]'::jsonb
);
--
-- Name: likes; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.likes (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
post_id uuid,
user_id uuid,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: media_files; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.media_files (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
filename character varying NOT NULL,
original_filename character varying NOT NULL,
file_size integer NOT NULL,
mime_type character varying NOT NULL,
file_url text NOT NULL,
thumbnail_url text,
alt_text text,
description text,
uploaded_by uuid,
upload_context character varying,
upload_reference_id uuid,
is_public boolean DEFAULT true,
metadata jsonb DEFAULT '{}'::jsonb,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: messages; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.messages (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
chat_room_id uuid NOT NULL,
user_id uuid NOT NULL,
content text NOT NULL,
attachment_url text,
created_at timestamp with time zone DEFAULT now()
);
--
-- Name: notifications_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE public.notifications_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: notifications; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.notifications (
id integer DEFAULT nextval('public.notifications_id_seq'::regclass) NOT NULL,
user_id uuid NOT NULL,
type character varying NOT NULL,
title text,
message text NOT NULL,
link text,
read boolean DEFAULT false,
delivery_method character varying DEFAULT 'in-app'::character varying,
created_at timestamp with time zone DEFAULT now(),
sent_by character varying,
club_id character varying,
email_sent boolean DEFAULT false,
email_sent_at timestamp without time zone,
related_id uuid,
metadata jsonb DEFAULT '{}'::jsonb
);
--
-- Name: posts; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.posts (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
title character varying NOT NULL,
content text NOT NULL,
author_id uuid,
club_id character varying,
category character varying DEFAULT 'blog'::character varying,
post_type character varying DEFAULT 'blog'::character varying,
tags text[] DEFAULT '{}'::text[],
excerpt text,
reading_time_minutes integer DEFAULT 0,
featured_image_url text,
post_images jsonb DEFAULT '[]'::jsonb,
content_blocks jsonb DEFAULT '[]'::jsonb,
meta_description text,
slug character varying,
status character varying DEFAULT 'draft'::character varying,
is_featured boolean DEFAULT false,
is_pinned boolean DEFAULT false,
view_count integer DEFAULT 0,
likes_count integer DEFAULT 0,
published_at timestamp with time zone,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
edited_by uuid,
search_vector tsvector DEFAULT to_tsvector('english'::regconfig, ''::text)
);
--
-- Name: proctoring_sessions; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.proctoring_sessions (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
assignment_id uuid NOT NULL,
user_id uuid NOT NULL,
session_start timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
session_end timestamp with time zone,
camera_enabled boolean DEFAULT false,
microphone_enabled boolean DEFAULT false,
face_verified boolean DEFAULT false,
violations jsonb DEFAULT '[]'::jsonb,
screenshots jsonb DEFAULT '[]'::jsonb,
system_info jsonb DEFAULT '{}'::jsonb,
session_data jsonb DEFAULT '{}'::jsonb
);
--
-- Name: project_invitations; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.project_invitations (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
project_id uuid NOT NULL,
inviter_id uuid NOT NULL,
email character varying NOT NULL,
role character varying DEFAULT 'member'::character varying,
invitation_token character varying NOT NULL,
project_password character varying,
status character varying DEFAULT 'pending'::character varying,
message text,
expires_at timestamp with time zone DEFAULT (CURRENT_TIMESTAMP + '7 days'::interval) NOT NULL,
sent_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
accepted_at timestamp with time zone,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: project_members; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.project_members (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
project_id uuid NOT NULL,
user_id uuid NOT NULL,
role character varying DEFAULT 'member'::character varying,
status character varying DEFAULT 'active'::character varying,
joined_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
invited_by uuid,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: projects; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.projects (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
name character varying NOT NULL,
description text,
club_id character varying NOT NULL,
created_by uuid NOT NULL,
project_key character varying NOT NULL,
project_type character varying DEFAULT 'development'::character varying,
priority character varying DEFAULT 'medium'::character varying,
status character varying DEFAULT 'planning'::character varying,
start_date date,
target_end_date date,
actual_end_date date,
access_password character varying,
is_public boolean DEFAULT false,
progress_percentage numeric DEFAULT 0,
total_tasks integer DEFAULT 0,
completed_tasks integer DEFAULT 0,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: query_cache; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.query_cache (
cache_key text NOT NULL,
cache_value jsonb NOT NULL,
last_updated timestamp with time zone DEFAULT now(),
expires_at timestamp with time zone NOT NULL
);
--
-- Name: question_media; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.question_media (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
question_id uuid NOT NULL,
media_file_id uuid NOT NULL,
media_type character varying NOT NULL,
display_order integer DEFAULT 0,
is_primary boolean DEFAULT false,
caption text,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: question_options; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.question_options (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
question_id uuid NOT NULL,
option_text text NOT NULL,
is_correct boolean DEFAULT false,
ordering integer DEFAULT 0 NOT NULL,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: question_responses; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.question_responses (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
submission_id uuid NOT NULL,
question_id uuid NOT NULL,
selected_options uuid[],
code_answer text,
essay_answer text,
is_correct boolean,
score integer DEFAULT 0,
time_spent integer,
feedback text,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
selected_language character varying,
last_auto_save timestamp with time zone,
attempt_history jsonb DEFAULT '[]'::jsonb
);
--
-- Name: security_events; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.security_events (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
user_id uuid NOT NULL,
event_type character varying NOT NULL,
ip_address character varying,
device_info jsonb DEFAULT '{}'::jsonb,
event_data jsonb DEFAULT '{}'::jsonb,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: sessions; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.sessions (
id uuid DEFAULT gen_random_uuid() NOT NULL,
user_id uuid,
token character varying NOT NULL,
expires_at timestamp with time zone NOT NULL,
created_at timestamp with time zone DEFAULT now(),
last_active_at timestamp with time zone DEFAULT now(),
user_agent text,
ip_address character varying,
device_info jsonb DEFAULT '{}'::jsonb,
is_trusted boolean DEFAULT false,
requires_2fa boolean DEFAULT true,
has_completed_2fa boolean DEFAULT false
);
--
-- Name: system_statistics_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE public.system_statistics_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: system_statistics; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.system_statistics (
id integer DEFAULT nextval('public.system_statistics_id_seq'::regclass) NOT NULL,
active_users_count integer DEFAULT 0,
total_users_count integer DEFAULT 0,
total_clubs_count integer DEFAULT 0,
total_events_count integer DEFAULT 0,
total_assignments_count integer DEFAULT 0,
total_comments_count integer DEFAULT 0,
daily_active_users integer DEFAULT 0,
weekly_active_users integer DEFAULT 0,
monthly_active_users integer DEFAULT 0,
"timestamp" timestamp with time zone DEFAULT now()
);
--
-- Name: tasks; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.tasks (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
project_id uuid NOT NULL,
title character varying NOT NULL,
description text,
task_key character varying NOT NULL,
task_type character varying DEFAULT 'task'::character varying,
priority character varying DEFAULT 'medium'::character varying,
status character varying DEFAULT 'todo'::character varying,
assignee_id uuid,
reporter_id uuid NOT NULL,
parent_task_id uuid,
story_points integer,
time_spent_hours numeric DEFAULT 0,
due_date timestamp with time zone,
completed_date timestamp with time zone,
is_completed boolean DEFAULT false,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: trusted_devices; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.trusted_devices (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
user_id uuid NOT NULL,
device_identifier character varying NOT NULL,
device_name character varying NOT NULL,
device_type character varying,
browser character varying,
os character varying,
ip_address character varying,
last_used timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
expires_at timestamp with time zone DEFAULT (CURRENT_TIMESTAMP + '30 days'::interval),
trust_level character varying DEFAULT 'login_only'::character varying
);
--
-- Name: user_activities_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE public.user_activities_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: user_activities; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.user_activities (
id integer DEFAULT nextval('public.user_activities_id_seq'::regclass) NOT NULL,
user_id uuid,
action character varying NOT NULL,
target_type character varying NOT NULL,
target_id text,
target_name text,
details jsonb,
created_at timestamp with time zone DEFAULT now()
);
--
-- Name: user_badges; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.user_badges (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
user_id uuid,
badge_name character varying NOT NULL,
badge_description text,
badge_icon character varying,
earned_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: users; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.users (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
email character varying NOT NULL,
password_hash character varying NOT NULL,
name character varying NOT NULL,
username character varying,
avatar text,
role character varying DEFAULT 'student'::character varying NOT NULL,
club_id character varying,
bio text,
social_links jsonb DEFAULT '{}'::jsonb,
preferences jsonb DEFAULT '{}'::jsonb,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
profile_image_url text,
profile_images jsonb DEFAULT '[]'::jsonb,
verification_photo_url text,
phone_number character varying,
date_of_birth date,
address text,
emergency_contact jsonb DEFAULT '{}'::jsonb,
phone character varying,
location character varying,
website character varying,
github character varying,
linkedin character varying,
twitter character varying,
email_verified boolean DEFAULT false,
email_verification_token character varying,
email_verification_token_expires_at timestamp without time zone,
password_reset_token character varying,
password_reset_token_expires_at timestamp without time zone,
oauth_provider character varying,
oauth_id character varying,
oauth_data jsonb,
has_password boolean DEFAULT true,
totp_secret character varying,
totp_temp_secret character varying,
totp_temp_secret_created_at timestamp without time zone,
totp_enabled boolean DEFAULT false,
totp_enabled_at timestamp without time zone,
totp_recovery_codes jsonb,
notification_preferences jsonb DEFAULT '{"email": {"events": true, "results": true, "assignments": true, "discussions": true}}'::jsonb,
email_otp_enabled boolean DEFAULT false,
email_otp_verified boolean DEFAULT false,
email_otp_secret character varying,
email_otp_backup_codes jsonb DEFAULT '[]'::jsonb,
email_otp_last_used timestamp with time zone,
email_otp_created_at timestamp with time zone,
email_otp character(6),
email_otp_expires_at timestamp with time zone,
last_activity timestamp with time zone DEFAULT CURRENT_TIMESTAMP
);
--
-- Name: ai_assignment_generations ai_assignment_generations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.ai_assignment_generations
ADD CONSTRAINT ai_assignment_generations_pkey PRIMARY KEY (id);
--
-- Name: announcements announcements_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.announcements
ADD CONSTRAINT announcements_pkey PRIMARY KEY (id);
--
-- Name: assignment_attempts assignment_attempts_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.assignment_attempts
ADD CONSTRAINT assignment_attempts_pkey PRIMARY KEY (id);
--
-- Name: assignment_audit_log assignment_audit_log_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.assignment_audit_log
ADD CONSTRAINT assignment_audit_log_pkey PRIMARY KEY (id);
--
-- Name: assignment_questions assignment_questions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.assignment_questions
ADD CONSTRAINT assignment_questions_pkey PRIMARY KEY (id);
--
-- Name: assignment_submissions assignment_submissions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.assignment_submissions
ADD CONSTRAINT assignment_submissions_pkey PRIMARY KEY (id);
--
-- Name: assignment_templates assignment_templates_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.assignment_templates
ADD CONSTRAINT assignment_templates_pkey PRIMARY KEY (id);
--
-- Name: assignment_violations assignment_violations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.assignment_violations
ADD CONSTRAINT assignment_violations_pkey PRIMARY KEY (id);
--
-- Name: assignments assignments_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.assignments
ADD CONSTRAINT assignments_pkey PRIMARY KEY (id);
--
-- Name: audit_logs audit_logs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.audit_logs
ADD CONSTRAINT audit_logs_pkey PRIMARY KEY (id);
--
-- Name: chat_attachments chat_attachments_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.chat_attachments
ADD CONSTRAINT chat_attachments_pkey PRIMARY KEY (id);
--
-- Name: chat_invitations chat_invitations_invitation_token_key; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.chat_invitations
ADD CONSTRAINT chat_invitations_invitation_token_key UNIQUE (invitation_token);
--
-- Name: chat_invitations chat_invitations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.chat_invitations
ADD CONSTRAINT chat_invitations_pkey PRIMARY KEY (id);
--
-- Name: chat_messages chat_messages_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.chat_messages
ADD CONSTRAINT chat_messages_pkey PRIMARY KEY (id);
--
-- Name: chat_room_members chat_room_members_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.chat_room_members
ADD CONSTRAINT chat_room_members_pkey PRIMARY KEY (id);
--
-- Name: chat_rooms chat_rooms_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.chat_rooms
ADD CONSTRAINT chat_rooms_pkey PRIMARY KEY (id);
--
-- Name: club_members club_members_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.club_members
ADD CONSTRAINT club_members_pkey PRIMARY KEY (id);
--
-- Name: club_statistics club_statistics_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.club_statistics
ADD CONSTRAINT club_statistics_pkey PRIMARY KEY (id);
--
-- Name: clubs clubs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.clubs
ADD CONSTRAINT clubs_pkey PRIMARY KEY (id);
--
-- Name: code_results code_results_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.code_results
ADD CONSTRAINT code_results_pkey PRIMARY KEY (id);
--
-- Name: coding_submissions coding_submissions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.coding_submissions
ADD CONSTRAINT coding_submissions_pkey PRIMARY KEY (id);
--
-- Name: comments comments_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.comments
ADD CONSTRAINT comments_pkey PRIMARY KEY (id);
--
-- Name: committee_members committee_members_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.committee_members
ADD CONSTRAINT committee_members_pkey PRIMARY KEY (id);
--
-- Name: committee_roles committee_roles_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.committee_roles
ADD CONSTRAINT committee_roles_pkey PRIMARY KEY (id);
--
-- Name: committees committees_name_key; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.committees
ADD CONSTRAINT committees_name_key UNIQUE (name);
--
-- Name: committees committees_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.committees
ADD CONSTRAINT committees_pkey PRIMARY KEY (id);
--
-- Name: discussion_replies discussion_replies_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.discussion_replies
ADD CONSTRAINT discussion_replies_pkey PRIMARY KEY (id);
--
-- Name: discussions discussions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.discussions
ADD CONSTRAINT discussions_pkey PRIMARY KEY (id);
--
-- Name: email_logs email_logs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.email_logs
ADD CONSTRAINT email_logs_pkey PRIMARY KEY (id);
--
-- Name: event_attendees event_attendees_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.event_attendees
ADD CONSTRAINT event_attendees_pkey PRIMARY KEY (id);
--
-- Name: event_registrations event_registrations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.event_registrations
ADD CONSTRAINT event_registrations_pkey PRIMARY KEY (id);
--
-- Name: events events_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.events
ADD CONSTRAINT events_pkey PRIMARY KEY (id);
--
-- Name: likes likes_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.likes
ADD CONSTRAINT likes_pkey PRIMARY KEY (id);
--
-- Name: media_files media_files_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.media_files
ADD CONSTRAINT media_files_pkey PRIMARY KEY (id);
--
-- Name: messages messages_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.messages
ADD CONSTRAINT messages_pkey PRIMARY KEY (id);
--
-- Name: notifications notifications_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.notifications
ADD CONSTRAINT notifications_pkey PRIMARY KEY (id);
--
-- Name: posts posts_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.posts
ADD CONSTRAINT posts_pkey PRIMARY KEY (id);
--
-- Name: posts posts_slug_key; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.posts
ADD CONSTRAINT posts_slug_key UNIQUE (slug);
--
-- Name: proctoring_sessions proctoring_sessions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.proctoring_sessions
ADD CONSTRAINT proctoring_sessions_pkey PRIMARY KEY (id);
--
-- Name: project_invitations project_invitations_invitation_token_key; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.project_invitations
ADD CONSTRAINT project_invitations_invitation_token_key UNIQUE (invitation_token);
--
-- Name: project_invitations project_invitations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.project_invitations
ADD CONSTRAINT project_invitations_pkey PRIMARY KEY (id);
--
-- Name: project_members project_members_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.project_members
ADD CONSTRAINT project_members_pkey PRIMARY KEY (id);
--
-- Name: projects projects_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.projects
ADD CONSTRAINT projects_pkey PRIMARY KEY (id);
--
-- Name: query_cache query_cache_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.query_cache
ADD CONSTRAINT query_cache_pkey PRIMARY KEY (cache_key);
--
-- Name: question_media question_media_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.question_media
ADD CONSTRAINT question_media_pkey PRIMARY KEY (id);
--
-- Name: question_options question_options_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.question_options
ADD CONSTRAINT question_options_pkey PRIMARY KEY (id);
--
-- Name: question_responses question_responses_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.question_responses
ADD CONSTRAINT question_responses_pkey PRIMARY KEY (id);
--
-- Name: security_events security_events_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.security_events
ADD CONSTRAINT security_events_pkey PRIMARY KEY (id);
--
-- Name: sessions sessions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.sessions
ADD CONSTRAINT sessions_pkey PRIMARY KEY (id);
--
-- Name: sessions sessions_token_key; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.sessions
ADD CONSTRAINT sessions_token_key UNIQUE (token);
--
-- Name: system_statistics system_statistics_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.system_statistics
ADD CONSTRAINT system_statistics_pkey PRIMARY KEY (id);
--
-- Name: tasks tasks_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.tasks
ADD CONSTRAINT tasks_pkey PRIMARY KEY (id);
--
-- Name: trusted_devices trusted_devices_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.trusted_devices
ADD CONSTRAINT trusted_devices_pkey PRIMARY KEY (id);
--
-- Name: likes unique_post_user_like; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.likes
ADD CONSTRAINT unique_post_user_like UNIQUE (post_id, user_id);
--
-- Name: projects unique_project_key_club; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.projects
ADD CONSTRAINT unique_project_key_club UNIQUE (club_id, project_key);
--
-- Name: project_members unique_project_member; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.project_members
ADD CONSTRAINT unique_project_member UNIQUE (project_id, user_id);
--
-- Name: tasks unique_task_key_project; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.tasks
ADD CONSTRAINT unique_task_key_project UNIQUE (project_id, task_key);
--
-- Name: user_activities user_activities_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_activities
ADD CONSTRAINT user_activities_pkey PRIMARY KEY (id);
--
-- Name: user_badges user_badges_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.user_badges
ADD CONSTRAINT user_badges_pkey PRIMARY KEY (id);
--
-- Name: users users_email_key; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.users
ADD CONSTRAINT users_email_key UNIQUE (email);
--
-- Name: users users_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.users
ADD CONSTRAINT users_pkey PRIMARY KEY (id);
--
-- Name: idx_ai_generations_assignment_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_ai_generations_assignment_id ON public.ai_assignment_generations USING btree (generated_assignment_id);
--
-- Name: idx_ai_generations_created_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_ai_generations_created_at ON public.ai_assignment_generations USING btree (created_at);
--
-- Name: idx_ai_generations_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_ai_generations_status ON public.ai_assignment_generations USING btree (generation_status);
--
-- Name: idx_ai_generations_template_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_ai_generations_template_id ON public.ai_assignment_generations USING btree (template_id);
--
-- Name: idx_assignment_attempts_assignment_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignment_attempts_assignment_id ON public.assignment_attempts USING btree (assignment_id);
--
-- Name: idx_assignment_attempts_assignment_user; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignment_attempts_assignment_user ON public.assignment_attempts USING btree (assignment_id, user_id);
--
-- Name: idx_assignment_attempts_auto_save; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignment_attempts_auto_save ON public.assignment_attempts USING btree (assignment_id, user_id, last_auto_save);
--
-- Name: idx_assignment_attempts_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignment_attempts_status ON public.assignment_attempts USING btree (status);
--
-- Name: idx_assignment_attempts_submitted_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignment_attempts_submitted_at ON public.assignment_attempts USING btree (submitted_at);
--
-- Name: idx_assignment_attempts_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignment_attempts_user_id ON public.assignment_attempts USING btree (user_id);
--
-- Name: idx_assignment_attempts_user_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignment_attempts_user_status ON public.assignment_attempts USING btree (user_id, status, submitted_at DESC);
--
-- Name: idx_assignment_attempts_violations; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignment_attempts_violations ON public.assignment_attempts USING btree (assignment_id, window_violations);
--
-- Name: idx_assignment_audit_log_assignment; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignment_audit_log_assignment ON public.assignment_audit_log USING btree (assignment_id);
--
-- Name: idx_assignment_questions_assignment_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignment_questions_assignment_id ON public.assignment_questions USING btree (assignment_id);
--
-- Name: idx_assignment_questions_correct_answer_jsonb; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignment_questions_correct_answer_jsonb ON public.assignment_questions USING gin (correct_answer);
--
-- Name: idx_assignment_questions_language_settings; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignment_questions_language_settings ON public.assignment_questions USING btree (code_language, allow_any_language);
--
-- Name: idx_assignment_submissions_unique; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX idx_assignment_submissions_unique ON public.assignment_submissions USING btree (assignment_id, user_id);
--
-- Name: idx_assignment_submissions_user_submitted; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignment_submissions_user_submitted ON public.assignment_submissions USING btree (user_id, submitted_at DESC);
--
-- Name: idx_assignment_templates_category; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignment_templates_category ON public.assignment_templates USING btree (category);
--
-- Name: idx_assignment_templates_created_by; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignment_templates_created_by ON public.assignment_templates USING btree (created_by);
--
-- Name: idx_assignment_templates_difficulty; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignment_templates_difficulty ON public.assignment_templates USING btree (difficulty_level);
--
-- Name: idx_assignment_templates_subject; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignment_templates_subject ON public.assignment_templates USING btree (subject);
--
-- Name: idx_assignment_violations_submission_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignment_violations_submission_id ON public.assignment_violations USING btree (submission_id);
--
-- Name: idx_assignments_club_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignments_club_id ON public.assignments USING btree (club_id);
--
-- Name: idx_assignments_created_by; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignments_created_by ON public.assignments USING btree (created_by);
--
-- Name: idx_assignments_due_date; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignments_due_date ON public.assignments USING btree (due_date);
--
-- Name: idx_assignments_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignments_status ON public.assignments USING btree (status);
--
-- Name: idx_assignments_type; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_assignments_type ON public.assignments USING btree (assignment_type);
--
-- Name: idx_attempts_assignment_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_attempts_assignment_status ON public.assignment_attempts USING btree (assignment_id, status);
--
-- Name: idx_attempts_user_assignment; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_attempts_user_assignment ON public.assignment_attempts USING btree (user_id, assignment_id, attempt_number);
--
-- Name: idx_audit_logs_created_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_audit_logs_created_at ON public.audit_logs USING btree (created_at);
--
-- Name: idx_audit_logs_resource_type; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_audit_logs_resource_type ON public.audit_logs USING btree (resource_type);
--
-- Name: idx_audit_logs_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_audit_logs_user_id ON public.audit_logs USING btree (user_id);
--
-- Name: idx_chat_messages_can_edit_until; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_chat_messages_can_edit_until ON public.chat_messages USING btree (can_edit_until);
--
-- Name: idx_chat_messages_created_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_chat_messages_created_at ON public.chat_messages USING btree (created_at);
--
-- Name: idx_chat_messages_edited_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_chat_messages_edited_at ON public.chat_messages USING btree (edited_at);
--
-- Name: idx_chat_messages_room_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_chat_messages_room_id ON public.chat_messages USING btree (room_id);
--
-- Name: idx_chat_messages_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_chat_messages_user_id ON public.chat_messages USING btree (user_id);
--
-- Name: idx_chat_room_members_chat_room_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_chat_room_members_chat_room_id ON public.chat_room_members USING btree (chat_room_id);
--
-- Name: idx_chat_room_members_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_chat_room_members_user_id ON public.chat_room_members USING btree (user_id);
--
-- Name: idx_chat_rooms_profile_picture; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_chat_rooms_profile_picture ON public.chat_rooms USING btree (profile_picture_url);
--
-- Name: idx_club_members_club_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_club_members_club_id ON public.club_members USING btree (club_id);
--
-- Name: idx_club_members_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_club_members_user_id ON public.club_members USING btree (user_id);
--
-- Name: idx_clubs_coordinator_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_clubs_coordinator_id ON public.clubs USING btree (coordinator_id);
--
-- Name: idx_clubs_type; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_clubs_type ON public.clubs USING btree (type);
--
-- Name: idx_coding_submissions_question_response_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_coding_submissions_question_response_id ON public.coding_submissions USING btree (question_response_id);
--
-- Name: idx_comments_author_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_comments_author_id ON public.comments USING btree (author_id);
--
-- Name: idx_comments_post_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_comments_post_id ON public.comments USING btree (post_id);
--
-- Name: idx_committee_members_committee_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_committee_members_committee_id ON public.committee_members USING btree (committee_id);
--
-- Name: idx_committee_members_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_committee_members_user_id ON public.committee_members USING btree (user_id);
--
-- Name: idx_committee_roles_committee_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_committee_roles_committee_id ON public.committee_roles USING btree (committee_id);
--
-- Name: idx_email_logs_created_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_email_logs_created_at ON public.email_logs USING btree (created_at);
--
-- Name: idx_email_logs_recipient; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_email_logs_recipient ON public.email_logs USING btree (recipient);
--
-- Name: idx_email_logs_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_email_logs_status ON public.email_logs USING btree (status);
--
-- Name: idx_event_attendees_event_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_event_attendees_event_id ON public.event_attendees USING btree (event_id);
--
-- Name: idx_event_attendees_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_event_attendees_user_id ON public.event_attendees USING btree (user_id);
--
-- Name: idx_events_club_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_events_club_id ON public.events USING btree (club_id);
--
-- Name: idx_events_created_by; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_events_created_by ON public.events USING btree (created_by);
--
-- Name: idx_events_event_date; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_events_event_date ON public.events USING btree (event_date);
--
-- Name: idx_likes_post_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_likes_post_id ON public.likes USING btree (post_id);
--
-- Name: idx_likes_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_likes_user_id ON public.likes USING btree (user_id);
--
-- Name: idx_media_files_upload_context; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_media_files_upload_context ON public.media_files USING btree (upload_context);
--
-- Name: idx_media_files_uploaded_by; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_media_files_uploaded_by ON public.media_files USING btree (uploaded_by);
--
-- Name: idx_notifications_created_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_notifications_created_at ON public.notifications USING btree (created_at);
--
-- Name: idx_notifications_read; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_notifications_read ON public.notifications USING btree (read);
--
-- Name: idx_notifications_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_notifications_user_id ON public.notifications USING btree (user_id);
--
-- Name: idx_posts_author_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_posts_author_id ON public.posts USING btree (author_id);
--
-- Name: idx_posts_club_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_posts_club_id ON public.posts USING btree (club_id);
--
-- Name: idx_posts_created_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_posts_created_at ON public.posts USING btree (created_at);
--
-- Name: idx_posts_search_vector; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_posts_search_vector ON public.posts USING gin (search_vector);
--
-- Name: idx_posts_slug; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_posts_slug ON public.posts USING btree (slug);
--
-- Name: idx_posts_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_posts_status ON public.posts USING btree (status);
--
-- Name: idx_project_members_project_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_project_members_project_id ON public.project_members USING btree (project_id);
--
-- Name: idx_project_members_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_project_members_user_id ON public.project_members USING btree (user_id);
--
-- Name: idx_projects_club_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_projects_club_id ON public.projects USING btree (club_id);
--
-- Name: idx_projects_created_by; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_projects_created_by ON public.projects USING btree (created_by);
--
-- Name: idx_projects_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_projects_status ON public.projects USING btree (status);
--
-- Name: idx_question_responses_question_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_question_responses_question_id ON public.question_responses USING btree (question_id);
--
-- Name: idx_question_responses_submission_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_question_responses_submission_id ON public.question_responses USING btree (submission_id);
--
-- Name: idx_questions_assignment_order; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_questions_assignment_order ON public.assignment_questions USING btree (assignment_id, question_order);
--
-- Name: idx_questions_type; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_questions_type ON public.assignment_questions USING btree (question_type);
--
-- Name: idx_security_events_event_type; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_security_events_event_type ON public.security_events USING btree (event_type);
--
-- Name: idx_security_events_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_security_events_user_id ON public.security_events USING btree (user_id);
--
-- Name: idx_sessions_expires_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_sessions_expires_at ON public.sessions USING btree (expires_at);
--
-- Name: idx_sessions_token; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_sessions_token ON public.sessions USING btree (token);
--
-- Name: idx_sessions_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_sessions_user_id ON public.sessions USING btree (user_id);
--
-- Name: idx_submissions_assignment_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_submissions_assignment_status ON public.assignment_submissions USING btree (assignment_id, status);
--
-- Name: idx_submissions_status_submitted; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_submissions_status_submitted ON public.assignment_submissions USING btree (status, submitted_at DESC);
--
-- Name: idx_submissions_user_submitted; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_submissions_user_submitted ON public.assignment_submissions USING btree (user_id, submitted_at DESC);
--
-- Name: idx_tasks_assignee_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_tasks_assignee_id ON public.tasks USING btree (assignee_id);
--
-- Name: idx_tasks_due_date; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_tasks_due_date ON public.tasks USING btree (due_date);
--
-- Name: idx_tasks_project_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_tasks_project_id ON public.tasks USING btree (project_id);
--
-- Name: idx_tasks_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_tasks_status ON public.tasks USING btree (status);
--
-- Name: idx_trusted_devices_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_trusted_devices_user_id ON public.trusted_devices USING btree (user_id);
--
-- Name: idx_user_activities_created_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_user_activities_created_at ON public.user_activities USING btree (created_at);
--
-- Name: idx_user_activities_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_user_activities_user_id ON public.user_activities USING btree (user_id);
--
-- Name: idx_users_club_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_users_club_id ON public.users USING btree (club_id);
--
-- Name: idx_users_created_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_users_created_at ON public.users USING btree (created_at);
--
-- Name: idx_users_email; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_users_email ON public.users USING btree (email);
--
-- Name: idx_users_last_activity; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_users_last_activity ON public.users USING btree (last_activity);
--
-- Name: idx_users_role; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX idx_users_role ON public.users USING btree (role);
--
-- Name: posts posts_search_vector_update; Type: TRIGGER; Schema: public; Owner: -
--
CREATE TRIGGER posts_search_vector_update BEFORE INSERT OR UPDATE ON public.posts FOR EACH ROW EXECUTE FUNCTION public.update_post_search_vector();
--
-- Name: tasks tasks_generate_key; Type: TRIGGER; Schema: public; Owner: -
--
CREATE TRIGGER tasks_generate_key BEFORE INSERT ON public.tasks FOR EACH ROW WHEN (((new.task_key IS NULL) OR ((new.task_key)::text = ''::text))) EXECUTE FUNCTION public.generate_task_key();
--
-- Name: tasks tasks_update_project_progress; Type: TRIGGER; Schema: public; Owner: -
--
CREATE TRIGGER tasks_update_project_progress AFTER INSERT OR DELETE OR UPDATE ON public.tasks FOR EACH ROW EXECUTE FUNCTION public.update_project_progress();
--
-- Name: assignments update_assignments_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
CREATE TRIGGER update_assignments_updated_at BEFORE UPDATE ON public.assignments FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
--
-- Name: clubs update_clubs_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
CREATE TRIGGER update_clubs_updated_at BEFORE UPDATE ON public.clubs FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
--
-- Name: comments update_comments_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
CREATE TRIGGER update_comments_updated_at BEFORE UPDATE ON public.comments FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
--
-- Name: committee_members update_committee_members_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
CREATE TRIGGER update_committee_members_updated_at BEFORE UPDATE ON public.committee_members FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
--
-- Name: committee_roles update_committee_roles_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
CREATE TRIGGER update_committee_roles_updated_at BEFORE UPDATE ON public.committee_roles FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
--
-- Name: committees update_committees_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
CREATE TRIGGER update_committees_updated_at BEFORE UPDATE ON public.committees FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
--
-- Name: events update_events_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
CREATE TRIGGER update_events_updated_at BEFORE UPDATE ON public.events FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
--
-- Name: posts update_posts_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
CREATE TRIGGER update_posts_updated_at BEFORE UPDATE ON public.posts FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
--
-- Name: projects update_projects_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
CREATE TRIGGER update_projects_updated_at BEFORE UPDATE ON public.projects FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
--
-- Name: tasks update_tasks_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
CREATE TRIGGER update_tasks_updated_at BEFORE UPDATE ON public.tasks FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
--
-- Name: users update_users_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
CREATE TRIGGER update_users_updated_at BEFORE UPDATE ON public.users FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
--
-- Name: chat_messages fk_chat_messages_edited_by; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.chat_messages
ADD CONSTRAINT fk_chat_messages_edited_by FOREIGN KEY (edited_by) REFERENCES public.users(id);
--
-- Name: chat_rooms fk_chat_rooms_edited_by; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.chat_rooms
ADD CONSTRAINT fk_chat_rooms_edited_by FOREIGN KEY (edited_by) REFERENCES public.users(id);
--
-- PostgreSQL database dump complete
--