Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
compose/repositories
2 changes: 1 addition & 1 deletion docker compose/deploy.sh → compose/deploy.sh
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/sh
#!/bin/bash

# List of repository URLs
REPOS=(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ services:
timeout: 10s
retries: 5
db:
image: postgres:17
image: postgres:16.4
ports:
- "5431:5432"
environment:
Expand All @@ -53,6 +53,8 @@ services:
interval: 30s
timeout: 10s
retries: 5
# volumes:
# - ./init.sql:/docker-entrypoint-initdb.d/init.sql
worker:
build: ./repositories/worker
depends_on:
Expand All @@ -71,6 +73,11 @@ services:
- "3000:3000"
depends_on:
- backend
- file-storage
environment:
- DATABASE_URL=postgres://postgres:password@db:5432/maxit/
- FILESTORAGE_URL=http://file-storage:8888
- BACKEND_URL=http://backend:8000
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000"]
interval: 30s
Expand Down
194 changes: 194 additions & 0 deletions compose/init.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
CREATE TYPE "public"."language_type" AS ENUM('CPP', 'C', 'Python');--> statement-breakpoint
CREATE TYPE "public"."user_solution_result_status" AS ENUM('succes', 'failed', 'InternalError');--> statement-breakpoint
CREATE TYPE "public"."user_solution_status" AS ENUM('submitted', 'queued', 'executed');--> statement-breakpoint
CREATE TYPE "public"."user_role" AS ENUM('student', 'teacher', 'admin');--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "groups" (
"id" serial PRIMARY KEY NOT NULL,
"name" varchar(255) NOT NULL
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "input_output" (
"id" serial PRIMARY KEY NOT NULL,
"task_id" integer,
"order" integer NOT NULL,
"time_limit" real NOT NULL,
"memory_limit" real NOT NULL
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "language_config" (
"id" serial PRIMARY KEY NOT NULL,
"type" varchar(50) NOT NULL,
"version" varchar(50) NOT NULL
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "queue_messages" (
"id" text PRIMARY KEY NOT NULL,
"user_solution_id" integer,
"queued_at" timestamp with time zone DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "session" (
"id" text PRIMARY KEY NOT NULL,
"user_id" integer NOT NULL,
"expires_at" timestamp with time zone NOT NULL
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "submission_results" (
"id" serial PRIMARY KEY NOT NULL,
"user_solution_id" integer,
"status_code" "user_solution_result_status" NOT NULL,
"message" varchar(255),
"created_at" timestamp with time zone DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "submissions" (
"id" serial PRIMARY KEY NOT NULL,
"task_id" integer,
"user_id" integer,
"order" integer NOT NULL,
"language_id" integer,
"status" "user_solution_status" NOT NULL,
"submitted_at" timestamp with time zone DEFAULT now(),
"checked_at" timestamp with time zone
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "task_group" (
"task_id" integer,
"group_id" integer,
CONSTRAINT "task_group_task_id_group_id_pk" PRIMARY KEY("task_id","group_id")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "task_user" (
"task_id" integer,
"user_id" integer,
CONSTRAINT "task_user_task_id_user_id_pk" PRIMARY KEY("task_id","user_id")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "tasks" (
"id" serial PRIMARY KEY NOT NULL,
"name" text NOT NULL,
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
"created_by_id" integer NOT NULL
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "test_results" (
"id" serial PRIMARY KEY NOT NULL,
"user_solution_result_id" integer,
"input_output_id" integer,
"passed" boolean NOT NULL,
"error_message" varchar
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "user_group" (
"user_id" integer,
"group_id" integer,
CONSTRAINT "user_group_user_id_group_id_pk" PRIMARY KEY("user_id","group_id")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "users" (
"id" serial PRIMARY KEY NOT NULL,
"name" text NOT NULL,
"surname" text NOT NULL,
"email" text NOT NULL,
"username" text NOT NULL,
"password_hash" text NOT NULL,
CONSTRAINT "users_email_unique" UNIQUE("email"),
CONSTRAINT "users_username_unique" UNIQUE("username")
);
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "input_output" ADD CONSTRAINT "input_output_task_id_tasks_id_fk" FOREIGN KEY ("task_id") REFERENCES "public"."tasks"("id") ON DELETE no action ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "queue_messages" ADD CONSTRAINT "queue_messages_user_solution_id_submissions_id_fk" FOREIGN KEY ("user_solution_id") REFERENCES "public"."submissions"("id") ON DELETE no action ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "session" ADD CONSTRAINT "session_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "submission_results" ADD CONSTRAINT "submission_results_user_solution_id_submissions_id_fk" FOREIGN KEY ("user_solution_id") REFERENCES "public"."submissions"("id") ON DELETE no action ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "submissions" ADD CONSTRAINT "submissions_task_id_tasks_id_fk" FOREIGN KEY ("task_id") REFERENCES "public"."tasks"("id") ON DELETE no action ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "submissions" ADD CONSTRAINT "submissions_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "submissions" ADD CONSTRAINT "submissions_language_id_language_config_id_fk" FOREIGN KEY ("language_id") REFERENCES "public"."language_config"("id") ON DELETE no action ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "task_group" ADD CONSTRAINT "task_group_task_id_tasks_id_fk" FOREIGN KEY ("task_id") REFERENCES "public"."tasks"("id") ON DELETE no action ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "task_group" ADD CONSTRAINT "task_group_group_id_groups_id_fk" FOREIGN KEY ("group_id") REFERENCES "public"."groups"("id") ON DELETE no action ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "task_user" ADD CONSTRAINT "task_user_task_id_tasks_id_fk" FOREIGN KEY ("task_id") REFERENCES "public"."tasks"("id") ON DELETE no action ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "task_user" ADD CONSTRAINT "task_user_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "tasks" ADD CONSTRAINT "tasks_created_by_id_users_id_fk" FOREIGN KEY ("created_by_id") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "test_results" ADD CONSTRAINT "test_results_user_solution_result_id_submission_results_id_fk" FOREIGN KEY ("user_solution_result_id") REFERENCES "public"."submission_results"("id") ON DELETE no action ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "test_results" ADD CONSTRAINT "test_results_input_output_id_input_output_id_fk" FOREIGN KEY ("input_output_id") REFERENCES "public"."input_output"("id") ON DELETE no action ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "user_group" ADD CONSTRAINT "user_group_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "user_group" ADD CONSTRAINT "user_group_group_id_groups_id_fk" FOREIGN KEY ("group_id") REFERENCES "public"."groups"("id") ON DELETE no action ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;