import { MigrateUpArgs, MigrateDownArgs, sql } from '@payloadcms/db-postgres' export async function up({ db, payload, req }: MigrateUpArgs): Promise { await db.execute(sql` CREATE TYPE "public"."enum_audit_logs_action" AS ENUM('login_success', 'login_failed', 'logout', 'password_changed', 'password_reset', 'create', 'update', 'delete', 'config_changed', 'email_failed', 'access_denied', 'rate_limit'); CREATE TYPE "public"."enum_audit_logs_severity" AS ENUM('info', 'warning', 'error', 'critical'); CREATE TYPE "public"."enum_audit_logs_entity_type" AS ENUM('users', 'tenants', 'pages', 'posts', 'media', 'forms', 'email', 'global', 'system'); CREATE TABLE "audit_logs" ( "id" serial PRIMARY KEY NOT NULL, "action" "enum_audit_logs_action" NOT NULL, "severity" "enum_audit_logs_severity" DEFAULT 'info' NOT NULL, "entity_type" "enum_audit_logs_entity_type", "entity_id" varchar, "user_id" integer, "user_email" varchar, "tenant_id" integer, "ip_address" varchar, "user_agent" varchar, "description" varchar, "previous_value" jsonb, "new_value" jsonb, "metadata" jsonb, "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL ); ALTER TABLE "payload_locked_documents_rels" ADD COLUMN "audit_logs_id" integer; ALTER TABLE "audit_logs" ADD CONSTRAINT "audit_logs_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action; ALTER TABLE "audit_logs" ADD CONSTRAINT "audit_logs_tenant_id_tenants_id_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE set null ON UPDATE no action; CREATE INDEX "audit_logs_user_idx" ON "audit_logs" USING btree ("user_id"); CREATE INDEX "audit_logs_tenant_idx" ON "audit_logs" USING btree ("tenant_id"); CREATE INDEX "audit_logs_updated_at_idx" ON "audit_logs" USING btree ("updated_at"); CREATE INDEX "audit_logs_created_at_idx" ON "audit_logs" USING btree ("created_at"); ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_audit_logs_fk" FOREIGN KEY ("audit_logs_id") REFERENCES "public"."audit_logs"("id") ON DELETE cascade ON UPDATE no action; CREATE INDEX "payload_locked_documents_rels_audit_logs_id_idx" ON "payload_locked_documents_rels" USING btree ("audit_logs_id");`) } export async function down({ db, payload, req }: MigrateDownArgs): Promise { await db.execute(sql` ALTER TABLE "audit_logs" DISABLE ROW LEVEL SECURITY; DROP TABLE "audit_logs" CASCADE; ALTER TABLE "payload_locked_documents_rels" DROP CONSTRAINT "payload_locked_documents_rels_audit_logs_fk"; DROP INDEX "payload_locked_documents_rels_audit_logs_id_idx"; ALTER TABLE "payload_locked_documents_rels" DROP COLUMN "audit_logs_id"; DROP TYPE "public"."enum_audit_logs_action"; DROP TYPE "public"."enum_audit_logs_severity"; DROP TYPE "public"."enum_audit_logs_entity_type";`) }