diff --git a/apps/backend/prisma/migrations/20260617074743_refresh_token_cleanup_indexes/migration.sql b/apps/backend/prisma/migrations/20260617074743_refresh_token_cleanup_indexes/migration.sql deleted file mode 100644 index 94fcab49..00000000 --- a/apps/backend/prisma/migrations/20260617074743_refresh_token_cleanup_indexes/migration.sql +++ /dev/null @@ -1,168 +0,0 @@ -/* - Warnings: - - - You are about to drop the column `provider` on the `users` table. All the data in the column will be lost. - - You are about to drop the column `provider_id` on the `users` table. All the data in the column will be lost. - - A unique constraint covering the columns `[phone_number]` on the table `users` will be added. If there are existing duplicate values, this will fail. - -*/ --- CreateEnum -CREATE TYPE "Role" AS ENUM ('SUPERADMIN', 'ADMIN', 'USER'); - --- CreateEnum -CREATE TYPE "TeamRole" AS ENUM ('OWNER', 'ADMIN', 'MEMBER'); - --- DropIndex -DROP INDEX "users_provider_provider_id_key"; - --- AlterTable -ALTER TABLE "users" DROP COLUMN "provider", -DROP COLUMN "provider_id", -ADD COLUMN "authRole" "Role" NOT NULL DEFAULT 'USER', -ADD COLUMN "email_verified" BOOLEAN NOT NULL DEFAULT false, -ADD COLUMN "isActive" BOOLEAN NOT NULL DEFAULT false, -ADD COLUMN "last_sign_in_at" TIMESTAMP(3), -ADD COLUMN "phone_number" TEXT; - --- CreateTable -CREATE TABLE "user_identities" ( - "id" TEXT NOT NULL, - "user_id" TEXT NOT NULL, - "provider" TEXT NOT NULL, - "provider_id" TEXT NOT NULL, - "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - - CONSTRAINT "user_identities_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "refresh_tokens" ( - "id" TEXT NOT NULL, - "user_id" TEXT NOT NULL, - "token_hash" TEXT NOT NULL, - "family" TEXT NOT NULL, - "expires_at" TIMESTAMP(3) NOT NULL, - "revoked_at" TIMESTAMP(3), - "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - "user_agent" TEXT, - "ip" TEXT, - - CONSTRAINT "refresh_tokens_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "Event" ( - "id" TEXT NOT NULL, - "name" TEXT NOT NULL, - "slug" TEXT NOT NULL, - "location" TEXT NOT NULL, - "description" TEXT, - "organizerId" TEXT NOT NULL, - "startDate" TIMESTAMP(3) NOT NULL, - "endDate" TIMESTAMP(3) NOT NULL, - "isPublic" BOOLEAN NOT NULL DEFAULT true, - "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - - CONSTRAINT "Event_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "EventAttendee" ( - "id" TEXT NOT NULL, - "userId" TEXT NOT NULL, - "eventId" TEXT NOT NULL, - "joinedAt" TIMESTAMP(3) NOT NULL, - - CONSTRAINT "EventAttendee_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "teams" ( - "id" TEXT NOT NULL, - "name" TEXT NOT NULL, - "slug" TEXT NOT NULL, - "description" TEXT, - "avatarUrl" TEXT, - "ownerId" TEXT NOT NULL, - "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" TIMESTAMP(3) NOT NULL, - - CONSTRAINT "teams_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "team_members" ( - "id" TEXT NOT NULL, - "teamId" TEXT NOT NULL, - "userId" TEXT NOT NULL, - "role" "TeamRole" NOT NULL, - "joinedAt" TIMESTAMP(3) NOT NULL, - - CONSTRAINT "team_members_pkey" PRIMARY KEY ("id") -); - --- CreateIndex -CREATE INDEX "user_identities_user_id_idx" ON "user_identities"("user_id"); - --- CreateIndex -CREATE UNIQUE INDEX "user_identities_provider_provider_id_key" ON "user_identities"("provider", "provider_id"); - --- CreateIndex -CREATE UNIQUE INDEX "refresh_tokens_token_hash_key" ON "refresh_tokens"("token_hash"); - --- CreateIndex -CREATE INDEX "refresh_tokens_user_id_idx" ON "refresh_tokens"("user_id"); - --- CreateIndex -CREATE INDEX "refresh_tokens_family_idx" ON "refresh_tokens"("family"); - --- CreateIndex -CREATE INDEX "refresh_tokens_expires_at_idx" ON "refresh_tokens"("expires_at"); - --- CreateIndex -CREATE INDEX "refresh_tokens_revoked_at_idx" ON "refresh_tokens"("revoked_at"); - --- CreateIndex -CREATE UNIQUE INDEX "Event_slug_key" ON "Event"("slug"); - --- CreateIndex -CREATE UNIQUE INDEX "EventAttendee_userId_eventId_key" ON "EventAttendee"("userId", "eventId"); - --- CreateIndex -CREATE UNIQUE INDEX "teams_slug_key" ON "teams"("slug"); - --- CreateIndex -CREATE INDEX "teams_slug_idx" ON "teams"("slug"); - --- CreateIndex -CREATE INDEX "team_members_userId_idx" ON "team_members"("userId"); - --- CreateIndex -CREATE UNIQUE INDEX "team_members_userId_teamId_key" ON "team_members"("userId", "teamId"); - --- CreateIndex -CREATE UNIQUE INDEX "users_phone_number_key" ON "users"("phone_number"); - --- AddForeignKey -ALTER TABLE "user_identities" ADD CONSTRAINT "user_identities_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "refresh_tokens" ADD CONSTRAINT "refresh_tokens_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "Event" ADD CONSTRAINT "Event_organizerId_fkey" FOREIGN KEY ("organizerId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "EventAttendee" ADD CONSTRAINT "EventAttendee_eventId_fkey" FOREIGN KEY ("eventId") REFERENCES "Event"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "EventAttendee" ADD CONSTRAINT "EventAttendee_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "teams" ADD CONSTRAINT "teams_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "team_members" ADD CONSTRAINT "team_members_teamId_fkey" FOREIGN KEY ("teamId") REFERENCES "teams"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "team_members" ADD CONSTRAINT "team_members_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/apps/backend/prisma/migrations/20260710165413_fresh_db/migration.sql b/apps/backend/prisma/migrations/20260710165413_fresh_db/migration.sql new file mode 100644 index 00000000..7482fd03 --- /dev/null +++ b/apps/backend/prisma/migrations/20260710165413_fresh_db/migration.sql @@ -0,0 +1,356 @@ +-- CreateEnum +CREATE TYPE "Role" AS ENUM ('SUPERADMIN', 'ADMIN', 'USER'); + +-- CreateEnum +CREATE TYPE "CardVisibility" AS ENUM ('PUBLIC', 'UNLISTED', 'PRIVATE'); + +-- CreateEnum +CREATE TYPE "TeamRole" AS ENUM ('OWNER', 'ADMIN', 'MEMBER'); + +-- CreateTable +CREATE TABLE "users" ( + "id" TEXT NOT NULL, + "email" TEXT NOT NULL, + "username" TEXT NOT NULL, + "display_name" TEXT NOT NULL, + "bio" TEXT, + "pronouns" TEXT, + "role" TEXT, + "authRole" "Role" NOT NULL DEFAULT 'USER', + "company" TEXT, + "avatar_url" TEXT, + "accent_color" TEXT NOT NULL DEFAULT '#6366f1', + "email_verified" BOOLEAN NOT NULL DEFAULT false, + "phone_number" TEXT, + "last_sign_in_at" TIMESTAMP(3), + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(3) NOT NULL, + "isActive" BOOLEAN NOT NULL DEFAULT false, + + CONSTRAINT "users_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "user_identities" ( + "id" TEXT NOT NULL, + "user_id" TEXT NOT NULL, + "provider" TEXT NOT NULL, + "provider_id" TEXT NOT NULL, + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "user_identities_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "refresh_tokens" ( + "id" TEXT NOT NULL, + "user_id" TEXT NOT NULL, + "token_hash" TEXT NOT NULL, + "family" TEXT NOT NULL, + "expires_at" TIMESTAMP(3) NOT NULL, + "revoked_at" TIMESTAMP(3), + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "user_agent" TEXT, + "ip" TEXT, + + CONSTRAINT "refresh_tokens_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "platform_links" ( + "id" TEXT NOT NULL, + "user_id" TEXT NOT NULL, + "platform" TEXT NOT NULL, + "username" TEXT NOT NULL, + "url" TEXT NOT NULL, + "display_order" INTEGER NOT NULL DEFAULT 0, + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "platform_links_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "cards" ( + "id" TEXT NOT NULL, + "user_id" TEXT NOT NULL, + "title" TEXT NOT NULL, + "description" TEXT, + "slug" TEXT NOT NULL, + "visibility" "CardVisibility" NOT NULL DEFAULT 'PUBLIC', + "qrEnabled" BOOLEAN NOT NULL DEFAULT true, + "viewCount" INTEGER NOT NULL DEFAULT 0, + "is_default" BOOLEAN NOT NULL DEFAULT false, + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "cards_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "card_links" ( + "id" TEXT NOT NULL, + "card_id" TEXT NOT NULL, + "platform_link_id" TEXT NOT NULL, + "display_order" INTEGER NOT NULL DEFAULT 0, + + CONSTRAINT "card_links_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "oauth_tokens" ( + "id" TEXT NOT NULL, + "user_id" TEXT NOT NULL, + "platform" TEXT NOT NULL, + "access_token" TEXT NOT NULL, + "refresh_token" TEXT, + "scopes" TEXT NOT NULL, + "expires_at" TIMESTAMP(3), + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "oauth_tokens_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "card_views" ( + "id" TEXT NOT NULL, + "card_id" TEXT, + "owner_id" TEXT NOT NULL, + "viewer_id" TEXT, + "viewer_ip" TEXT, + "viewer_agent" TEXT, + "source" TEXT NOT NULL DEFAULT 'qr', + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "card_views_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "follow_logs" ( + "id" TEXT NOT NULL, + "follower_id" TEXT NOT NULL, + "target_username" TEXT NOT NULL, + "platform" TEXT NOT NULL, + "status" TEXT NOT NULL DEFAULT 'success', + "layer" TEXT NOT NULL, + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "follow_logs_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "events" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "slug" TEXT NOT NULL, + "location" TEXT NOT NULL, + "description" TEXT, + "organizerId" TEXT NOT NULL, + "startDate" TIMESTAMP(3) NOT NULL, + "endDate" TIMESTAMP(3) NOT NULL, + "isPublic" BOOLEAN NOT NULL DEFAULT true, + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "events_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "event_attendees" ( + "id" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "eventId" TEXT NOT NULL, + "joinedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "event_attendees_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "webhook_endpoints" ( + "id" TEXT NOT NULL, + "user_id" TEXT NOT NULL, + "url" TEXT NOT NULL, + "secret" TEXT NOT NULL, + "events" TEXT[], + "is_active" BOOLEAN NOT NULL DEFAULT true, + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "webhook_endpoints_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "webhook_deliveries" ( + "id" TEXT NOT NULL, + "endpoint_id" TEXT NOT NULL, + "event_type" TEXT NOT NULL, + "payload" JSONB NOT NULL, + "status" TEXT NOT NULL DEFAULT 'pending', + "response_code" INTEGER, + "attempts" INTEGER NOT NULL DEFAULT 0, + "next_retry_at" TIMESTAMP(3), + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(3) NOT NULL, + "error_message" TEXT, + "delivered_at" TIMESTAMP(3), + + CONSTRAINT "webhook_deliveries_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "teams" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "slug" TEXT NOT NULL, + "description" TEXT, + "avatarUrl" TEXT, + "ownerId" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "teams_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "team_members" ( + "id" TEXT NOT NULL, + "teamId" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "role" "TeamRole" NOT NULL, + "joinedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "team_members_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "users_email_key" ON "users"("email"); + +-- CreateIndex +CREATE UNIQUE INDEX "users_username_key" ON "users"("username"); + +-- CreateIndex +CREATE UNIQUE INDEX "users_phone_number_key" ON "users"("phone_number"); + +-- CreateIndex +CREATE INDEX "user_identities_user_id_idx" ON "user_identities"("user_id"); + +-- CreateIndex +CREATE UNIQUE INDEX "user_identities_provider_provider_id_key" ON "user_identities"("provider", "provider_id"); + +-- CreateIndex +CREATE UNIQUE INDEX "refresh_tokens_token_hash_key" ON "refresh_tokens"("token_hash"); + +-- CreateIndex +CREATE INDEX "refresh_tokens_user_id_idx" ON "refresh_tokens"("user_id"); + +-- CreateIndex +CREATE INDEX "refresh_tokens_family_idx" ON "refresh_tokens"("family"); + +-- CreateIndex +CREATE INDEX "refresh_tokens_expires_at_idx" ON "refresh_tokens"("expires_at"); + +-- CreateIndex +CREATE INDEX "refresh_tokens_revoked_at_idx" ON "refresh_tokens"("revoked_at"); + +-- CreateIndex +CREATE UNIQUE INDEX "cards_slug_key" ON "cards"("slug"); + +-- CreateIndex +CREATE INDEX "cards_user_id_idx" ON "cards"("user_id"); + +-- CreateIndex +CREATE INDEX "cards_viewCount_idx" ON "cards"("viewCount"); + +-- CreateIndex +CREATE UNIQUE INDEX "card_links_card_id_platform_link_id_key" ON "card_links"("card_id", "platform_link_id"); + +-- CreateIndex +CREATE UNIQUE INDEX "oauth_tokens_user_id_platform_key" ON "oauth_tokens"("user_id", "platform"); + +-- CreateIndex +CREATE INDEX "card_views_card_id_idx" ON "card_views"("card_id"); + +-- CreateIndex +CREATE INDEX "card_views_owner_id_idx" ON "card_views"("owner_id"); + +-- CreateIndex +CREATE UNIQUE INDEX "events_slug_key" ON "events"("slug"); + +-- CreateIndex +CREATE UNIQUE INDEX "event_attendees_userId_eventId_key" ON "event_attendees"("userId", "eventId"); + +-- CreateIndex +CREATE INDEX "webhook_endpoints_user_id_idx" ON "webhook_endpoints"("user_id"); + +-- CreateIndex +CREATE INDEX "webhook_deliveries_endpoint_id_idx" ON "webhook_deliveries"("endpoint_id"); + +-- CreateIndex +CREATE INDEX "webhook_deliveries_status_next_retry_at_idx" ON "webhook_deliveries"("status", "next_retry_at"); + +-- CreateIndex +CREATE UNIQUE INDEX "teams_slug_key" ON "teams"("slug"); + +-- CreateIndex +CREATE INDEX "teams_slug_idx" ON "teams"("slug"); + +-- CreateIndex +CREATE INDEX "team_members_userId_idx" ON "team_members"("userId"); + +-- CreateIndex +CREATE UNIQUE INDEX "team_members_userId_teamId_key" ON "team_members"("userId", "teamId"); + +-- AddForeignKey +ALTER TABLE "user_identities" ADD CONSTRAINT "user_identities_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "refresh_tokens" ADD CONSTRAINT "refresh_tokens_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "platform_links" ADD CONSTRAINT "platform_links_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "cards" ADD CONSTRAINT "cards_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "card_links" ADD CONSTRAINT "card_links_card_id_fkey" FOREIGN KEY ("card_id") REFERENCES "cards"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "card_links" ADD CONSTRAINT "card_links_platform_link_id_fkey" FOREIGN KEY ("platform_link_id") REFERENCES "platform_links"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "oauth_tokens" ADD CONSTRAINT "oauth_tokens_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "card_views" ADD CONSTRAINT "card_views_card_id_fkey" FOREIGN KEY ("card_id") REFERENCES "cards"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "card_views" ADD CONSTRAINT "card_views_owner_id_fkey" FOREIGN KEY ("owner_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "card_views" ADD CONSTRAINT "card_views_viewer_id_fkey" FOREIGN KEY ("viewer_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "follow_logs" ADD CONSTRAINT "follow_logs_follower_id_fkey" FOREIGN KEY ("follower_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "events" ADD CONSTRAINT "events_organizerId_fkey" FOREIGN KEY ("organizerId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "event_attendees" ADD CONSTRAINT "event_attendees_eventId_fkey" FOREIGN KEY ("eventId") REFERENCES "events"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "event_attendees" ADD CONSTRAINT "event_attendees_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "webhook_endpoints" ADD CONSTRAINT "webhook_endpoints_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "webhook_deliveries" ADD CONSTRAINT "webhook_deliveries_endpoint_id_fkey" FOREIGN KEY ("endpoint_id") REFERENCES "webhook_endpoints"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "teams" ADD CONSTRAINT "teams_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "team_members" ADD CONSTRAINT "team_members_teamId_fkey" FOREIGN KEY ("teamId") REFERENCES "teams"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "team_members" ADD CONSTRAINT "team_members_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/apps/backend/src/routes/event.ts b/apps/backend/src/routes/event.ts index 5c24b4ff..e63fe83f 100644 --- a/apps/backend/src/routes/event.ts +++ b/apps/backend/src/routes/event.ts @@ -271,4 +271,4 @@ export async function eventRoutes(app:FastifyInstance): Promise { return response; }) -} +} \ No newline at end of file