refactor(migrations): split tickets DDL out of migration 7 into migration 8
Migration 7 originally bundled tickets DDL with pending schema drift, which made it fail against prod (no tickets objects existed there). Split into a stripped migration 7 (no tickets statements) and a new tickets-only migration 8 that creates enum_tickets_* types, ALTER TYPE ADD VALUE for 'tickets' + 'ticket:*' muted-type values, tickets and tickets_activity tables, and the payload_locked_documents_rels.tickets_id column + FK + index. Migration 8's .json snapshot is the new forward baseline for migrate:create (verified via zero-diff probe). Applied to prod: m1-7 baselined as batch 1, m8 applied as batch 2.
This commit is contained in:
parent
10560c1446
commit
0ed8721889
4 changed files with 15677 additions and 108 deletions
|
|
@ -3,9 +3,9 @@ import { MigrateUpArgs, MigrateDownArgs, sql } from '@payloadcms/db-postgres'
|
||||||
export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {
|
export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {
|
||||||
await db.execute(sql`
|
await db.execute(sql`
|
||||||
CREATE TYPE "public"."enum_game_vehicles_status" AS ENUM('idle', 'assigned', 'in_transit', 'damaged', 'destroyed');
|
CREATE TYPE "public"."enum_game_vehicles_status" AS ENUM('idle', 'assigned', 'in_transit', 'damaged', 'destroyed');
|
||||||
CREATE TYPE "public"."enum_game_event_logs_target_collection" AS ENUM('game-structures', 'game-vehicles', 'game-npcs', 'structures', 'resources', 'assets', 'vehicles', 'factions', 'missions', 'campaigns', 'users', 'technologies', 'maps', 'shipments', 'bank-accounts', 'bank-transactions', 'ledger-entries', 'locker-storages', 'loadouts', 'market-listings', 'market-negotiations', 'tickets');
|
CREATE TYPE "public"."enum_game_event_logs_target_collection" AS ENUM('game-structures', 'game-vehicles', 'game-npcs', 'structures', 'resources', 'assets', 'vehicles', 'factions', 'missions', 'campaigns', 'users', 'technologies', 'maps', 'shipments', 'bank-accounts', 'bank-transactions', 'ledger-entries', 'locker-storages', 'loadouts', 'market-listings', 'market-negotiations');
|
||||||
CREATE TYPE "public"."enum_users_preferences_notifications_muted_types" AS ENUM('market:offer', 'market:counter', 'market:accept', 'market:reject', 'market:withdrawn', 'market:closed', 'market:sold', 'market:expired', 'account:discord-request', 'finance:deposit', 'finance:withdraw', 'finance:transfer', 'shipment:completed', 'ticket:created', 'ticket:assigned', 'ticket:reply', 'ticket:status');
|
CREATE TYPE "public"."enum_users_preferences_notifications_muted_types" AS ENUM('market:offer', 'market:counter', 'market:accept', 'market:reject', 'market:withdrawn', 'market:closed', 'market:sold', 'market:expired', 'account:discord-request', 'finance:deposit', 'finance:withdraw', 'finance:transfer', 'shipment:completed');
|
||||||
CREATE TYPE "public"."enum_users_preferences_discord_muted_types" AS ENUM('market:offer', 'market:counter', 'market:accept', 'market:reject', 'market:withdrawn', 'market:closed', 'market:sold', 'market:expired', 'account:discord-request', 'finance:deposit', 'finance:withdraw', 'finance:transfer', 'shipment:completed', 'ticket:created', 'ticket:assigned', 'ticket:reply', 'ticket:status');
|
CREATE TYPE "public"."enum_users_preferences_discord_muted_types" AS ENUM('market:offer', 'market:counter', 'market:accept', 'market:reject', 'market:withdrawn', 'market:closed', 'market:sold', 'market:expired', 'account:discord-request', 'finance:deposit', 'finance:withdraw', 'finance:transfer', 'shipment:completed');
|
||||||
CREATE TYPE "public"."enum_mission_attendances_response" AS ENUM('yes', 'no', 'tentative');
|
CREATE TYPE "public"."enum_mission_attendances_response" AS ENUM('yes', 'no', 'tentative');
|
||||||
CREATE TYPE "public"."enum_technologies_approval_status" AS ENUM('in_progress', 'ready_for_review', 'approved', 'rejected', 'revision_requested');
|
CREATE TYPE "public"."enum_technologies_approval_status" AS ENUM('in_progress', 'ready_for_review', 'approved', 'rejected', 'revision_requested');
|
||||||
CREATE TYPE "public"."enum_assets_skin_configuration_applies_to_asset_types" AS ENUM('weapon', 'uniform', 'vest', 'backpack', 'helmet');
|
CREATE TYPE "public"."enum_assets_skin_configuration_applies_to_asset_types" AS ENUM('weapon', 'uniform', 'vest', 'backpack', 'helmet');
|
||||||
|
|
@ -23,10 +23,6 @@ export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {
|
||||||
CREATE TYPE "public"."enum_market_negotiations_history_from" AS ENUM('buyer', 'seller');
|
CREATE TYPE "public"."enum_market_negotiations_history_from" AS ENUM('buyer', 'seller');
|
||||||
CREATE TYPE "public"."enum_market_negotiations_status" AS ENUM('open', 'accepted', 'rejected', 'closed', 'cancelled', 'expired');
|
CREATE TYPE "public"."enum_market_negotiations_status" AS ENUM('open', 'accepted', 'rejected', 'closed', 'cancelled', 'expired');
|
||||||
CREATE TYPE "public"."enum_market_negotiations_proposed_by" AS ENUM('buyer', 'seller');
|
CREATE TYPE "public"."enum_market_negotiations_proposed_by" AS ENUM('buyer', 'seller');
|
||||||
CREATE TYPE "public"."enum_tickets_activity_type" AS ENUM('system', 'agent_message', 'client_message');
|
|
||||||
CREATE TYPE "public"."enum_tickets_category" AS ENUM('bug_report', 'feature_request', 'support_request', 'other');
|
|
||||||
CREATE TYPE "public"."enum_tickets_priority" AS ENUM('low', 'medium', 'high', 'critical');
|
|
||||||
CREATE TYPE "public"."enum_tickets_status" AS ENUM('open', 'in_review', 'planning', 'in_progress', 'waiting_on_reporter', 'in_testing', 'resolved', 'canceled', 'closed');
|
|
||||||
CREATE TYPE "public"."enum_narrative_events_triggers_type" AS ENUM('manual', 'mission_complete', 'timer', 'condition');
|
CREATE TYPE "public"."enum_narrative_events_triggers_type" AS ENUM('manual', 'mission_complete', 'timer', 'condition');
|
||||||
ALTER TYPE "public"."enum_users_roles" ADD VALUE 'trusted' BEFORE 'admin';
|
ALTER TYPE "public"."enum_users_roles" ADD VALUE 'trusted' BEFORE 'admin';
|
||||||
ALTER TYPE "public"."enum_factions_type" ADD VALUE 'playerFaction' BEFORE 'majorFaction';
|
ALTER TYPE "public"."enum_factions_type" ADD VALUE 'playerFaction' BEFORE 'majorFaction';
|
||||||
|
|
@ -342,30 +338,6 @@ export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {
|
||||||
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
|
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE "tickets_activity" (
|
|
||||||
"_order" integer NOT NULL,
|
|
||||||
"_parent_id" integer NOT NULL,
|
|
||||||
"id" varchar PRIMARY KEY NOT NULL,
|
|
||||||
"type" "enum_tickets_activity_type" DEFAULT 'system' NOT NULL,
|
|
||||||
"content" jsonb NOT NULL,
|
|
||||||
"author_id" integer,
|
|
||||||
"created_at" timestamp(3) with time zone
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE "tickets" (
|
|
||||||
"id" serial PRIMARY KEY NOT NULL,
|
|
||||||
"title" varchar NOT NULL,
|
|
||||||
"description" jsonb NOT NULL,
|
|
||||||
"category" "enum_tickets_category" DEFAULT 'support_request' NOT NULL,
|
|
||||||
"priority" "enum_tickets_priority" DEFAULT 'medium' NOT NULL,
|
|
||||||
"status" "enum_tickets_status" DEFAULT 'open' NOT NULL,
|
|
||||||
"reporter_id" integer NOT NULL,
|
|
||||||
"assignee_id" integer,
|
|
||||||
"closed_at" timestamp(3) with time zone,
|
|
||||||
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
|
|
||||||
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE "game_rules_rels" (
|
CREATE TABLE "game_rules_rels" (
|
||||||
"id" serial PRIMARY KEY NOT NULL,
|
"id" serial PRIMARY KEY NOT NULL,
|
||||||
"order" integer,
|
"order" integer,
|
||||||
|
|
@ -435,7 +407,6 @@ export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {
|
||||||
ALTER TABLE "payload_locked_documents_rels" ADD COLUMN "loadouts_id" integer;
|
ALTER TABLE "payload_locked_documents_rels" ADD COLUMN "loadouts_id" integer;
|
||||||
ALTER TABLE "payload_locked_documents_rels" ADD COLUMN "market_listings_id" integer;
|
ALTER TABLE "payload_locked_documents_rels" ADD COLUMN "market_listings_id" integer;
|
||||||
ALTER TABLE "payload_locked_documents_rels" ADD COLUMN "market_negotiations_id" integer;
|
ALTER TABLE "payload_locked_documents_rels" ADD COLUMN "market_negotiations_id" integer;
|
||||||
ALTER TABLE "payload_locked_documents_rels" ADD COLUMN "tickets_id" integer;
|
|
||||||
ALTER TABLE "game_rules" ADD COLUMN "proximity_threshold" numeric DEFAULT 10;
|
ALTER TABLE "game_rules" ADD COLUMN "proximity_threshold" numeric DEFAULT 10;
|
||||||
ALTER TABLE "game_rules" ADD COLUMN "game_tick_interval_minutes" numeric DEFAULT 10;
|
ALTER TABLE "game_rules" ADD COLUMN "game_tick_interval_minutes" numeric DEFAULT 10;
|
||||||
ALTER TABLE "game_rules" ADD COLUMN "locker_grid_width" numeric DEFAULT 10;
|
ALTER TABLE "game_rules" ADD COLUMN "locker_grid_width" numeric DEFAULT 10;
|
||||||
|
|
@ -509,10 +480,6 @@ export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {
|
||||||
ALTER TABLE "market_negotiations_history" ADD CONSTRAINT "market_negotiations_history_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."market_negotiations"("id") ON DELETE cascade ON UPDATE no action;
|
ALTER TABLE "market_negotiations_history" ADD CONSTRAINT "market_negotiations_history_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."market_negotiations"("id") ON DELETE cascade ON UPDATE no action;
|
||||||
ALTER TABLE "market_negotiations" ADD CONSTRAINT "market_negotiations_listing_id_market_listings_id_fk" FOREIGN KEY ("listing_id") REFERENCES "public"."market_listings"("id") ON DELETE set null ON UPDATE no action;
|
ALTER TABLE "market_negotiations" ADD CONSTRAINT "market_negotiations_listing_id_market_listings_id_fk" FOREIGN KEY ("listing_id") REFERENCES "public"."market_listings"("id") ON DELETE set null ON UPDATE no action;
|
||||||
ALTER TABLE "market_negotiations" ADD CONSTRAINT "market_negotiations_buyer_id_users_id_fk" FOREIGN KEY ("buyer_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;
|
ALTER TABLE "market_negotiations" ADD CONSTRAINT "market_negotiations_buyer_id_users_id_fk" FOREIGN KEY ("buyer_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;
|
||||||
ALTER TABLE "tickets_activity" ADD CONSTRAINT "tickets_activity_author_id_users_id_fk" FOREIGN KEY ("author_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;
|
|
||||||
ALTER TABLE "tickets_activity" ADD CONSTRAINT "tickets_activity_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."tickets"("id") ON DELETE cascade ON UPDATE no action;
|
|
||||||
ALTER TABLE "tickets" ADD CONSTRAINT "tickets_reporter_id_users_id_fk" FOREIGN KEY ("reporter_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;
|
|
||||||
ALTER TABLE "tickets" ADD CONSTRAINT "tickets_assignee_id_users_id_fk" FOREIGN KEY ("assignee_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;
|
|
||||||
ALTER TABLE "game_rules_rels" ADD CONSTRAINT "game_rules_rels_parent_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."game_rules"("id") ON DELETE cascade ON UPDATE no action;
|
ALTER TABLE "game_rules_rels" ADD CONSTRAINT "game_rules_rels_parent_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."game_rules"("id") ON DELETE cascade ON UPDATE no action;
|
||||||
ALTER TABLE "game_rules_rels" ADD CONSTRAINT "game_rules_rels_assignments_fk" FOREIGN KEY ("assignments_id") REFERENCES "public"."assignments"("id") ON DELETE cascade ON UPDATE no action;
|
ALTER TABLE "game_rules_rels" ADD CONSTRAINT "game_rules_rels_assignments_fk" FOREIGN KEY ("assignments_id") REFERENCES "public"."assignments"("id") ON DELETE cascade ON UPDATE no action;
|
||||||
CREATE INDEX "game_structures_void_storage_order_idx" ON "game_structures_void_storage" USING btree ("_order");
|
CREATE INDEX "game_structures_void_storage_order_idx" ON "game_structures_void_storage" USING btree ("_order");
|
||||||
|
|
@ -629,16 +596,6 @@ export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {
|
||||||
CREATE INDEX "market_negotiations_status_idx" ON "market_negotiations" USING btree ("status");
|
CREATE INDEX "market_negotiations_status_idx" ON "market_negotiations" USING btree ("status");
|
||||||
CREATE INDEX "market_negotiations_updated_at_idx" ON "market_negotiations" USING btree ("updated_at");
|
CREATE INDEX "market_negotiations_updated_at_idx" ON "market_negotiations" USING btree ("updated_at");
|
||||||
CREATE INDEX "market_negotiations_created_at_idx" ON "market_negotiations" USING btree ("created_at");
|
CREATE INDEX "market_negotiations_created_at_idx" ON "market_negotiations" USING btree ("created_at");
|
||||||
CREATE INDEX "tickets_activity_order_idx" ON "tickets_activity" USING btree ("_order");
|
|
||||||
CREATE INDEX "tickets_activity_parent_id_idx" ON "tickets_activity" USING btree ("_parent_id");
|
|
||||||
CREATE INDEX "tickets_activity_author_idx" ON "tickets_activity" USING btree ("author_id");
|
|
||||||
CREATE INDEX "tickets_category_idx" ON "tickets" USING btree ("category");
|
|
||||||
CREATE INDEX "tickets_priority_idx" ON "tickets" USING btree ("priority");
|
|
||||||
CREATE INDEX "tickets_status_idx" ON "tickets" USING btree ("status");
|
|
||||||
CREATE INDEX "tickets_reporter_idx" ON "tickets" USING btree ("reporter_id");
|
|
||||||
CREATE INDEX "tickets_assignee_idx" ON "tickets" USING btree ("assignee_id");
|
|
||||||
CREATE INDEX "tickets_updated_at_idx" ON "tickets" USING btree ("updated_at");
|
|
||||||
CREATE INDEX "tickets_created_at_idx" ON "tickets" USING btree ("created_at");
|
|
||||||
CREATE INDEX "game_rules_rels_order_idx" ON "game_rules_rels" USING btree ("order");
|
CREATE INDEX "game_rules_rels_order_idx" ON "game_rules_rels" USING btree ("order");
|
||||||
CREATE INDEX "game_rules_rels_parent_idx" ON "game_rules_rels" USING btree ("parent_id");
|
CREATE INDEX "game_rules_rels_parent_idx" ON "game_rules_rels" USING btree ("parent_id");
|
||||||
CREATE INDEX "game_rules_rels_path_idx" ON "game_rules_rels" USING btree ("path");
|
CREATE INDEX "game_rules_rels_path_idx" ON "game_rules_rels" USING btree ("path");
|
||||||
|
|
@ -663,7 +620,6 @@ export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {
|
||||||
ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_loadouts_fk" FOREIGN KEY ("loadouts_id") REFERENCES "public"."loadouts"("id") ON DELETE cascade ON UPDATE no action;
|
ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_loadouts_fk" FOREIGN KEY ("loadouts_id") REFERENCES "public"."loadouts"("id") ON DELETE cascade ON UPDATE no action;
|
||||||
ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_market_listings_fk" FOREIGN KEY ("market_listings_id") REFERENCES "public"."market_listings"("id") ON DELETE cascade ON UPDATE no action;
|
ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_market_listings_fk" FOREIGN KEY ("market_listings_id") REFERENCES "public"."market_listings"("id") ON DELETE cascade ON UPDATE no action;
|
||||||
ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_market_negotiations_fk" FOREIGN KEY ("market_negotiations_id") REFERENCES "public"."market_negotiations"("id") ON DELETE cascade ON UPDATE no action;
|
ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_market_negotiations_fk" FOREIGN KEY ("market_negotiations_id") REFERENCES "public"."market_negotiations"("id") ON DELETE cascade ON UPDATE no action;
|
||||||
ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_tickets_fk" FOREIGN KEY ("tickets_id") REFERENCES "public"."tickets"("id") ON DELETE cascade ON UPDATE no action;
|
|
||||||
CREATE INDEX "game_structures_faction_idx" ON "game_structures" USING btree ("faction_id");
|
CREATE INDEX "game_structures_faction_idx" ON "game_structures" USING btree ("faction_id");
|
||||||
CREATE UNIQUE INDEX "users_discord_id_idx" ON "users" USING btree ("discord_id");
|
CREATE UNIQUE INDEX "users_discord_id_idx" ON "users" USING btree ("discord_id");
|
||||||
CREATE INDEX "profiles_rels_qualifications_id_idx" ON "profiles_rels" USING btree ("qualifications_id");
|
CREATE INDEX "profiles_rels_qualifications_id_idx" ON "profiles_rels" USING btree ("qualifications_id");
|
||||||
|
|
@ -685,7 +641,6 @@ export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {
|
||||||
CREATE INDEX "payload_locked_documents_rels_loadouts_id_idx" ON "payload_locked_documents_rels" USING btree ("loadouts_id");
|
CREATE INDEX "payload_locked_documents_rels_loadouts_id_idx" ON "payload_locked_documents_rels" USING btree ("loadouts_id");
|
||||||
CREATE INDEX "payload_locked_documents_rels_market_listings_id_idx" ON "payload_locked_documents_rels" USING btree ("market_listings_id");
|
CREATE INDEX "payload_locked_documents_rels_market_listings_id_idx" ON "payload_locked_documents_rels" USING btree ("market_listings_id");
|
||||||
CREATE INDEX "payload_locked_documents_rels_market_negotiations_id_idx" ON "payload_locked_documents_rels" USING btree ("market_negotiations_id");
|
CREATE INDEX "payload_locked_documents_rels_market_negotiations_id_idx" ON "payload_locked_documents_rels" USING btree ("market_negotiations_id");
|
||||||
CREATE INDEX "payload_locked_documents_rels_tickets_id_idx" ON "payload_locked_documents_rels" USING btree ("tickets_id");
|
|
||||||
ALTER TABLE "missions_factions_involved" DROP COLUMN "faction_name";`)
|
ALTER TABLE "missions_factions_involved" DROP COLUMN "faction_name";`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -717,8 +672,6 @@ export async function down({ db, payload, req }: MigrateDownArgs): Promise<void>
|
||||||
ALTER TABLE "market_listings" DISABLE ROW LEVEL SECURITY;
|
ALTER TABLE "market_listings" DISABLE ROW LEVEL SECURITY;
|
||||||
ALTER TABLE "market_negotiations_history" DISABLE ROW LEVEL SECURITY;
|
ALTER TABLE "market_negotiations_history" DISABLE ROW LEVEL SECURITY;
|
||||||
ALTER TABLE "market_negotiations" DISABLE ROW LEVEL SECURITY;
|
ALTER TABLE "market_negotiations" DISABLE ROW LEVEL SECURITY;
|
||||||
ALTER TABLE "tickets_activity" DISABLE ROW LEVEL SECURITY;
|
|
||||||
ALTER TABLE "tickets" DISABLE ROW LEVEL SECURITY;
|
|
||||||
ALTER TABLE "game_rules_rels" DISABLE ROW LEVEL SECURITY;
|
ALTER TABLE "game_rules_rels" DISABLE ROW LEVEL SECURITY;
|
||||||
DROP TABLE "game_structures_void_storage" CASCADE;
|
DROP TABLE "game_structures_void_storage" CASCADE;
|
||||||
DROP TABLE "game_vehicles_stored_resources" CASCADE;
|
DROP TABLE "game_vehicles_stored_resources" CASCADE;
|
||||||
|
|
@ -746,8 +699,6 @@ export async function down({ db, payload, req }: MigrateDownArgs): Promise<void>
|
||||||
DROP TABLE "market_listings" CASCADE;
|
DROP TABLE "market_listings" CASCADE;
|
||||||
DROP TABLE "market_negotiations_history" CASCADE;
|
DROP TABLE "market_negotiations_history" CASCADE;
|
||||||
DROP TABLE "market_negotiations" CASCADE;
|
DROP TABLE "market_negotiations" CASCADE;
|
||||||
DROP TABLE "tickets_activity" CASCADE;
|
|
||||||
DROP TABLE "tickets" CASCADE;
|
|
||||||
DROP TABLE "game_rules_rels" CASCADE;
|
DROP TABLE "game_rules_rels" CASCADE;
|
||||||
ALTER TABLE "game_structures" DROP CONSTRAINT "game_structures_faction_id_factions_id_fk";
|
ALTER TABLE "game_structures" DROP CONSTRAINT "game_structures_faction_id_factions_id_fk";
|
||||||
|
|
||||||
|
|
@ -789,8 +740,6 @@ export async function down({ db, payload, req }: MigrateDownArgs): Promise<void>
|
||||||
|
|
||||||
ALTER TABLE "payload_locked_documents_rels" DROP CONSTRAINT "payload_locked_documents_rels_market_negotiations_fk";
|
ALTER TABLE "payload_locked_documents_rels" DROP CONSTRAINT "payload_locked_documents_rels_market_negotiations_fk";
|
||||||
|
|
||||||
ALTER TABLE "payload_locked_documents_rels" DROP CONSTRAINT "payload_locked_documents_rels_tickets_fk";
|
|
||||||
|
|
||||||
ALTER TABLE "users_roles" ALTER COLUMN "value" SET DATA TYPE text;
|
ALTER TABLE "users_roles" ALTER COLUMN "value" SET DATA TYPE text;
|
||||||
DROP TYPE "public"."enum_users_roles";
|
DROP TYPE "public"."enum_users_roles";
|
||||||
CREATE TYPE "public"."enum_users_roles" AS ENUM('guest', 'user', 'admin', 'developer');
|
CREATE TYPE "public"."enum_users_roles" AS ENUM('guest', 'user', 'admin', 'developer');
|
||||||
|
|
@ -828,7 +777,6 @@ export async function down({ db, payload, req }: MigrateDownArgs): Promise<void>
|
||||||
DROP INDEX "payload_locked_documents_rels_loadouts_id_idx";
|
DROP INDEX "payload_locked_documents_rels_loadouts_id_idx";
|
||||||
DROP INDEX "payload_locked_documents_rels_market_listings_id_idx";
|
DROP INDEX "payload_locked_documents_rels_market_listings_id_idx";
|
||||||
DROP INDEX "payload_locked_documents_rels_market_negotiations_id_idx";
|
DROP INDEX "payload_locked_documents_rels_market_negotiations_id_idx";
|
||||||
DROP INDEX "payload_locked_documents_rels_tickets_id_idx";
|
|
||||||
ALTER TABLE "missions" ALTER COLUMN "game_details_game_setup_mission_file_id" SET NOT NULL;
|
ALTER TABLE "missions" ALTER COLUMN "game_details_game_setup_mission_file_id" SET NOT NULL;
|
||||||
ALTER TABLE "structures_auto_generated_resources" ALTER COLUMN "min_frequency" SET DEFAULT 1;
|
ALTER TABLE "structures_auto_generated_resources" ALTER COLUMN "min_frequency" SET DEFAULT 1;
|
||||||
ALTER TABLE "missions_factions_involved" ADD COLUMN "faction_name" varchar NOT NULL;
|
ALTER TABLE "missions_factions_involved" ADD COLUMN "faction_name" varchar NOT NULL;
|
||||||
|
|
@ -889,7 +837,6 @@ export async function down({ db, payload, req }: MigrateDownArgs): Promise<void>
|
||||||
ALTER TABLE "payload_locked_documents_rels" DROP COLUMN "loadouts_id";
|
ALTER TABLE "payload_locked_documents_rels" DROP COLUMN "loadouts_id";
|
||||||
ALTER TABLE "payload_locked_documents_rels" DROP COLUMN "market_listings_id";
|
ALTER TABLE "payload_locked_documents_rels" DROP COLUMN "market_listings_id";
|
||||||
ALTER TABLE "payload_locked_documents_rels" DROP COLUMN "market_negotiations_id";
|
ALTER TABLE "payload_locked_documents_rels" DROP COLUMN "market_negotiations_id";
|
||||||
ALTER TABLE "payload_locked_documents_rels" DROP COLUMN "tickets_id";
|
|
||||||
ALTER TABLE "game_rules" DROP COLUMN "proximity_threshold";
|
ALTER TABLE "game_rules" DROP COLUMN "proximity_threshold";
|
||||||
ALTER TABLE "game_rules" DROP COLUMN "game_tick_interval_minutes";
|
ALTER TABLE "game_rules" DROP COLUMN "game_tick_interval_minutes";
|
||||||
ALTER TABLE "game_rules" DROP COLUMN "locker_grid_width";
|
ALTER TABLE "game_rules" DROP COLUMN "locker_grid_width";
|
||||||
|
|
@ -915,9 +862,5 @@ export async function down({ db, payload, req }: MigrateDownArgs): Promise<void>
|
||||||
DROP TYPE "public"."enum_market_negotiations_history_from";
|
DROP TYPE "public"."enum_market_negotiations_history_from";
|
||||||
DROP TYPE "public"."enum_market_negotiations_status";
|
DROP TYPE "public"."enum_market_negotiations_status";
|
||||||
DROP TYPE "public"."enum_market_negotiations_proposed_by";
|
DROP TYPE "public"."enum_market_negotiations_proposed_by";
|
||||||
DROP TYPE "public"."enum_tickets_activity_type";
|
|
||||||
DROP TYPE "public"."enum_tickets_category";
|
|
||||||
DROP TYPE "public"."enum_tickets_priority";
|
|
||||||
DROP TYPE "public"."enum_tickets_status";
|
|
||||||
DROP TYPE "public"."enum_narrative_events_triggers_type";`)
|
DROP TYPE "public"."enum_narrative_events_triggers_type";`)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
15515
src/migrations/20260816_220000.json
Normal file
15515
src/migrations/20260816_220000.json
Normal file
File diff suppressed because it is too large
Load diff
105
src/migrations/20260816_220000.ts
Normal file
105
src/migrations/20260816_220000.ts
Normal file
|
|
@ -0,0 +1,105 @@
|
||||||
|
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_tickets_activity_type" AS ENUM('system', 'agent_message', 'client_message');
|
||||||
|
CREATE TYPE "public"."enum_tickets_category" AS ENUM('bug_report', 'feature_request', 'support_request', 'other');
|
||||||
|
CREATE TYPE "public"."enum_tickets_priority" AS ENUM('low', 'medium', 'high', 'critical');
|
||||||
|
CREATE TYPE "public"."enum_tickets_status" AS ENUM('open', 'in_review', 'planning', 'in_progress', 'waiting_on_reporter', 'in_testing', 'resolved', 'canceled', 'closed');
|
||||||
|
|
||||||
|
ALTER TYPE "public"."enum_game_event_logs_target_collection" ADD VALUE 'tickets';
|
||||||
|
|
||||||
|
ALTER TYPE "public"."enum_users_preferences_notifications_muted_types" ADD VALUE 'ticket:created';
|
||||||
|
ALTER TYPE "public"."enum_users_preferences_notifications_muted_types" ADD VALUE 'ticket:assigned';
|
||||||
|
ALTER TYPE "public"."enum_users_preferences_notifications_muted_types" ADD VALUE 'ticket:reply';
|
||||||
|
ALTER TYPE "public"."enum_users_preferences_notifications_muted_types" ADD VALUE 'ticket:status';
|
||||||
|
|
||||||
|
ALTER TYPE "public"."enum_users_preferences_discord_muted_types" ADD VALUE 'ticket:created';
|
||||||
|
ALTER TYPE "public"."enum_users_preferences_discord_muted_types" ADD VALUE 'ticket:assigned';
|
||||||
|
ALTER TYPE "public"."enum_users_preferences_discord_muted_types" ADD VALUE 'ticket:reply';
|
||||||
|
ALTER TYPE "public"."enum_users_preferences_discord_muted_types" ADD VALUE 'ticket:status';
|
||||||
|
|
||||||
|
CREATE TABLE "tickets_activity" (
|
||||||
|
"_order" integer NOT NULL,
|
||||||
|
"_parent_id" integer NOT NULL,
|
||||||
|
"id" varchar PRIMARY KEY NOT NULL,
|
||||||
|
"type" "enum_tickets_activity_type" DEFAULT 'system' NOT NULL,
|
||||||
|
"content" jsonb NOT NULL,
|
||||||
|
"author_id" integer,
|
||||||
|
"created_at" timestamp(3) with time zone
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE "tickets" (
|
||||||
|
"id" serial PRIMARY KEY NOT NULL,
|
||||||
|
"title" varchar NOT NULL,
|
||||||
|
"description" jsonb NOT NULL,
|
||||||
|
"category" "enum_tickets_category" DEFAULT 'support_request' NOT NULL,
|
||||||
|
"priority" "enum_tickets_priority" DEFAULT 'medium' NOT NULL,
|
||||||
|
"status" "enum_tickets_status" DEFAULT 'open' NOT NULL,
|
||||||
|
"reporter_id" integer NOT NULL,
|
||||||
|
"assignee_id" integer,
|
||||||
|
"closed_at" timestamp(3) with time zone,
|
||||||
|
"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 "tickets_id" integer;
|
||||||
|
|
||||||
|
ALTER TABLE "tickets_activity" ADD CONSTRAINT "tickets_activity_author_id_users_id_fk" FOREIGN KEY ("author_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;
|
||||||
|
ALTER TABLE "tickets_activity" ADD CONSTRAINT "tickets_activity_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."tickets"("id") ON DELETE cascade ON UPDATE no action;
|
||||||
|
ALTER TABLE "tickets" ADD CONSTRAINT "tickets_reporter_id_users_id_fk" FOREIGN KEY ("reporter_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;
|
||||||
|
ALTER TABLE "tickets" ADD CONSTRAINT "tickets_assignee_id_users_id_fk" FOREIGN KEY ("assignee_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;
|
||||||
|
|
||||||
|
CREATE INDEX "tickets_activity_order_idx" ON "tickets_activity" USING btree ("_order");
|
||||||
|
CREATE INDEX "tickets_activity_parent_id_idx" ON "tickets_activity" USING btree ("_parent_id");
|
||||||
|
CREATE INDEX "tickets_activity_author_idx" ON "tickets_activity" USING btree ("author_id");
|
||||||
|
CREATE INDEX "tickets_category_idx" ON "tickets" USING btree ("category");
|
||||||
|
CREATE INDEX "tickets_priority_idx" ON "tickets" USING btree ("priority");
|
||||||
|
CREATE INDEX "tickets_status_idx" ON "tickets" USING btree ("status");
|
||||||
|
CREATE INDEX "tickets_reporter_idx" ON "tickets" USING btree ("reporter_id");
|
||||||
|
CREATE INDEX "tickets_assignee_idx" ON "tickets" USING btree ("assignee_id");
|
||||||
|
CREATE INDEX "tickets_updated_at_idx" ON "tickets" USING btree ("updated_at");
|
||||||
|
CREATE INDEX "tickets_created_at_idx" ON "tickets" USING btree ("created_at");
|
||||||
|
|
||||||
|
ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_tickets_fk" FOREIGN KEY ("tickets_id") REFERENCES "public"."tickets"("id") ON DELETE cascade ON UPDATE no action;
|
||||||
|
CREATE INDEX "payload_locked_documents_rels_tickets_id_idx" ON "payload_locked_documents_rels" USING btree ("tickets_id");
|
||||||
|
|
||||||
|
ALTER TABLE "tickets_activity" DISABLE ROW LEVEL SECURITY;
|
||||||
|
ALTER TABLE "tickets" DISABLE ROW LEVEL SECURITY;`)
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {
|
||||||
|
await db.execute(sql`
|
||||||
|
DROP INDEX "payload_locked_documents_rels_tickets_id_idx";
|
||||||
|
ALTER TABLE "payload_locked_documents_rels" DROP CONSTRAINT "payload_locked_documents_rels_tickets_fk";
|
||||||
|
|
||||||
|
DROP INDEX "tickets_created_at_idx";
|
||||||
|
DROP INDEX "tickets_updated_at_idx";
|
||||||
|
DROP INDEX "tickets_assignee_idx";
|
||||||
|
DROP INDEX "tickets_reporter_idx";
|
||||||
|
DROP INDEX "tickets_status_idx";
|
||||||
|
DROP INDEX "tickets_priority_idx";
|
||||||
|
DROP INDEX "tickets_category_idx";
|
||||||
|
DROP INDEX "tickets_activity_author_idx";
|
||||||
|
DROP INDEX "tickets_activity_parent_id_idx";
|
||||||
|
DROP INDEX "tickets_activity_order_idx";
|
||||||
|
|
||||||
|
ALTER TABLE "tickets_activity" DROP CONSTRAINT "tickets_activity_author_id_users_id_fk";
|
||||||
|
ALTER TABLE "tickets_activity" DROP CONSTRAINT "tickets_activity_parent_id_fk";
|
||||||
|
ALTER TABLE "tickets" DROP CONSTRAINT "tickets_reporter_id_users_id_fk";
|
||||||
|
ALTER TABLE "tickets" DROP CONSTRAINT "tickets_assignee_id_users_id_fk";
|
||||||
|
|
||||||
|
ALTER TABLE "payload_locked_documents_rels" DROP COLUMN "tickets_id";
|
||||||
|
|
||||||
|
DROP TABLE "tickets_activity" CASCADE;
|
||||||
|
DROP TABLE "tickets" CASCADE;
|
||||||
|
|
||||||
|
DROP TYPE "public"."enum_tickets_activity_type";
|
||||||
|
DROP TYPE "public"."enum_tickets_category";
|
||||||
|
DROP TYPE "public"."enum_tickets_priority";
|
||||||
|
DROP TYPE "public"."enum_tickets_status";
|
||||||
|
|
||||||
|
-- Note: the enum values added via ALTER TYPE ... ADD VALUE in up()
|
||||||
|
-- ('tickets', 'ticket:created', 'ticket:assigned', 'ticket:reply', 'ticket:status')
|
||||||
|
-- cannot be removed here: PostgreSQL does not support DROP VALUE.`)
|
||||||
|
}
|
||||||
|
|
@ -5,6 +5,7 @@ import * as migration_20251222_200320 from './20251222_200320';
|
||||||
import * as migration_20251223_055859 from './20251223_055859';
|
import * as migration_20251223_055859 from './20251223_055859';
|
||||||
import * as migration_20260109_065519 from './20260109_065519';
|
import * as migration_20260109_065519 from './20260109_065519';
|
||||||
import * as migration_20260816_213455 from './20260816_213455';
|
import * as migration_20260816_213455 from './20260816_213455';
|
||||||
|
import * as migration_20260816_220000 from './20260816_220000';
|
||||||
|
|
||||||
export const migrations = [
|
export const migrations = [
|
||||||
{
|
{
|
||||||
|
|
@ -40,6 +41,11 @@ export const migrations = [
|
||||||
{
|
{
|
||||||
up: migration_20260816_213455.up,
|
up: migration_20260816_213455.up,
|
||||||
down: migration_20260816_213455.down,
|
down: migration_20260816_213455.down,
|
||||||
name: '20260816_213455'
|
name: '20260816_213455',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
up: migration_20260816_220000.up,
|
||||||
|
down: migration_20260816_220000.down,
|
||||||
|
name: '20260816_220000',
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue