-- CreateTable CREATE TABLE "users" ( "id" SERIAL NOT NULL, "username" VARCHAR(50) NOT NULL, "email" VARCHAR(255) NOT NULL, "password_hash" VARCHAR(255) NOT NULL, "avatar" VARCHAR(255), "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "users_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "events" ( "id" SERIAL NOT NULL, "name" VARCHAR(255) NOT NULL, "location" VARCHAR(255) NOT NULL, "start_date" DATE NOT NULL, "end_date" DATE NOT NULL, "worldsdc_id" VARCHAR(100), "participants_count" INTEGER NOT NULL DEFAULT 0, "description" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "events_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "chat_rooms" ( "id" SERIAL NOT NULL, "event_id" INTEGER, "type" VARCHAR(20) NOT NULL, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "chat_rooms_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "messages" ( "id" SERIAL NOT NULL, "room_id" INTEGER NOT NULL, "user_id" INTEGER NOT NULL, "content" TEXT NOT NULL, "type" VARCHAR(20) NOT NULL, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "messages_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "matches" ( "id" SERIAL NOT NULL, "user1_id" INTEGER NOT NULL, "user2_id" INTEGER NOT NULL, "event_id" INTEGER NOT NULL, "room_id" INTEGER, "status" VARCHAR(20) NOT NULL DEFAULT 'pending', "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "matches_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "ratings" ( "id" SERIAL NOT NULL, "match_id" INTEGER NOT NULL, "rater_id" INTEGER NOT NULL, "rated_id" INTEGER NOT NULL, "score" INTEGER NOT NULL, "comment" TEXT, "would_collaborate_again" BOOLEAN NOT NULL DEFAULT false, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "ratings_pkey" PRIMARY KEY ("id") ); -- CreateIndex CREATE UNIQUE INDEX "users_username_key" ON "users"("username"); -- CreateIndex CREATE UNIQUE INDEX "users_email_key" ON "users"("email"); -- CreateIndex CREATE UNIQUE INDEX "events_worldsdc_id_key" ON "events"("worldsdc_id"); -- CreateIndex CREATE INDEX "messages_room_id_idx" ON "messages"("room_id"); -- CreateIndex CREATE INDEX "messages_created_at_idx" ON "messages"("created_at"); -- CreateIndex CREATE INDEX "matches_user1_id_idx" ON "matches"("user1_id"); -- CreateIndex CREATE INDEX "matches_user2_id_idx" ON "matches"("user2_id"); -- CreateIndex CREATE INDEX "matches_event_id_idx" ON "matches"("event_id"); -- CreateIndex CREATE UNIQUE INDEX "matches_user1_id_user2_id_event_id_key" ON "matches"("user1_id", "user2_id", "event_id"); -- CreateIndex CREATE INDEX "ratings_rated_id_idx" ON "ratings"("rated_id"); -- CreateIndex CREATE UNIQUE INDEX "ratings_match_id_rater_id_rated_id_key" ON "ratings"("match_id", "rater_id", "rated_id"); -- AddForeignKey ALTER TABLE "chat_rooms" ADD CONSTRAINT "chat_rooms_event_id_fkey" FOREIGN KEY ("event_id") REFERENCES "events"("id") ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "messages" ADD CONSTRAINT "messages_room_id_fkey" FOREIGN KEY ("room_id") REFERENCES "chat_rooms"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "messages" ADD CONSTRAINT "messages_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "matches" ADD CONSTRAINT "matches_user1_id_fkey" FOREIGN KEY ("user1_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "matches" ADD CONSTRAINT "matches_user2_id_fkey" FOREIGN KEY ("user2_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "matches" ADD CONSTRAINT "matches_event_id_fkey" FOREIGN KEY ("event_id") REFERENCES "events"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "matches" ADD CONSTRAINT "matches_room_id_fkey" FOREIGN KEY ("room_id") REFERENCES "chat_rooms"("id") ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "ratings" ADD CONSTRAINT "ratings_match_id_fkey" FOREIGN KEY ("match_id") REFERENCES "matches"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "ratings" ADD CONSTRAINT "ratings_rater_id_fkey" FOREIGN KEY ("rater_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "ratings" ADD CONSTRAINT "ratings_rated_id_fkey" FOREIGN KEY ("rated_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;