chore: add missing Payload migration and update cms-sync testing DB references
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 11s
Build & Deploy / 🧪 QA (push) Successful in 8m14s
Build & Deploy / 🏗️ Build (push) Successful in 13m1s
Build & Deploy / 🚀 Deploy (push) Successful in 28s
Build & Deploy / 🧪 Post-Deploy Verification (push) Failing after 2m24s
Build & Deploy / 🔔 Notify (push) Successful in 1s

This commit is contained in:
2026-03-01 16:19:37 +01:00
parent cf3a96cead
commit 071302fe6b
4 changed files with 3835 additions and 3 deletions

View File

@@ -77,7 +77,7 @@ resolve_target() {
testing)
REMOTE_PROJECT="mintel-me-testing"
REMOTE_DB_CONTAINER="mintel-me-testing-postgres-db-1"
REMOTE_APP_CONTAINER="mintel-me-testing-app-1"
REMOTE_APP_CONTAINER="mintel-me-testing-mintel-me-app-1"
REMOTE_SITE_DIR="/home/deploy/sites/testing.mintel.me"
;;
staging)
@@ -108,8 +108,8 @@ resolve_target() {
# Auto-detect remote DB credentials from the env file on the server
echo "🔍 Detecting $TARGET database credentials..."
REMOTE_DB_USER=$(ssh "$SSH_HOST" "grep -h '^postgres_DB_USER=' $REMOTE_SITE_DIR/.env* 2>/dev/null | tail -1 | cut -d= -f2" || echo "")
REMOTE_DB_NAME=$(ssh "$SSH_HOST" "grep -h '^postgres_DB_NAME=' $REMOTE_SITE_DIR/.env* 2>/dev/null | tail -1 | cut -d= -f2" || echo "")
REMOTE_DB_USER="directus"
REMOTE_DB_NAME="directus"
REMOTE_DB_USER="${REMOTE_DB_USER:-payload}"
REMOTE_DB_NAME="${REMOTE_DB_NAME:-payload}"
echo " User: $REMOTE_DB_USER | DB: $REMOTE_DB_NAME"

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,155 @@
import { MigrateUpArgs, MigrateDownArgs, sql } from "@payloadcms/db-postgres";
export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {
await db.execute(sql`
CREATE TYPE "public"."enum_crm_topics_status" AS ENUM('active', 'paused', 'won', 'lost');
CREATE TYPE "public"."enum_crm_topics_stage" AS ENUM('discovery', 'proposal', 'negotiation', 'implementation');
CREATE TYPE "public"."enum_projects_milestones_status" AS ENUM('todo', 'in_progress', 'done');
CREATE TYPE "public"."enum_projects_milestones_priority" AS ENUM('low', 'medium', 'high');
CREATE TYPE "public"."enum_projects_status" AS ENUM('draft', 'in_progress', 'review', 'completed');
ALTER TYPE "public"."enum_crm_accounts_status" ADD VALUE 'partner' BEFORE 'lost';
ALTER TYPE "public"."enum_crm_interactions_type" ADD VALUE 'whatsapp' BEFORE 'note';
ALTER TYPE "public"."enum_crm_interactions_type" ADD VALUE 'social' BEFORE 'note';
ALTER TYPE "public"."enum_crm_interactions_type" ADD VALUE 'document' BEFORE 'note';
CREATE TABLE "crm_topics" (
"id" serial PRIMARY KEY NOT NULL,
"title" varchar NOT NULL,
"account_id" integer NOT NULL,
"status" "enum_crm_topics_status" DEFAULT 'active' NOT NULL,
"stage" "enum_crm_topics_stage",
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
);
CREATE TABLE "crm_interactions_rels" (
"id" serial PRIMARY KEY NOT NULL,
"order" integer,
"parent_id" integer NOT NULL,
"path" varchar NOT NULL,
"media_id" integer
);
CREATE TABLE "projects_milestones" (
"_order" integer NOT NULL,
"_parent_id" integer NOT NULL,
"id" varchar PRIMARY KEY NOT NULL,
"name" varchar NOT NULL,
"status" "enum_projects_milestones_status" DEFAULT 'todo' NOT NULL,
"priority" "enum_projects_milestones_priority" DEFAULT 'medium',
"start_date" timestamp(3) with time zone,
"target_date" timestamp(3) with time zone,
"assignee_id" integer
);
CREATE TABLE "projects" (
"id" serial PRIMARY KEY NOT NULL,
"title" varchar NOT NULL,
"account_id" integer NOT NULL,
"status" "enum_projects_status" DEFAULT 'draft' NOT NULL,
"start_date" timestamp(3) with time zone,
"target_date" timestamp(3) with time zone,
"value_min" numeric,
"value_max" numeric,
"briefing" jsonb,
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
);
CREATE TABLE "projects_rels" (
"id" serial PRIMARY KEY NOT NULL,
"order" integer,
"parent_id" integer NOT NULL,
"path" varchar NOT NULL,
"crm_contacts_id" integer,
"media_id" integer
);
ALTER TABLE "crm_interactions" ALTER COLUMN "type" SET DEFAULT 'note';
ALTER TABLE "inquiries" ADD COLUMN "processed" boolean DEFAULT false;
ALTER TABLE "crm_contacts" ADD COLUMN "full_name" varchar;
ALTER TABLE "crm_interactions" ADD COLUMN "topic_id" integer;
ALTER TABLE "payload_locked_documents_rels" ADD COLUMN "crm_topics_id" integer;
ALTER TABLE "payload_locked_documents_rels" ADD COLUMN "projects_id" integer;
ALTER TABLE "crm_topics" ADD CONSTRAINT "crm_topics_account_id_crm_accounts_id_fk" FOREIGN KEY ("account_id") REFERENCES "public"."crm_accounts"("id") ON DELETE set null ON UPDATE no action;
ALTER TABLE "crm_interactions_rels" ADD CONSTRAINT "crm_interactions_rels_parent_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."crm_interactions"("id") ON DELETE cascade ON UPDATE no action;
ALTER TABLE "crm_interactions_rels" ADD CONSTRAINT "crm_interactions_rels_media_fk" FOREIGN KEY ("media_id") REFERENCES "public"."media"("id") ON DELETE cascade ON UPDATE no action;
ALTER TABLE "projects_milestones" ADD CONSTRAINT "projects_milestones_assignee_id_users_id_fk" FOREIGN KEY ("assignee_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;
ALTER TABLE "projects_milestones" ADD CONSTRAINT "projects_milestones_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."projects"("id") ON DELETE cascade ON UPDATE no action;
ALTER TABLE "projects" ADD CONSTRAINT "projects_account_id_crm_accounts_id_fk" FOREIGN KEY ("account_id") REFERENCES "public"."crm_accounts"("id") ON DELETE set null ON UPDATE no action;
ALTER TABLE "projects_rels" ADD CONSTRAINT "projects_rels_parent_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."projects"("id") ON DELETE cascade ON UPDATE no action;
ALTER TABLE "projects_rels" ADD CONSTRAINT "projects_rels_crm_contacts_fk" FOREIGN KEY ("crm_contacts_id") REFERENCES "public"."crm_contacts"("id") ON DELETE cascade ON UPDATE no action;
ALTER TABLE "projects_rels" ADD CONSTRAINT "projects_rels_media_fk" FOREIGN KEY ("media_id") REFERENCES "public"."media"("id") ON DELETE cascade ON UPDATE no action;
CREATE INDEX "crm_topics_account_idx" ON "crm_topics" USING btree ("account_id");
CREATE INDEX "crm_topics_updated_at_idx" ON "crm_topics" USING btree ("updated_at");
CREATE INDEX "crm_topics_created_at_idx" ON "crm_topics" USING btree ("created_at");
CREATE INDEX "crm_interactions_rels_order_idx" ON "crm_interactions_rels" USING btree ("order");
CREATE INDEX "crm_interactions_rels_parent_idx" ON "crm_interactions_rels" USING btree ("parent_id");
CREATE INDEX "crm_interactions_rels_path_idx" ON "crm_interactions_rels" USING btree ("path");
CREATE INDEX "crm_interactions_rels_media_id_idx" ON "crm_interactions_rels" USING btree ("media_id");
CREATE INDEX "projects_milestones_order_idx" ON "projects_milestones" USING btree ("_order");
CREATE INDEX "projects_milestones_parent_id_idx" ON "projects_milestones" USING btree ("_parent_id");
CREATE INDEX "projects_milestones_assignee_idx" ON "projects_milestones" USING btree ("assignee_id");
CREATE INDEX "projects_account_idx" ON "projects" USING btree ("account_id");
CREATE INDEX "projects_updated_at_idx" ON "projects" USING btree ("updated_at");
CREATE INDEX "projects_created_at_idx" ON "projects" USING btree ("created_at");
CREATE INDEX "projects_rels_order_idx" ON "projects_rels" USING btree ("order");
CREATE INDEX "projects_rels_parent_idx" ON "projects_rels" USING btree ("parent_id");
CREATE INDEX "projects_rels_path_idx" ON "projects_rels" USING btree ("path");
CREATE INDEX "projects_rels_crm_contacts_id_idx" ON "projects_rels" USING btree ("crm_contacts_id");
CREATE INDEX "projects_rels_media_id_idx" ON "projects_rels" USING btree ("media_id");
ALTER TABLE "crm_interactions" ADD CONSTRAINT "crm_interactions_topic_id_crm_topics_id_fk" FOREIGN KEY ("topic_id") REFERENCES "public"."crm_topics"("id") ON DELETE set null ON UPDATE no action;
ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_crm_topics_fk" FOREIGN KEY ("crm_topics_id") REFERENCES "public"."crm_topics"("id") ON DELETE cascade ON UPDATE no action;
ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_projects_fk" FOREIGN KEY ("projects_id") REFERENCES "public"."projects"("id") ON DELETE cascade ON UPDATE no action;
CREATE INDEX "crm_interactions_topic_idx" ON "crm_interactions" USING btree ("topic_id");
CREATE INDEX "payload_locked_documents_rels_crm_topics_id_idx" ON "payload_locked_documents_rels" USING btree ("crm_topics_id");
CREATE INDEX "payload_locked_documents_rels_projects_id_idx" ON "payload_locked_documents_rels" USING btree ("projects_id");`);
}
export async function down({
db,
payload,
req,
}: MigrateDownArgs): Promise<void> {
await db.execute(sql`
ALTER TABLE "crm_topics" DISABLE ROW LEVEL SECURITY;
ALTER TABLE "crm_interactions_rels" DISABLE ROW LEVEL SECURITY;
ALTER TABLE "projects_milestones" DISABLE ROW LEVEL SECURITY;
ALTER TABLE "projects" DISABLE ROW LEVEL SECURITY;
ALTER TABLE "projects_rels" DISABLE ROW LEVEL SECURITY;
DROP TABLE "crm_topics" CASCADE;
DROP TABLE "crm_interactions_rels" CASCADE;
DROP TABLE "projects_milestones" CASCADE;
DROP TABLE "projects" CASCADE;
DROP TABLE "projects_rels" CASCADE;
ALTER TABLE "crm_interactions" DROP CONSTRAINT "crm_interactions_topic_id_crm_topics_id_fk";
ALTER TABLE "payload_locked_documents_rels" DROP CONSTRAINT "payload_locked_documents_rels_crm_topics_fk";
ALTER TABLE "payload_locked_documents_rels" DROP CONSTRAINT "payload_locked_documents_rels_projects_fk";
ALTER TABLE "crm_accounts" ALTER COLUMN "status" SET DATA TYPE text;
ALTER TABLE "crm_accounts" ALTER COLUMN "status" SET DEFAULT 'lead'::text;
DROP TYPE "public"."enum_crm_accounts_status";
CREATE TYPE "public"."enum_crm_accounts_status" AS ENUM('lead', 'client', 'lost');
ALTER TABLE "crm_accounts" ALTER COLUMN "status" SET DEFAULT 'lead'::"public"."enum_crm_accounts_status";
ALTER TABLE "crm_accounts" ALTER COLUMN "status" SET DATA TYPE "public"."enum_crm_accounts_status" USING "status"::"public"."enum_crm_accounts_status";
ALTER TABLE "crm_interactions" ALTER COLUMN "type" SET DATA TYPE text;
ALTER TABLE "crm_interactions" ALTER COLUMN "type" SET DEFAULT 'email'::text;
DROP TYPE "public"."enum_crm_interactions_type";
CREATE TYPE "public"."enum_crm_interactions_type" AS ENUM('email', 'call', 'meeting', 'note');
ALTER TABLE "crm_interactions" ALTER COLUMN "type" SET DEFAULT 'email'::"public"."enum_crm_interactions_type";
ALTER TABLE "crm_interactions" ALTER COLUMN "type" SET DATA TYPE "public"."enum_crm_interactions_type" USING "type"::"public"."enum_crm_interactions_type";
DROP INDEX "crm_interactions_topic_idx";
DROP INDEX "payload_locked_documents_rels_crm_topics_id_idx";
DROP INDEX "payload_locked_documents_rels_projects_id_idx";
ALTER TABLE "inquiries" DROP COLUMN "processed";
ALTER TABLE "crm_contacts" DROP COLUMN "full_name";
ALTER TABLE "crm_interactions" DROP COLUMN "topic_id";
ALTER TABLE "payload_locked_documents_rels" DROP COLUMN "crm_topics_id";
ALTER TABLE "payload_locked_documents_rels" DROP COLUMN "projects_id";
DROP TYPE "public"."enum_crm_topics_status";
DROP TYPE "public"."enum_crm_topics_stage";
DROP TYPE "public"."enum_projects_milestones_status";
DROP TYPE "public"."enum_projects_milestones_priority";
DROP TYPE "public"."enum_projects_status";`);
}

View File

@@ -1,4 +1,5 @@
import * as migration_20260227_171023_crm_collections from "./20260227_171023_crm_collections";
import * as migration_20260301_151838 from "./20260301_151838";
export const migrations = [
{
@@ -6,4 +7,9 @@ export const migrations = [
down: migration_20260227_171023_crm_collections.down,
name: "20260227_171023_crm_collections",
},
{
up: migration_20260301_151838.up,
down: migration_20260301_151838.down,
name: "20260301_151838",
},
];