diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index b3fb89c..1ad5002 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -24,9 +24,14 @@ jobs: docker run -d \ --name backend-haruncan-studio-container \ --restart always \ - --network gitea-server_gitea \ + --network docker-data_gitea \ -p 1809:3000 \ -e DATABASE_URL='${{ secrets.DATABASE_URL }}' \ -e JWT_SECRET='${{ secrets.JWT_SECRET }}' \ -e NODE_ENV='production' \ - backend-haruncan-studio:latest \ No newline at end of file + backend-haruncan-studio:latest + + - name: Veritabanı Migration + run: | + sleep 5 + docker exec backend-haruncan-studio-container npx prisma migrate deploy \ No newline at end of file diff --git a/prisma/migrations/20260107121020_init/migration.sql b/prisma/migrations/20260322_init_postgresql/migration.sql similarity index 67% rename from prisma/migrations/20260107121020_init/migration.sql rename to prisma/migrations/20260322_init_postgresql/migration.sql index 610519b..bfaab89 100644 --- a/prisma/migrations/20260107121020_init/migration.sql +++ b/prisma/migrations/20260322_init_postgresql/migration.sql @@ -97,89 +97,125 @@ CREATE TABLE "Translation" ( CONSTRAINT "Translation_pkey" PRIMARY KEY ("id") ); +-- CreateTable +CREATE TABLE "Project" ( + "id" TEXT NOT NULL, + "title" TEXT NOT NULL, + "image" TEXT NOT NULL, + "roles" TEXT NOT NULL DEFAULT '[]', + "color" TEXT NOT NULL DEFAULT '#FF5733', + "sortOrder" INTEGER NOT NULL DEFAULT 0, + "isActive" BOOLEAN NOT NULL DEFAULT true, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "deletedAt" TIMESTAMP(3), + + CONSTRAINT "Project_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "AuditLog" ( + "id" TEXT NOT NULL, + "entity" TEXT NOT NULL, + "entityId" TEXT NOT NULL, + "action" TEXT NOT NULL, + "before" TEXT, + "after" TEXT, + "userId" TEXT, + "ip" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "AuditLog_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SiteContent" ( + "id" TEXT NOT NULL, + "section" TEXT NOT NULL, + "locale" TEXT NOT NULL DEFAULT 'tr', + "content" TEXT NOT NULL DEFAULT '{}', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "SiteContent_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "MediaFile" ( + "id" TEXT NOT NULL, + "filename" TEXT NOT NULL, + "originalName" TEXT NOT NULL, + "mimetype" TEXT NOT NULL, + "path" TEXT NOT NULL, + "url" TEXT NOT NULL, + "size" INTEGER NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "MediaFile_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Client" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "logo" TEXT NOT NULL, + "website" TEXT, + "sortOrder" INTEGER NOT NULL DEFAULT 0, + "isActive" BOOLEAN NOT NULL DEFAULT true, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Client_pkey" PRIMARY KEY ("id") +); + -- CreateIndex CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); - --- CreateIndex CREATE INDEX "User_email_idx" ON "User"("email"); - --- CreateIndex CREATE INDEX "User_tenantId_idx" ON "User"("tenantId"); --- CreateIndex CREATE UNIQUE INDEX "Role_name_key" ON "Role"("name"); - --- CreateIndex CREATE INDEX "Role_name_idx" ON "Role"("name"); --- CreateIndex CREATE UNIQUE INDEX "Permission_name_key" ON "Permission"("name"); - --- CreateIndex +CREATE UNIQUE INDEX "Permission_resource_action_key" ON "Permission"("resource", "action"); CREATE INDEX "Permission_resource_idx" ON "Permission"("resource"); --- CreateIndex -CREATE UNIQUE INDEX "Permission_resource_action_key" ON "Permission"("resource", "action"); - --- CreateIndex +CREATE UNIQUE INDEX "UserRole_userId_roleId_key" ON "UserRole"("userId", "roleId"); CREATE INDEX "UserRole_userId_idx" ON "UserRole"("userId"); - --- CreateIndex CREATE INDEX "UserRole_roleId_idx" ON "UserRole"("roleId"); --- CreateIndex -CREATE UNIQUE INDEX "UserRole_userId_roleId_key" ON "UserRole"("userId", "roleId"); - --- CreateIndex +CREATE UNIQUE INDEX "RolePermission_roleId_permissionId_key" ON "RolePermission"("roleId", "permissionId"); CREATE INDEX "RolePermission_roleId_idx" ON "RolePermission"("roleId"); - --- CreateIndex CREATE INDEX "RolePermission_permissionId_idx" ON "RolePermission"("permissionId"); --- CreateIndex -CREATE UNIQUE INDEX "RolePermission_roleId_permissionId_key" ON "RolePermission"("roleId", "permissionId"); - --- CreateIndex CREATE UNIQUE INDEX "RefreshToken_token_key" ON "RefreshToken"("token"); - --- CreateIndex CREATE INDEX "RefreshToken_token_idx" ON "RefreshToken"("token"); - --- CreateIndex CREATE INDEX "RefreshToken_userId_idx" ON "RefreshToken"("userId"); --- CreateIndex CREATE UNIQUE INDEX "Tenant_slug_key" ON "Tenant"("slug"); - --- CreateIndex CREATE INDEX "Tenant_slug_idx" ON "Tenant"("slug"); --- CreateIndex +CREATE UNIQUE INDEX "Translation_key_locale_namespace_key" ON "Translation"("key", "locale", "namespace"); CREATE INDEX "Translation_key_idx" ON "Translation"("key"); - --- CreateIndex CREATE INDEX "Translation_locale_idx" ON "Translation"("locale"); - --- CreateIndex CREATE INDEX "Translation_namespace_idx" ON "Translation"("namespace"); --- CreateIndex -CREATE UNIQUE INDEX "Translation_key_locale_namespace_key" ON "Translation"("key", "locale", "namespace"); +CREATE INDEX "Project_sortOrder_idx" ON "Project"("sortOrder"); + +CREATE INDEX "AuditLog_entity_entityId_idx" ON "AuditLog"("entity", "entityId"); +CREATE INDEX "AuditLog_action_idx" ON "AuditLog"("action"); +CREATE INDEX "AuditLog_createdAt_idx" ON "AuditLog"("createdAt"); + +CREATE UNIQUE INDEX "SiteContent_section_locale_key" ON "SiteContent"("section", "locale"); +CREATE INDEX "SiteContent_section_idx" ON "SiteContent"("section"); +CREATE INDEX "SiteContent_locale_idx" ON "SiteContent"("locale"); + +CREATE INDEX "Client_sortOrder_idx" ON "Client"("sortOrder"); -- AddForeignKey ALTER TABLE "User" ADD CONSTRAINT "User_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE SET NULL ON UPDATE CASCADE; - --- AddForeignKey ALTER TABLE "UserRole" ADD CONSTRAINT "UserRole_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey ALTER TABLE "UserRole" ADD CONSTRAINT "UserRole_roleId_fkey" FOREIGN KEY ("roleId") REFERENCES "Role"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey ALTER TABLE "RolePermission" ADD CONSTRAINT "RolePermission_roleId_fkey" FOREIGN KEY ("roleId") REFERENCES "Role"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey ALTER TABLE "RolePermission" ADD CONSTRAINT "RolePermission_permissionId_fkey" FOREIGN KEY ("permissionId") REFERENCES "Permission"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey ALTER TABLE "RefreshToken" ADD CONSTRAINT "RefreshToken_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml index fbffa92..99e4f20 100644 --- a/prisma/migrations/migration_lock.toml +++ b/prisma/migrations/migration_lock.toml @@ -1,3 +1,3 @@ # Please do not edit this file manually # It should be added in your version-control system (i.e. Git) -provider = "postgresql" \ No newline at end of file +provider = "postgresql" diff --git a/prisma/schema.prisma b/prisma/schema.prisma index a49ab0e..a2cf6d1 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -6,7 +6,7 @@ generator client { } datasource db { - provider = "sqlite" + provider = "postgresql" url = env("DATABASE_URL") }