diff --git a/core/lib/server/stages.ts b/core/lib/server/stages.ts index 310fe3d48..bd3d45bf8 100644 --- a/core/lib/server/stages.ts +++ b/core/lib/server/stages.ts @@ -169,6 +169,9 @@ export type CommunityStage = AutoReturnType["executeTakeFirstO export const movePub = (pubId: PubsId, stageId: StagesId, trx = db) => { return autoRevalidate( trx + .with("update_pub", (db) => + db.updateTable("pubs").where("pubs.id", "=", pubId).set("stageId", stageId) + ) .with("leave_stage", (db) => db.deleteFrom("PubsInStages").where("pubId", "=", pubId)) .insertInto("PubsInStages") .values([{ pubId, stageId }]) diff --git a/core/prisma/migrations/20250206223911_add_stage_id_to_pubs/migration.sql b/core/prisma/migrations/20250206223911_add_stage_id_to_pubs/migration.sql new file mode 100644 index 000000000..50973a58e --- /dev/null +++ b/core/prisma/migrations/20250206223911_add_stage_id_to_pubs/migration.sql @@ -0,0 +1,5 @@ +-- AlterTable +ALTER TABLE "pubs" ADD COLUMN "stageId" TEXT; + +-- AddForeignKey +ALTER TABLE "pubs" ADD CONSTRAINT "pubs_stageId_fkey" FOREIGN KEY ("stageId") REFERENCES "stages"("id") ON DELETE SET NULL ON UPDATE CASCADE; \ No newline at end of file diff --git a/core/prisma/schema/schema.dbml b/core/prisma/schema/schema.dbml index a649027fd..87c789c25 100644 --- a/core/prisma/schema/schema.dbml +++ b/core/prisma/schema/schema.dbml @@ -94,6 +94,8 @@ Table pubs { createdAt DateTime [default: `now()`, not null] updatedAt DateTime [default: `now()`, not null] title String + stage stages + stageId String parent pubs parentId String children pubs [not null] @@ -196,6 +198,7 @@ Table stages { actionInstances action_instances [not null] formElements form_elements [not null] members stage_memberships [not null] + Pub pubs [not null] } Table PubsInStages { @@ -621,6 +624,8 @@ Ref: pubs.communityId > communities.id Ref: pubs.assigneeId > users.id +Ref: pubs.stageId > stages.id [delete: Set Null] + Ref: pubs.parentId - pubs.id [delete: Cascade] Ref: pub_fields.pubFieldSchemaId > PubFieldSchema.id diff --git a/core/prisma/schema/schema.prisma b/core/prisma/schema/schema.prisma index 55db04e39..9bb4bb08e 100644 --- a/core/prisma/schema/schema.prisma +++ b/core/prisma/schema/schema.prisma @@ -124,6 +124,8 @@ model Pub { // and the _PubFieldToPubType table // do not attempt to set this manually title String? + stage Stage? @relation(fields: [stageId], references: [id], onDelete: SetNull) + stageId String? parent Pub? @relation("pub_parent", fields: [parentId], references: [id], onDelete: Cascade) parentId String? @@ -265,6 +267,7 @@ model Stage { actionInstances ActionInstance[] formElements FormElement[] members StageMembership[] + Pub Pub[] @@map(name: "stages") } diff --git a/packages/db/src/public/PublicSchema.ts b/packages/db/src/public/PublicSchema.ts index 62eb7d16d..164fb0f46 100644 --- a/packages/db/src/public/PublicSchema.ts +++ b/packages/db/src/public/PublicSchema.ts @@ -33,6 +33,34 @@ import type { StagesTable } from "./Stages"; import type { UsersTable } from "./Users"; export interface PublicSchema { + rules: RulesTable; + + action_runs: ActionRunsTable; + + forms: FormsTable; + + api_access_tokens: ApiAccessTokensTable; + + api_access_logs: ApiAccessLogsTable; + + api_access_permissions: ApiAccessPermissionsTable; + + form_elements: FormElementsTable; + + sessions: SessionsTable; + + community_memberships: CommunityMembershipsTable; + + pub_memberships: PubMembershipsTable; + + stage_memberships: StageMembershipsTable; + + form_memberships: FormMembershipsTable; + + membership_capabilities: MembershipCapabilitiesTable; + + pub_values_history: PubValuesHistoryTable; + _prisma_migrations: PrismaMigrationsTable; users: UsersTable; @@ -64,32 +92,4 @@ export interface PublicSchema { action_instances: ActionInstancesTable; PubsInStages: PubsInStagesTable; - - rules: RulesTable; - - action_runs: ActionRunsTable; - - forms: FormsTable; - - api_access_tokens: ApiAccessTokensTable; - - api_access_logs: ApiAccessLogsTable; - - api_access_permissions: ApiAccessPermissionsTable; - - form_elements: FormElementsTable; - - sessions: SessionsTable; - - community_memberships: CommunityMembershipsTable; - - pub_memberships: PubMembershipsTable; - - stage_memberships: StageMembershipsTable; - - form_memberships: FormMembershipsTable; - - membership_capabilities: MembershipCapabilitiesTable; - - pub_values_history: PubValuesHistoryTable; } diff --git a/packages/db/src/public/Pubs.ts b/packages/db/src/public/Pubs.ts index 63a6f8289..700021e3e 100644 --- a/packages/db/src/public/Pubs.ts +++ b/packages/db/src/public/Pubs.ts @@ -4,9 +4,11 @@ import { z } from "zod"; import type { CommunitiesId } from "./Communities"; import type { PubTypesId } from "./PubTypes"; +import type { StagesId } from "./Stages"; import type { UsersId } from "./Users"; import { communitiesIdSchema } from "./Communities"; import { pubTypesIdSchema } from "./PubTypes"; +import { stagesIdSchema } from "./Stages"; import { usersIdSchema } from "./Users"; // @generated @@ -36,6 +38,8 @@ export interface PubsTable { title: ColumnType; searchVector: ColumnType; + + stageId: ColumnType; } export type Pubs = Selectable; @@ -57,6 +61,7 @@ export const pubsSchema = z.object({ assigneeId: usersIdSchema.nullable(), title: z.string().nullable(), searchVector: z.string().nullable(), + stageId: stagesIdSchema.nullable(), }); export const pubsInitializerSchema = z.object({ @@ -70,6 +75,7 @@ export const pubsInitializerSchema = z.object({ assigneeId: usersIdSchema.optional().nullable(), title: z.string().optional().nullable(), searchVector: z.string().optional().nullable(), + stageId: stagesIdSchema.optional().nullable(), }); export const pubsMutatorSchema = z.object({ @@ -83,4 +89,5 @@ export const pubsMutatorSchema = z.object({ assigneeId: usersIdSchema.optional().nullable(), title: z.string().optional().nullable(), searchVector: z.string().optional().nullable(), + stageId: stagesIdSchema.optional().nullable(), }); diff --git a/packages/db/src/table-names.ts b/packages/db/src/table-names.ts index 86242bf3d..dca6c2ca9 100644 --- a/packages/db/src/table-names.ts +++ b/packages/db/src/table-names.ts @@ -1627,6 +1627,14 @@ export const databaseTables = [ isAutoIncrementing: false, hasDefaultValue: false, }, + { + name: "stageId", + dataType: "text", + dataTypeSchema: "pg_catalog", + isNullable: true, + isAutoIncrementing: false, + hasDefaultValue: false, + }, ], }, {