feat: add card attachment schema
This commit is contained in:
29
packages/db/migrations/20251110204423_AddCardAttachments.sql
Normal file
29
packages/db/migrations/20251110204423_AddCardAttachments.sql
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
ALTER TYPE "public"."card_activity_type" ADD VALUE 'card.updated.attachment.added' BEFORE 'card.archived';--> statement-breakpoint
|
||||||
|
ALTER TYPE "public"."card_activity_type" ADD VALUE 'card.updated.attachment.removed' BEFORE 'card.archived';--> statement-breakpoint
|
||||||
|
CREATE TABLE IF NOT EXISTS "card_attachment" (
|
||||||
|
"id" bigserial PRIMARY KEY NOT NULL,
|
||||||
|
"publicId" varchar(12) NOT NULL,
|
||||||
|
"cardId" bigint NOT NULL,
|
||||||
|
"filename" varchar(255) NOT NULL,
|
||||||
|
"originalFilename" varchar(255) NOT NULL,
|
||||||
|
"contentType" varchar(100) NOT NULL,
|
||||||
|
"size" bigint NOT NULL,
|
||||||
|
"s3Key" varchar(500) NOT NULL,
|
||||||
|
"createdBy" uuid,
|
||||||
|
"createdAt" timestamp DEFAULT now() NOT NULL,
|
||||||
|
"deletedAt" timestamp,
|
||||||
|
CONSTRAINT "card_attachment_publicId_unique" UNIQUE("publicId")
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
ALTER TABLE "card_attachment" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
||||||
|
DO $$ BEGIN
|
||||||
|
ALTER TABLE "card_attachment" ADD CONSTRAINT "card_attachment_cardId_card_id_fk" FOREIGN KEY ("cardId") REFERENCES "public"."card"("id") ON DELETE cascade ON UPDATE no action;
|
||||||
|
EXCEPTION
|
||||||
|
WHEN duplicate_object THEN null;
|
||||||
|
END $$;
|
||||||
|
--> statement-breakpoint
|
||||||
|
DO $$ BEGIN
|
||||||
|
ALTER TABLE "card_attachment" ADD CONSTRAINT "card_attachment_createdBy_user_id_fk" FOREIGN KEY ("createdBy") REFERENCES "public"."user"("id") ON DELETE set null ON UPDATE no action;
|
||||||
|
EXCEPTION
|
||||||
|
WHEN duplicate_object THEN null;
|
||||||
|
END $$;
|
||||||
2954
packages/db/migrations/meta/20251110204423_snapshot.json
Normal file
2954
packages/db/migrations/meta/20251110204423_snapshot.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -134,6 +134,13 @@
|
|||||||
"when": 1760044396109,
|
"when": 1760044396109,
|
||||||
"tag": "20251009211316_AddBoardSourceIdToCardActivity",
|
"tag": "20251009211316_AddBoardSourceIdToCardActivity",
|
||||||
"breakpoints": true
|
"breakpoints": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idx": 19,
|
||||||
|
"version": "7",
|
||||||
|
"when": 1762807463569,
|
||||||
|
"tag": "20251110204423_AddCardAttachments",
|
||||||
|
"breakpoints": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -42,6 +42,8 @@ export const activityTypes = [
|
|||||||
"card.updated.checklist.item.completed",
|
"card.updated.checklist.item.completed",
|
||||||
"card.updated.checklist.item.uncompleted",
|
"card.updated.checklist.item.uncompleted",
|
||||||
"card.updated.checklist.item.deleted",
|
"card.updated.checklist.item.deleted",
|
||||||
|
"card.updated.attachment.added",
|
||||||
|
"card.updated.attachment.removed",
|
||||||
"card.archived",
|
"card.archived",
|
||||||
] as const;
|
] as const;
|
||||||
|
|
||||||
@@ -96,6 +98,7 @@ export const cardsRelations = relations(cards, ({ one, many }) => ({
|
|||||||
comments: many(comments),
|
comments: many(comments),
|
||||||
activities: many(cardActivities),
|
activities: many(cardActivities),
|
||||||
checklists: many(checklists),
|
checklists: many(checklists),
|
||||||
|
attachments: many(cardAttachments),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
export const cardActivities = pgTable("card_activity", {
|
export const cardActivities = pgTable("card_activity", {
|
||||||
@@ -273,3 +276,37 @@ export const commentsRelations = relations(comments, ({ one }) => ({
|
|||||||
relationName: "commentsDeletedByUser",
|
relationName: "commentsDeletedByUser",
|
||||||
}),
|
}),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
export const cardAttachments = pgTable("card_attachment", {
|
||||||
|
id: bigserial("id", { mode: "number" }).primaryKey(),
|
||||||
|
publicId: varchar("publicId", { length: 12 }).notNull().unique(),
|
||||||
|
cardId: bigint("cardId", { mode: "number" })
|
||||||
|
.notNull()
|
||||||
|
.references(() => cards.id, { onDelete: "cascade" }),
|
||||||
|
filename: varchar("filename", { length: 255 }).notNull(),
|
||||||
|
originalFilename: varchar("originalFilename", { length: 255 }).notNull(),
|
||||||
|
contentType: varchar("contentType", { length: 100 }).notNull(),
|
||||||
|
size: bigint("size", { mode: "number" }).notNull(),
|
||||||
|
s3Key: varchar("s3Key", { length: 500 }).notNull(),
|
||||||
|
createdBy: uuid("createdBy").references(() => users.id, {
|
||||||
|
onDelete: "set null",
|
||||||
|
}),
|
||||||
|
createdAt: timestamp("createdAt").defaultNow().notNull(),
|
||||||
|
deletedAt: timestamp("deletedAt"),
|
||||||
|
}).enableRLS();
|
||||||
|
|
||||||
|
export const cardAttachmentsRelations = relations(
|
||||||
|
cardAttachments,
|
||||||
|
({ one }) => ({
|
||||||
|
card: one(cards, {
|
||||||
|
fields: [cardAttachments.cardId],
|
||||||
|
references: [cards.id],
|
||||||
|
relationName: "cardAttachmentsCard",
|
||||||
|
}),
|
||||||
|
createdBy: one(users, {
|
||||||
|
fields: [cardAttachments.createdBy],
|
||||||
|
references: [users.id],
|
||||||
|
relationName: "cardAttachmentsCreatedByUser",
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user