Add VoiceScripts and VoiceSubmissions collections, voiceover event types and event-log targets, the voice-submissions migration, and a voiceover XP group on Profiles counted toward total XP. Ultraworked with [Sisyphus](https://github.com/code-yeongju/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
77 lines
5.4 KiB
TypeScript
77 lines
5.4 KiB
TypeScript
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_voice_scripts_status" AS ENUM('open', 'closed');
|
|
CREATE TYPE "public"."enum_voice_submissions_status" AS ENUM('pending', 'accepted', 'rejected');
|
|
ALTER TYPE "public"."enum_game_event_logs_target_collection" ADD VALUE 'voice-scripts';
|
|
ALTER TYPE "public"."enum_game_event_logs_target_collection" ADD VALUE 'voice-submissions';
|
|
CREATE TABLE "voice_scripts" (
|
|
"id" serial PRIMARY KEY NOT NULL,
|
|
"title" varchar NOT NULL,
|
|
"script" varchar NOT NULL,
|
|
"xp_amount" numeric DEFAULT 250 NOT NULL,
|
|
"status" "enum_voice_scripts_status" DEFAULT 'open' NOT NULL,
|
|
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
|
|
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
|
|
);
|
|
|
|
CREATE TABLE "voice_submissions" (
|
|
"id" serial PRIMARY KEY NOT NULL,
|
|
"script_id" integer NOT NULL,
|
|
"user_id" integer NOT NULL,
|
|
"status" "enum_voice_submissions_status" DEFAULT 'pending' NOT NULL,
|
|
"review_note" varchar,
|
|
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
|
|
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
|
|
"url" varchar,
|
|
"thumbnail_u_r_l" varchar,
|
|
"filename" varchar,
|
|
"mime_type" varchar,
|
|
"filesize" numeric,
|
|
"width" numeric,
|
|
"height" numeric,
|
|
"focal_x" numeric,
|
|
"focal_y" numeric
|
|
);
|
|
|
|
ALTER TABLE "profiles" ADD COLUMN "progression_voiceover_xp_earned" numeric DEFAULT 0;
|
|
ALTER TABLE "payload_locked_documents_rels" ADD COLUMN "voice_scripts_id" integer;
|
|
ALTER TABLE "payload_locked_documents_rels" ADD COLUMN "voice_submissions_id" integer;
|
|
ALTER TABLE "voice_submissions" ADD CONSTRAINT "voice_submissions_script_id_voice_scripts_id_fk" FOREIGN KEY ("script_id") REFERENCES "public"."voice_scripts"("id") ON DELETE set null ON UPDATE no action;
|
|
ALTER TABLE "voice_submissions" ADD CONSTRAINT "voice_submissions_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;
|
|
CREATE INDEX "voice_scripts_updated_at_idx" ON "voice_scripts" USING btree ("updated_at");
|
|
CREATE INDEX "voice_scripts_created_at_idx" ON "voice_scripts" USING btree ("created_at");
|
|
CREATE INDEX "voice_submissions_script_idx" ON "voice_submissions" USING btree ("script_id");
|
|
CREATE INDEX "voice_submissions_user_idx" ON "voice_submissions" USING btree ("user_id");
|
|
CREATE INDEX "voice_submissions_updated_at_idx" ON "voice_submissions" USING btree ("updated_at");
|
|
CREATE INDEX "voice_submissions_created_at_idx" ON "voice_submissions" USING btree ("created_at");
|
|
CREATE UNIQUE INDEX "voice_submissions_filename_idx" ON "voice_submissions" USING btree ("filename");
|
|
ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_voice_scripts_fk" FOREIGN KEY ("voice_scripts_id") REFERENCES "public"."voice_scripts"("id") ON DELETE cascade ON UPDATE no action;
|
|
ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_voice_submissions_fk" FOREIGN KEY ("voice_submissions_id") REFERENCES "public"."voice_submissions"("id") ON DELETE cascade ON UPDATE no action;
|
|
CREATE INDEX "payload_locked_documents_rels_voice_scripts_id_idx" ON "payload_locked_documents_rels" USING btree ("voice_scripts_id");
|
|
CREATE INDEX "payload_locked_documents_rels_voice_submissions_id_idx" ON "payload_locked_documents_rels" USING btree ("voice_submissions_id");`)
|
|
}
|
|
|
|
export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {
|
|
await db.execute(sql`
|
|
ALTER TABLE "voice_scripts" DISABLE ROW LEVEL SECURITY;
|
|
ALTER TABLE "voice_submissions" DISABLE ROW LEVEL SECURITY;
|
|
DROP TABLE "voice_scripts" CASCADE;
|
|
DROP TABLE "voice_submissions" CASCADE;
|
|
ALTER TABLE "payload_locked_documents_rels" DROP CONSTRAINT "payload_locked_documents_rels_voice_scripts_fk";
|
|
|
|
ALTER TABLE "payload_locked_documents_rels" DROP CONSTRAINT "payload_locked_documents_rels_voice_submissions_fk";
|
|
|
|
ALTER TABLE "game_event_logs" ALTER COLUMN "target_collection" SET DATA TYPE text;
|
|
DROP TYPE "public"."enum_game_event_logs_target_collection";
|
|
CREATE TYPE "public"."enum_game_event_logs_target_collection" AS ENUM('game-structures', 'game-vehicles', 'game-npcs', 'npc-staffing', 'structures', 'resources', 'assets', 'vehicles', 'factions', 'missions', 'campaigns', 'users', 'technologies', 'maps', 'shipments', 'bank-accounts', 'bank-transactions', 'ledger-entries', 'locker-storages', 'loadouts', 'market-listings', 'market-negotiations', 'market-state', 'evaluations', 'tickets', 'wiki-pages', 'wiki-revisions', 'wiki-templates', 'game-servers', 'assignment-transfers');
|
|
ALTER TABLE "game_event_logs" ALTER COLUMN "target_collection" SET DATA TYPE "public"."enum_game_event_logs_target_collection" USING "target_collection"::"public"."enum_game_event_logs_target_collection";
|
|
DROP INDEX "payload_locked_documents_rels_voice_scripts_id_idx";
|
|
DROP INDEX "payload_locked_documents_rels_voice_submissions_id_idx";
|
|
ALTER TABLE "profiles" DROP COLUMN "progression_voiceover_xp_earned";
|
|
ALTER TABLE "payload_locked_documents_rels" DROP COLUMN "voice_scripts_id";
|
|
ALTER TABLE "payload_locked_documents_rels" DROP COLUMN "voice_submissions_id";
|
|
DROP TYPE "public"."enum_voice_scripts_status";
|
|
DROP TYPE "public"."enum_voice_submissions_status";`)
|
|
}
|