@shizuoka-its/core 3.0.0-rc.3 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -39,7 +39,6 @@ var schema_exports = /* @__PURE__ */ require_runtime.__exportAll({
|
|
|
39
39
|
memberStatus: () => memberStatus,
|
|
40
40
|
members: () => members,
|
|
41
41
|
membersRelations: () => membersRelations,
|
|
42
|
-
prismaMigrations: () => prismaMigrations,
|
|
43
42
|
resolutionTypeEnum: () => resolutionTypeEnum
|
|
44
43
|
});
|
|
45
44
|
/** readonly配列をpgEnumが要求するmutableタプルに変換する */
|
|
@@ -193,25 +192,6 @@ const memberExhibits = (0, drizzle_orm_pg_core.pgTable)("member_exhibits", {
|
|
|
193
192
|
name: "member_exhibits_member_id_fkey"
|
|
194
193
|
}).onUpdate("cascade").onDelete("restrict")
|
|
195
194
|
]);
|
|
196
|
-
const prismaMigrations = (0, drizzle_orm_pg_core.pgTable)("_prisma_migrations", {
|
|
197
|
-
id: (0, drizzle_orm_pg_core.varchar)({ length: 36 }).primaryKey().notNull(),
|
|
198
|
-
checksum: (0, drizzle_orm_pg_core.varchar)({ length: 64 }).notNull(),
|
|
199
|
-
finishedAt: (0, drizzle_orm_pg_core.timestamp)("finished_at", {
|
|
200
|
-
withTimezone: true,
|
|
201
|
-
mode: "string"
|
|
202
|
-
}),
|
|
203
|
-
migrationName: (0, drizzle_orm_pg_core.varchar)("migration_name", { length: 255 }).notNull(),
|
|
204
|
-
logs: (0, drizzle_orm_pg_core.text)(),
|
|
205
|
-
rolledBackAt: (0, drizzle_orm_pg_core.timestamp)("rolled_back_at", {
|
|
206
|
-
withTimezone: true,
|
|
207
|
-
mode: "string"
|
|
208
|
-
}),
|
|
209
|
-
startedAt: (0, drizzle_orm_pg_core.timestamp)("started_at", {
|
|
210
|
-
withTimezone: true,
|
|
211
|
-
mode: "string"
|
|
212
|
-
}).defaultNow().notNull(),
|
|
213
|
-
appliedStepsCount: (0, drizzle_orm_pg_core.integer)("applied_steps_count").default(0).notNull()
|
|
214
|
-
});
|
|
215
195
|
const kartes = (0, drizzle_orm_pg_core.pgTable)("kartes", {
|
|
216
196
|
id: (0, drizzle_orm_pg_core.text)().primaryKey(),
|
|
217
197
|
recordedAt: (0, drizzle_orm_pg_core.timestamp)("recorded_at").notNull(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.cjs","names":["CLIENT_TYPES","RESOLUTION_TYPES","FOLLOW_UP_OPTIONS","CONSULTED_AT_PRECISIONS","CONSULTATION_CATEGORIES","MEMBER_EVENT_NAMES","DISCORD_ACCOUNT_EVENT_NAMES","ASSIGNEE_TYPES"],"sources":["../../../src/infrastructure/drizzle/schema.ts"],"sourcesContent":["import { relations } from \"drizzle-orm\";\nimport { sql } from \"drizzle-orm\";\nimport {\n\tboolean,\n\tchar,\n\tforeignKey,\n\tindex,\n\tinteger,\n\tjsonb,\n\tpgEnum,\n\tpgTable,\n\ttext,\n\ttimestamp,\n\tuniqueIndex,\n\tuuid,\n\tvarchar,\n} from \"drizzle-orm/pg-core\";\nimport {\n\tASSIGNEE_TYPES,\n\tCLIENT_TYPES,\n\tCONSULTATION_CATEGORIES,\n\tCONSULTED_AT_PRECISIONS,\n\tDISCORD_ACCOUNT_EVENT_NAMES,\n\tFOLLOW_UP_OPTIONS,\n\tMEMBER_EVENT_NAMES,\n\tRESOLUTION_TYPES,\n\ttype Affiliation,\n\ttype CompleteAffiliation,\n\ttype Recorded,\n} from \"#domain\";\n\n// ============================================================================\n// Event Payload Types\n// ============================================================================\n\n/** Member集約ドメインイベントのpayload型(共通カラム以外の固有データ) */\nexport type MemberEventPayload =\n\t| {\n\t\t\tname: string;\n\t\t\tpersonalEmail: Recorded<string>;\n\t\t\tstudentId: string;\n\t\t\taffiliation: CompleteAffiliation;\n\t }\n\t| { reason: string }\n\t| { studentId: string; affiliation: CompleteAffiliation }\n\t| Record<string, never>\n\t| {\n\t\t\tpreviousAffiliation: CompleteAffiliation;\n\t\t\tnewAffiliation: CompleteAffiliation;\n\t\t\tpreviousStudentId: string;\n\t\t\tnewStudentId: string;\n\t }\n\t| {\n\t\t\tpreviousAffiliation: CompleteAffiliation;\n\t\t\tnewAffiliation: CompleteAffiliation;\n\t }\n\t| { previousStudentId: string; newStudentId: string }\n\t| { previousName: string; newName: string }\n\t| {\n\t\t\tpreviousPersonalEmail: Recorded<string>;\n\t\t\tnewPersonalEmail: Recorded<string>;\n\t };\n\n/** DiscordAccount集約ドメインイベントのpayload型 */\nexport type DiscordAccountEventPayload =\n\t| { nickName: string }\n\t| { previousNickName: string; newNickName: string };\n\n// ============================================================================\n// Enums\n// ============================================================================\n\n/** readonly配列をpgEnumが要求するmutableタプルに変換する */\nfunction toEnumValues<T extends string>(values: readonly T[]): [T, ...T[]] {\n\treturn [...values] as [T, ...T[]];\n}\n\nexport const memberStatus = pgEnum(\"member_status\", [\"active\", \"unconfirmed\", \"former\"]);\n\nexport const clientTypeEnum = pgEnum(\"client_type\", toEnumValues(CLIENT_TYPES));\n\nexport const resolutionTypeEnum = pgEnum(\"resolution_type\", toEnumValues(RESOLUTION_TYPES));\n\nexport const followUpEnum = pgEnum(\"follow_up\", toEnumValues(FOLLOW_UP_OPTIONS));\n\nexport const consultedAtPrecisionEnum = pgEnum(\n\t\"consulted_at_precision\",\n\ttoEnumValues(CONSULTED_AT_PRECISIONS),\n);\n\nexport const consultationCategoryEnum = pgEnum(\n\t\"consultation_category\",\n\ttoEnumValues(CONSULTATION_CATEGORIES.map((c) => c.id)),\n);\n\nexport const memberEventNameEnum = pgEnum(\"member_event_name\", toEnumValues(MEMBER_EVENT_NAMES));\n\nexport const discordAccountEventNameEnum = pgEnum(\n\t\"discord_account_event_name\",\n\ttoEnumValues(DISCORD_ACCOUNT_EVENT_NAMES),\n);\n\n// ============================================================================\n// Tables (introspected from production database)\n// ============================================================================\n\nexport const members = pgTable(\n\t\"members\",\n\t{\n\t\tid: text().primaryKey().notNull(),\n\t\tname: text().notNull(),\n\t\tstudentId: varchar(\"student_id\", { length: 8 }),\n\t\temail: text().notNull(),\n\t\tpersonalEmail: text(\"personal_email\"),\n\t\tstatus: memberStatus().notNull().default(\"active\"),\n\t\taffiliation: jsonb().$type<Affiliation>(),\n\t\tcreatedAt: timestamp({ mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tuniqueIndex(\"members_email_key\").using(\"btree\", table.email.asc().nullsLast().op(\"text_ops\")),\n\t],\n);\n\nexport const discordAccounts = pgTable(\n\t\"discord_accounts\",\n\t{\n\t\tdiscordId: text(\"discord_id\").primaryKey().notNull(),\n\t\tnickName: text(\"nick_name\").notNull(),\n\t\tmemberId: text(\"member_id\").notNull(),\n\t\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tforeignKey({\n\t\t\tcolumns: [table.memberId],\n\t\t\tforeignColumns: [members.id],\n\t\t\tname: \"discord_accounts_member_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\nexport const events = pgTable(\"events\", {\n\tid: text().primaryKey().notNull(),\n\tname: text().notNull(),\n\tdate: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t.notNull(),\n\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n});\n\nexport const exhibits = pgTable(\n\t\"exhibits\",\n\t{\n\t\tid: text().primaryKey().notNull(),\n\t\tname: text().notNull(),\n\t\tdescription: text(),\n\t\turl: text(),\n\t\teventId: text(\"event_id\").notNull(),\n\t\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\t\tmarkdownContent: text(\"markdown_content\"),\n\t},\n\t(table) => [\n\t\tforeignKey({\n\t\t\tcolumns: [table.eventId],\n\t\t\tforeignColumns: [events.id],\n\t\t\tname: \"exhibits_event_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\nexport const lightningTalks = pgTable(\n\t\"lightning_talks\",\n\t{\n\t\texhibitId: text(\"exhibit_id\").primaryKey().notNull(),\n\t\tstartTime: timestamp(\"start_time\", {\n\t\t\tprecision: 3,\n\t\t\tmode: \"string\",\n\t\t}).notNull(),\n\t\tduration: integer().notNull(),\n\t\tslideUrl: text(\"slide_url\"),\n\t\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tforeignKey({\n\t\t\tcolumns: [table.exhibitId],\n\t\t\tforeignColumns: [exhibits.id],\n\t\t\tname: \"lightning_talks_exhibit_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\nexport const memberEvents = pgTable(\n\t\"member_events\",\n\t{\n\t\tid: text().primaryKey().notNull(),\n\t\tmemberId: text(\"member_id\").notNull(),\n\t\teventId: text(\"event_id\").notNull(),\n\t\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tuniqueIndex(\"member_events_member_id_event_id_key\").using(\n\t\t\t\"btree\",\n\t\t\ttable.memberId.asc().nullsLast().op(\"text_ops\"),\n\t\t\ttable.eventId.asc().nullsLast().op(\"text_ops\"),\n\t\t),\n\t\tforeignKey({\n\t\t\tcolumns: [table.eventId],\n\t\t\tforeignColumns: [events.id],\n\t\t\tname: \"member_events_event_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t\tforeignKey({\n\t\t\tcolumns: [table.memberId],\n\t\t\tforeignColumns: [members.id],\n\t\t\tname: \"member_events_member_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\nexport const memberExhibits = pgTable(\n\t\"member_exhibits\",\n\t{\n\t\tid: text().primaryKey().notNull(),\n\t\tmemberId: text(\"member_id\").notNull(),\n\t\texhibitId: text(\"exhibit_id\").notNull(),\n\t\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tuniqueIndex(\"member_exhibits_member_id_exhibit_id_key\").using(\n\t\t\t\"btree\",\n\t\t\ttable.memberId.asc().nullsLast().op(\"text_ops\"),\n\t\t\ttable.exhibitId.asc().nullsLast().op(\"text_ops\"),\n\t\t),\n\t\tforeignKey({\n\t\t\tcolumns: [table.exhibitId],\n\t\t\tforeignColumns: [exhibits.id],\n\t\t\tname: \"member_exhibits_exhibit_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t\tforeignKey({\n\t\t\tcolumns: [table.memberId],\n\t\t\tforeignColumns: [members.id],\n\t\t\tname: \"member_exhibits_member_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\nexport const prismaMigrations = pgTable(\"_prisma_migrations\", {\n\tid: varchar({ length: 36 }).primaryKey().notNull(),\n\tchecksum: varchar({ length: 64 }).notNull(),\n\tfinishedAt: timestamp(\"finished_at\", { withTimezone: true, mode: \"string\" }),\n\tmigrationName: varchar(\"migration_name\", { length: 255 }).notNull(),\n\tlogs: text(),\n\trolledBackAt: timestamp(\"rolled_back_at\", {\n\t\twithTimezone: true,\n\t\tmode: \"string\",\n\t}),\n\tstartedAt: timestamp(\"started_at\", { withTimezone: true, mode: \"string\" }).defaultNow().notNull(),\n\tappliedStepsCount: integer(\"applied_steps_count\").default(0).notNull(),\n});\n\n// ============================================================================\n// Karte Tables\n// ============================================================================\n\nexport const kartes = pgTable(\"kartes\", {\n\tid: text().primaryKey(),\n\trecordedAt: timestamp(\"recorded_at\").notNull(),\n\t/** NULL = notRecorded */\n\tconsultedAt: timestamp(\"consulted_at\"),\n\t/** consultedAtの精度。consultedAtがNULLならNULL */\n\tconsultedAtPrecision: consultedAtPrecisionEnum(\"consulted_at_precision\"),\n\tlastUpdatedAt: timestamp(\"last_updated_at\").notNull(),\n\t/** NULL = notRecorded */\n\tclientType: clientTypeEnum(\"client_type\"),\n\t/** NULL when client is notRecorded */\n\tclientName: text(\"client_name\"),\n\t/** Only for student clients; 学籍番号は8文字固定 */\n\tclientStudentId: char(\"client_student_id\", { length: 8 }),\n\t/** Only for student clients; Affiliation as JSONB */\n\tclientAffiliation: jsonb(\"client_affiliation\").$type<Affiliation>(),\n\tliabilityConsent: boolean(\"liability_consent\").notNull(),\n\tdisclosureConsent: boolean(\"disclosure_consent\").notNull(),\n\t/** 空配列 = notRecorded */\n\tcategoryIds: consultationCategoryEnum(\"category_ids\").array().notNull().default([]),\n\t/** NULL = notRecorded */\n\ttroubleDetails: text(\"trouble_details\"),\n\t/** NULL = notRecorded */\n\ttargetDevice: text(\"target_device\"),\n\t/** NULL = notRecorded */\n\tsupportContent: text(\"support_content\"),\n\t/** NULL = notRecorded */\n\tresolutionType: resolutionTypeEnum(\"resolution_type\"),\n\t/** Only for unresolved; NULL = notRecorded or N/A */\n\tfollowUp: followUpEnum(\"follow_up\"),\n\t/** NULL = notRecorded */\n\tworkDurationMinutes: integer(\"work_duration_minutes\"),\n});\n\nexport const assigneeTypeEnum = pgEnum(\"assignee_type\", toEnumValues(ASSIGNEE_TYPES));\n\nexport const karteAssignees = pgTable(\n\t\"karte_assignees\",\n\t{\n\t\tkarteId: text(\"karte_id\").notNull(),\n\t\tassigneeType: assigneeTypeEnum(\"assignee_type\").notNull(),\n\t\t/** resolved の場合のみ。メンバーID */\n\t\tmemberId: text(\"member_id\"),\n\t\t/** unresolved の場合のみ。対応者名 */\n\t\tassigneeName: text(\"assignee_name\"),\n\t},\n\t(table) => [\n\t\tforeignKey({\n\t\t\tcolumns: [table.karteId],\n\t\t\tforeignColumns: [kartes.id],\n\t\t\tname: \"karte_assignees_karte_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"cascade\"),\n\t\tforeignKey({\n\t\t\tcolumns: [table.memberId],\n\t\t\tforeignColumns: [members.id],\n\t\t\tname: \"karte_assignees_member_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\n// ============================================================================\n// Domain Event Tables\n// ============================================================================\n\nexport const memberDomainEvents = pgTable(\n\t\"member_domain_events\",\n\t{\n\t\tid: uuid().primaryKey(),\n\t\tmemberId: text(\"member_id\").notNull(),\n\t\temail: text().notNull(),\n\t\teventName: memberEventNameEnum(\"event_name\").notNull(),\n\t\tpayload: jsonb().notNull().$type<MemberEventPayload>(),\n\t\toccurredAt: timestamp(\"occurred_at\", { mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tindex(\"member_domain_events_member_id_idx\").on(table.memberId),\n\t\tindex(\"member_domain_events_event_name_idx\").on(table.eventName),\n\t\tindex(\"member_domain_events_occurred_at_idx\").on(table.occurredAt),\n\t],\n);\n\nexport const discordAccountDomainEvents = pgTable(\n\t\"discord_account_domain_events\",\n\t{\n\t\tid: uuid().primaryKey(),\n\t\tdiscordId: text(\"discord_id\").notNull(),\n\t\tmemberId: text(\"member_id\").notNull(),\n\t\teventName: discordAccountEventNameEnum(\"event_name\").notNull(),\n\t\tpayload: jsonb().notNull().$type<DiscordAccountEventPayload>(),\n\t\toccurredAt: timestamp(\"occurred_at\", { mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tindex(\"discord_account_domain_events_discord_id_idx\").on(table.discordId),\n\t\tindex(\"discord_account_domain_events_member_id_idx\").on(table.memberId),\n\t\tindex(\"discord_account_domain_events_occurred_at_idx\").on(table.occurredAt),\n\t],\n);\n\n// ============================================================================\n// Relations\n// ============================================================================\n\nexport const membersRelations = relations(members, ({ many }) => ({\n\tdiscordAccounts: many(discordAccounts),\n\tmemberEvents: many(memberEvents),\n\tmemberExhibits: many(memberExhibits),\n}));\n\nexport const discordAccountsRelations = relations(discordAccounts, ({ one }) => ({\n\tmember: one(members, {\n\t\tfields: [discordAccounts.memberId],\n\t\treferences: [members.id],\n\t}),\n}));\n\nexport const eventsRelations = relations(events, ({ many }) => ({\n\tmemberEvents: many(memberEvents),\n\texhibits: many(exhibits),\n}));\n\nexport const exhibitsRelations = relations(exhibits, ({ one, many }) => ({\n\tevent: one(events, {\n\t\tfields: [exhibits.eventId],\n\t\treferences: [events.id],\n\t}),\n\tlightningTalk: one(lightningTalks, {\n\t\tfields: [exhibits.id],\n\t\treferences: [lightningTalks.exhibitId],\n\t}),\n\tmemberExhibits: many(memberExhibits),\n}));\n\nexport const lightningTalksRelations = relations(lightningTalks, ({ one }) => ({\n\texhibit: one(exhibits, {\n\t\tfields: [lightningTalks.exhibitId],\n\t\treferences: [exhibits.id],\n\t}),\n}));\n\nexport const memberEventsRelations = relations(memberEvents, ({ one }) => ({\n\tmember: one(members, {\n\t\tfields: [memberEvents.memberId],\n\t\treferences: [members.id],\n\t}),\n\tevent: one(events, {\n\t\tfields: [memberEvents.eventId],\n\t\treferences: [events.id],\n\t}),\n}));\n\nexport const memberExhibitsRelations = relations(memberExhibits, ({ one }) => ({\n\tmember: one(members, {\n\t\tfields: [memberExhibits.memberId],\n\t\treferences: [members.id],\n\t}),\n\texhibit: one(exhibits, {\n\t\tfields: [memberExhibits.exhibitId],\n\t\treferences: [exhibits.id],\n\t}),\n}));\n\n// ============================================================================\n// Karte Relations\n// ============================================================================\n\nexport const kartesRelations = relations(kartes, ({ many }) => ({\n\tkarteAssignees: many(karteAssignees),\n}));\n\nexport const karteAssigneesRelations = relations(karteAssignees, ({ one }) => ({\n\tkarte: one(kartes, {\n\t\tfields: [karteAssignees.karteId],\n\t\treferences: [kartes.id],\n\t}),\n\tmember: one(members, {\n\t\tfields: [karteAssignees.memberId],\n\t\treferences: [members.id],\n\t}),\n}));\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema.cjs","names":["CLIENT_TYPES","RESOLUTION_TYPES","FOLLOW_UP_OPTIONS","CONSULTED_AT_PRECISIONS","CONSULTATION_CATEGORIES","MEMBER_EVENT_NAMES","DISCORD_ACCOUNT_EVENT_NAMES","ASSIGNEE_TYPES"],"sources":["../../../src/infrastructure/drizzle/schema.ts"],"sourcesContent":["import { relations } from \"drizzle-orm\";\nimport { sql } from \"drizzle-orm\";\nimport {\n\tboolean,\n\tchar,\n\tforeignKey,\n\tindex,\n\tinteger,\n\tjsonb,\n\tpgEnum,\n\tpgTable,\n\ttext,\n\ttimestamp,\n\tuniqueIndex,\n\tuuid,\n\tvarchar,\n} from \"drizzle-orm/pg-core\";\nimport {\n\tASSIGNEE_TYPES,\n\tCLIENT_TYPES,\n\tCONSULTATION_CATEGORIES,\n\tCONSULTED_AT_PRECISIONS,\n\tDISCORD_ACCOUNT_EVENT_NAMES,\n\tFOLLOW_UP_OPTIONS,\n\tMEMBER_EVENT_NAMES,\n\tRESOLUTION_TYPES,\n\ttype Affiliation,\n\ttype CompleteAffiliation,\n\ttype Recorded,\n} from \"#domain\";\n\n// ============================================================================\n// Event Payload Types\n// ============================================================================\n\n/** Member集約ドメインイベントのpayload型(共通カラム以外の固有データ) */\nexport type MemberEventPayload =\n\t| {\n\t\t\tname: string;\n\t\t\tpersonalEmail: Recorded<string>;\n\t\t\tstudentId: string;\n\t\t\taffiliation: CompleteAffiliation;\n\t }\n\t| { reason: string }\n\t| { studentId: string; affiliation: CompleteAffiliation }\n\t| Record<string, never>\n\t| {\n\t\t\tpreviousAffiliation: CompleteAffiliation;\n\t\t\tnewAffiliation: CompleteAffiliation;\n\t\t\tpreviousStudentId: string;\n\t\t\tnewStudentId: string;\n\t }\n\t| {\n\t\t\tpreviousAffiliation: CompleteAffiliation;\n\t\t\tnewAffiliation: CompleteAffiliation;\n\t }\n\t| { previousStudentId: string; newStudentId: string }\n\t| { previousName: string; newName: string }\n\t| {\n\t\t\tpreviousPersonalEmail: Recorded<string>;\n\t\t\tnewPersonalEmail: Recorded<string>;\n\t };\n\n/** DiscordAccount集約ドメインイベントのpayload型 */\nexport type DiscordAccountEventPayload =\n\t| { nickName: string }\n\t| { previousNickName: string; newNickName: string };\n\n// ============================================================================\n// Enums\n// ============================================================================\n\n/** readonly配列をpgEnumが要求するmutableタプルに変換する */\nfunction toEnumValues<T extends string>(values: readonly T[]): [T, ...T[]] {\n\treturn [...values] as [T, ...T[]];\n}\n\nexport const memberStatus = pgEnum(\"member_status\", [\"active\", \"unconfirmed\", \"former\"]);\n\nexport const clientTypeEnum = pgEnum(\"client_type\", toEnumValues(CLIENT_TYPES));\n\nexport const resolutionTypeEnum = pgEnum(\"resolution_type\", toEnumValues(RESOLUTION_TYPES));\n\nexport const followUpEnum = pgEnum(\"follow_up\", toEnumValues(FOLLOW_UP_OPTIONS));\n\nexport const consultedAtPrecisionEnum = pgEnum(\n\t\"consulted_at_precision\",\n\ttoEnumValues(CONSULTED_AT_PRECISIONS),\n);\n\nexport const consultationCategoryEnum = pgEnum(\n\t\"consultation_category\",\n\ttoEnumValues(CONSULTATION_CATEGORIES.map((c) => c.id)),\n);\n\nexport const memberEventNameEnum = pgEnum(\"member_event_name\", toEnumValues(MEMBER_EVENT_NAMES));\n\nexport const discordAccountEventNameEnum = pgEnum(\n\t\"discord_account_event_name\",\n\ttoEnumValues(DISCORD_ACCOUNT_EVENT_NAMES),\n);\n\n// ============================================================================\n// Tables (introspected from production database)\n// ============================================================================\n\nexport const members = pgTable(\n\t\"members\",\n\t{\n\t\tid: text().primaryKey().notNull(),\n\t\tname: text().notNull(),\n\t\tstudentId: varchar(\"student_id\", { length: 8 }),\n\t\temail: text().notNull(),\n\t\tpersonalEmail: text(\"personal_email\"),\n\t\tstatus: memberStatus().notNull().default(\"active\"),\n\t\taffiliation: jsonb().$type<Affiliation>(),\n\t\tcreatedAt: timestamp({ mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tuniqueIndex(\"members_email_key\").using(\"btree\", table.email.asc().nullsLast().op(\"text_ops\")),\n\t],\n);\n\nexport const discordAccounts = pgTable(\n\t\"discord_accounts\",\n\t{\n\t\tdiscordId: text(\"discord_id\").primaryKey().notNull(),\n\t\tnickName: text(\"nick_name\").notNull(),\n\t\tmemberId: text(\"member_id\").notNull(),\n\t\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tforeignKey({\n\t\t\tcolumns: [table.memberId],\n\t\t\tforeignColumns: [members.id],\n\t\t\tname: \"discord_accounts_member_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\nexport const events = pgTable(\"events\", {\n\tid: text().primaryKey().notNull(),\n\tname: text().notNull(),\n\tdate: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t.notNull(),\n\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n});\n\nexport const exhibits = pgTable(\n\t\"exhibits\",\n\t{\n\t\tid: text().primaryKey().notNull(),\n\t\tname: text().notNull(),\n\t\tdescription: text(),\n\t\turl: text(),\n\t\teventId: text(\"event_id\").notNull(),\n\t\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\t\tmarkdownContent: text(\"markdown_content\"),\n\t},\n\t(table) => [\n\t\tforeignKey({\n\t\t\tcolumns: [table.eventId],\n\t\t\tforeignColumns: [events.id],\n\t\t\tname: \"exhibits_event_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\nexport const lightningTalks = pgTable(\n\t\"lightning_talks\",\n\t{\n\t\texhibitId: text(\"exhibit_id\").primaryKey().notNull(),\n\t\tstartTime: timestamp(\"start_time\", {\n\t\t\tprecision: 3,\n\t\t\tmode: \"string\",\n\t\t}).notNull(),\n\t\tduration: integer().notNull(),\n\t\tslideUrl: text(\"slide_url\"),\n\t\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tforeignKey({\n\t\t\tcolumns: [table.exhibitId],\n\t\t\tforeignColumns: [exhibits.id],\n\t\t\tname: \"lightning_talks_exhibit_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\nexport const memberEvents = pgTable(\n\t\"member_events\",\n\t{\n\t\tid: text().primaryKey().notNull(),\n\t\tmemberId: text(\"member_id\").notNull(),\n\t\teventId: text(\"event_id\").notNull(),\n\t\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tuniqueIndex(\"member_events_member_id_event_id_key\").using(\n\t\t\t\"btree\",\n\t\t\ttable.memberId.asc().nullsLast().op(\"text_ops\"),\n\t\t\ttable.eventId.asc().nullsLast().op(\"text_ops\"),\n\t\t),\n\t\tforeignKey({\n\t\t\tcolumns: [table.eventId],\n\t\t\tforeignColumns: [events.id],\n\t\t\tname: \"member_events_event_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t\tforeignKey({\n\t\t\tcolumns: [table.memberId],\n\t\t\tforeignColumns: [members.id],\n\t\t\tname: \"member_events_member_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\nexport const memberExhibits = pgTable(\n\t\"member_exhibits\",\n\t{\n\t\tid: text().primaryKey().notNull(),\n\t\tmemberId: text(\"member_id\").notNull(),\n\t\texhibitId: text(\"exhibit_id\").notNull(),\n\t\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tuniqueIndex(\"member_exhibits_member_id_exhibit_id_key\").using(\n\t\t\t\"btree\",\n\t\t\ttable.memberId.asc().nullsLast().op(\"text_ops\"),\n\t\t\ttable.exhibitId.asc().nullsLast().op(\"text_ops\"),\n\t\t),\n\t\tforeignKey({\n\t\t\tcolumns: [table.exhibitId],\n\t\t\tforeignColumns: [exhibits.id],\n\t\t\tname: \"member_exhibits_exhibit_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t\tforeignKey({\n\t\t\tcolumns: [table.memberId],\n\t\t\tforeignColumns: [members.id],\n\t\t\tname: \"member_exhibits_member_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\n// ============================================================================\n// Karte Tables\n// ============================================================================\n\nexport const kartes = pgTable(\"kartes\", {\n\tid: text().primaryKey(),\n\trecordedAt: timestamp(\"recorded_at\").notNull(),\n\t/** NULL = notRecorded */\n\tconsultedAt: timestamp(\"consulted_at\"),\n\t/** consultedAtの精度。consultedAtがNULLならNULL */\n\tconsultedAtPrecision: consultedAtPrecisionEnum(\"consulted_at_precision\"),\n\tlastUpdatedAt: timestamp(\"last_updated_at\").notNull(),\n\t/** NULL = notRecorded */\n\tclientType: clientTypeEnum(\"client_type\"),\n\t/** NULL when client is notRecorded */\n\tclientName: text(\"client_name\"),\n\t/** Only for student clients; 学籍番号は8文字固定 */\n\tclientStudentId: char(\"client_student_id\", { length: 8 }),\n\t/** Only for student clients; Affiliation as JSONB */\n\tclientAffiliation: jsonb(\"client_affiliation\").$type<Affiliation>(),\n\tliabilityConsent: boolean(\"liability_consent\").notNull(),\n\tdisclosureConsent: boolean(\"disclosure_consent\").notNull(),\n\t/** 空配列 = notRecorded */\n\tcategoryIds: consultationCategoryEnum(\"category_ids\").array().notNull().default([]),\n\t/** NULL = notRecorded */\n\ttroubleDetails: text(\"trouble_details\"),\n\t/** NULL = notRecorded */\n\ttargetDevice: text(\"target_device\"),\n\t/** NULL = notRecorded */\n\tsupportContent: text(\"support_content\"),\n\t/** NULL = notRecorded */\n\tresolutionType: resolutionTypeEnum(\"resolution_type\"),\n\t/** Only for unresolved; NULL = notRecorded or N/A */\n\tfollowUp: followUpEnum(\"follow_up\"),\n\t/** NULL = notRecorded */\n\tworkDurationMinutes: integer(\"work_duration_minutes\"),\n});\n\nexport const assigneeTypeEnum = pgEnum(\"assignee_type\", toEnumValues(ASSIGNEE_TYPES));\n\nexport const karteAssignees = pgTable(\n\t\"karte_assignees\",\n\t{\n\t\tkarteId: text(\"karte_id\").notNull(),\n\t\tassigneeType: assigneeTypeEnum(\"assignee_type\").notNull(),\n\t\t/** resolved の場合のみ。メンバーID */\n\t\tmemberId: text(\"member_id\"),\n\t\t/** unresolved の場合のみ。対応者名 */\n\t\tassigneeName: text(\"assignee_name\"),\n\t},\n\t(table) => [\n\t\tforeignKey({\n\t\t\tcolumns: [table.karteId],\n\t\t\tforeignColumns: [kartes.id],\n\t\t\tname: \"karte_assignees_karte_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"cascade\"),\n\t\tforeignKey({\n\t\t\tcolumns: [table.memberId],\n\t\t\tforeignColumns: [members.id],\n\t\t\tname: \"karte_assignees_member_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\n// ============================================================================\n// Domain Event Tables\n// ============================================================================\n\nexport const memberDomainEvents = pgTable(\n\t\"member_domain_events\",\n\t{\n\t\tid: uuid().primaryKey(),\n\t\tmemberId: text(\"member_id\").notNull(),\n\t\temail: text().notNull(),\n\t\teventName: memberEventNameEnum(\"event_name\").notNull(),\n\t\tpayload: jsonb().notNull().$type<MemberEventPayload>(),\n\t\toccurredAt: timestamp(\"occurred_at\", { mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tindex(\"member_domain_events_member_id_idx\").on(table.memberId),\n\t\tindex(\"member_domain_events_event_name_idx\").on(table.eventName),\n\t\tindex(\"member_domain_events_occurred_at_idx\").on(table.occurredAt),\n\t],\n);\n\nexport const discordAccountDomainEvents = pgTable(\n\t\"discord_account_domain_events\",\n\t{\n\t\tid: uuid().primaryKey(),\n\t\tdiscordId: text(\"discord_id\").notNull(),\n\t\tmemberId: text(\"member_id\").notNull(),\n\t\teventName: discordAccountEventNameEnum(\"event_name\").notNull(),\n\t\tpayload: jsonb().notNull().$type<DiscordAccountEventPayload>(),\n\t\toccurredAt: timestamp(\"occurred_at\", { mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tindex(\"discord_account_domain_events_discord_id_idx\").on(table.discordId),\n\t\tindex(\"discord_account_domain_events_member_id_idx\").on(table.memberId),\n\t\tindex(\"discord_account_domain_events_occurred_at_idx\").on(table.occurredAt),\n\t],\n);\n\n// ============================================================================\n// Relations\n// ============================================================================\n\nexport const membersRelations = relations(members, ({ many }) => ({\n\tdiscordAccounts: many(discordAccounts),\n\tmemberEvents: many(memberEvents),\n\tmemberExhibits: many(memberExhibits),\n}));\n\nexport const discordAccountsRelations = relations(discordAccounts, ({ one }) => ({\n\tmember: one(members, {\n\t\tfields: [discordAccounts.memberId],\n\t\treferences: [members.id],\n\t}),\n}));\n\nexport const eventsRelations = relations(events, ({ many }) => ({\n\tmemberEvents: many(memberEvents),\n\texhibits: many(exhibits),\n}));\n\nexport const exhibitsRelations = relations(exhibits, ({ one, many }) => ({\n\tevent: one(events, {\n\t\tfields: [exhibits.eventId],\n\t\treferences: [events.id],\n\t}),\n\tlightningTalk: one(lightningTalks, {\n\t\tfields: [exhibits.id],\n\t\treferences: [lightningTalks.exhibitId],\n\t}),\n\tmemberExhibits: many(memberExhibits),\n}));\n\nexport const lightningTalksRelations = relations(lightningTalks, ({ one }) => ({\n\texhibit: one(exhibits, {\n\t\tfields: [lightningTalks.exhibitId],\n\t\treferences: [exhibits.id],\n\t}),\n}));\n\nexport const memberEventsRelations = relations(memberEvents, ({ one }) => ({\n\tmember: one(members, {\n\t\tfields: [memberEvents.memberId],\n\t\treferences: [members.id],\n\t}),\n\tevent: one(events, {\n\t\tfields: [memberEvents.eventId],\n\t\treferences: [events.id],\n\t}),\n}));\n\nexport const memberExhibitsRelations = relations(memberExhibits, ({ one }) => ({\n\tmember: one(members, {\n\t\tfields: [memberExhibits.memberId],\n\t\treferences: [members.id],\n\t}),\n\texhibit: one(exhibits, {\n\t\tfields: [memberExhibits.exhibitId],\n\t\treferences: [exhibits.id],\n\t}),\n}));\n\n// ============================================================================\n// Karte Relations\n// ============================================================================\n\nexport const kartesRelations = relations(kartes, ({ many }) => ({\n\tkarteAssignees: many(karteAssignees),\n}));\n\nexport const karteAssigneesRelations = relations(karteAssignees, ({ one }) => ({\n\tkarte: one(kartes, {\n\t\tfields: [karteAssignees.karteId],\n\t\treferences: [kartes.id],\n\t}),\n\tmember: one(members, {\n\t\tfields: [karteAssignees.memberId],\n\t\treferences: [members.id],\n\t}),\n}));\n"],"mappings":"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"}
|
|
@@ -39,7 +39,6 @@ var schema_exports = /* @__PURE__ */ __exportAll({
|
|
|
39
39
|
memberStatus: () => memberStatus,
|
|
40
40
|
members: () => members,
|
|
41
41
|
membersRelations: () => membersRelations,
|
|
42
|
-
prismaMigrations: () => prismaMigrations,
|
|
43
42
|
resolutionTypeEnum: () => resolutionTypeEnum
|
|
44
43
|
});
|
|
45
44
|
/** readonly配列をpgEnumが要求するmutableタプルに変換する */
|
|
@@ -193,25 +192,6 @@ const memberExhibits = pgTable("member_exhibits", {
|
|
|
193
192
|
name: "member_exhibits_member_id_fkey"
|
|
194
193
|
}).onUpdate("cascade").onDelete("restrict")
|
|
195
194
|
]);
|
|
196
|
-
const prismaMigrations = pgTable("_prisma_migrations", {
|
|
197
|
-
id: varchar({ length: 36 }).primaryKey().notNull(),
|
|
198
|
-
checksum: varchar({ length: 64 }).notNull(),
|
|
199
|
-
finishedAt: timestamp("finished_at", {
|
|
200
|
-
withTimezone: true,
|
|
201
|
-
mode: "string"
|
|
202
|
-
}),
|
|
203
|
-
migrationName: varchar("migration_name", { length: 255 }).notNull(),
|
|
204
|
-
logs: text(),
|
|
205
|
-
rolledBackAt: timestamp("rolled_back_at", {
|
|
206
|
-
withTimezone: true,
|
|
207
|
-
mode: "string"
|
|
208
|
-
}),
|
|
209
|
-
startedAt: timestamp("started_at", {
|
|
210
|
-
withTimezone: true,
|
|
211
|
-
mode: "string"
|
|
212
|
-
}).defaultNow().notNull(),
|
|
213
|
-
appliedStepsCount: integer("applied_steps_count").default(0).notNull()
|
|
214
|
-
});
|
|
215
195
|
const kartes = pgTable("kartes", {
|
|
216
196
|
id: text().primaryKey(),
|
|
217
197
|
recordedAt: timestamp("recorded_at").notNull(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.mjs","names":[],"sources":["../../../src/infrastructure/drizzle/schema.ts"],"sourcesContent":["import { relations } from \"drizzle-orm\";\nimport { sql } from \"drizzle-orm\";\nimport {\n\tboolean,\n\tchar,\n\tforeignKey,\n\tindex,\n\tinteger,\n\tjsonb,\n\tpgEnum,\n\tpgTable,\n\ttext,\n\ttimestamp,\n\tuniqueIndex,\n\tuuid,\n\tvarchar,\n} from \"drizzle-orm/pg-core\";\nimport {\n\tASSIGNEE_TYPES,\n\tCLIENT_TYPES,\n\tCONSULTATION_CATEGORIES,\n\tCONSULTED_AT_PRECISIONS,\n\tDISCORD_ACCOUNT_EVENT_NAMES,\n\tFOLLOW_UP_OPTIONS,\n\tMEMBER_EVENT_NAMES,\n\tRESOLUTION_TYPES,\n\ttype Affiliation,\n\ttype CompleteAffiliation,\n\ttype Recorded,\n} from \"#domain\";\n\n// ============================================================================\n// Event Payload Types\n// ============================================================================\n\n/** Member集約ドメインイベントのpayload型(共通カラム以外の固有データ) */\nexport type MemberEventPayload =\n\t| {\n\t\t\tname: string;\n\t\t\tpersonalEmail: Recorded<string>;\n\t\t\tstudentId: string;\n\t\t\taffiliation: CompleteAffiliation;\n\t }\n\t| { reason: string }\n\t| { studentId: string; affiliation: CompleteAffiliation }\n\t| Record<string, never>\n\t| {\n\t\t\tpreviousAffiliation: CompleteAffiliation;\n\t\t\tnewAffiliation: CompleteAffiliation;\n\t\t\tpreviousStudentId: string;\n\t\t\tnewStudentId: string;\n\t }\n\t| {\n\t\t\tpreviousAffiliation: CompleteAffiliation;\n\t\t\tnewAffiliation: CompleteAffiliation;\n\t }\n\t| { previousStudentId: string; newStudentId: string }\n\t| { previousName: string; newName: string }\n\t| {\n\t\t\tpreviousPersonalEmail: Recorded<string>;\n\t\t\tnewPersonalEmail: Recorded<string>;\n\t };\n\n/** DiscordAccount集約ドメインイベントのpayload型 */\nexport type DiscordAccountEventPayload =\n\t| { nickName: string }\n\t| { previousNickName: string; newNickName: string };\n\n// ============================================================================\n// Enums\n// ============================================================================\n\n/** readonly配列をpgEnumが要求するmutableタプルに変換する */\nfunction toEnumValues<T extends string>(values: readonly T[]): [T, ...T[]] {\n\treturn [...values] as [T, ...T[]];\n}\n\nexport const memberStatus = pgEnum(\"member_status\", [\"active\", \"unconfirmed\", \"former\"]);\n\nexport const clientTypeEnum = pgEnum(\"client_type\", toEnumValues(CLIENT_TYPES));\n\nexport const resolutionTypeEnum = pgEnum(\"resolution_type\", toEnumValues(RESOLUTION_TYPES));\n\nexport const followUpEnum = pgEnum(\"follow_up\", toEnumValues(FOLLOW_UP_OPTIONS));\n\nexport const consultedAtPrecisionEnum = pgEnum(\n\t\"consulted_at_precision\",\n\ttoEnumValues(CONSULTED_AT_PRECISIONS),\n);\n\nexport const consultationCategoryEnum = pgEnum(\n\t\"consultation_category\",\n\ttoEnumValues(CONSULTATION_CATEGORIES.map((c) => c.id)),\n);\n\nexport const memberEventNameEnum = pgEnum(\"member_event_name\", toEnumValues(MEMBER_EVENT_NAMES));\n\nexport const discordAccountEventNameEnum = pgEnum(\n\t\"discord_account_event_name\",\n\ttoEnumValues(DISCORD_ACCOUNT_EVENT_NAMES),\n);\n\n// ============================================================================\n// Tables (introspected from production database)\n// ============================================================================\n\nexport const members = pgTable(\n\t\"members\",\n\t{\n\t\tid: text().primaryKey().notNull(),\n\t\tname: text().notNull(),\n\t\tstudentId: varchar(\"student_id\", { length: 8 }),\n\t\temail: text().notNull(),\n\t\tpersonalEmail: text(\"personal_email\"),\n\t\tstatus: memberStatus().notNull().default(\"active\"),\n\t\taffiliation: jsonb().$type<Affiliation>(),\n\t\tcreatedAt: timestamp({ mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tuniqueIndex(\"members_email_key\").using(\"btree\", table.email.asc().nullsLast().op(\"text_ops\")),\n\t],\n);\n\nexport const discordAccounts = pgTable(\n\t\"discord_accounts\",\n\t{\n\t\tdiscordId: text(\"discord_id\").primaryKey().notNull(),\n\t\tnickName: text(\"nick_name\").notNull(),\n\t\tmemberId: text(\"member_id\").notNull(),\n\t\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tforeignKey({\n\t\t\tcolumns: [table.memberId],\n\t\t\tforeignColumns: [members.id],\n\t\t\tname: \"discord_accounts_member_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\nexport const events = pgTable(\"events\", {\n\tid: text().primaryKey().notNull(),\n\tname: text().notNull(),\n\tdate: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t.notNull(),\n\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n});\n\nexport const exhibits = pgTable(\n\t\"exhibits\",\n\t{\n\t\tid: text().primaryKey().notNull(),\n\t\tname: text().notNull(),\n\t\tdescription: text(),\n\t\turl: text(),\n\t\teventId: text(\"event_id\").notNull(),\n\t\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\t\tmarkdownContent: text(\"markdown_content\"),\n\t},\n\t(table) => [\n\t\tforeignKey({\n\t\t\tcolumns: [table.eventId],\n\t\t\tforeignColumns: [events.id],\n\t\t\tname: \"exhibits_event_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\nexport const lightningTalks = pgTable(\n\t\"lightning_talks\",\n\t{\n\t\texhibitId: text(\"exhibit_id\").primaryKey().notNull(),\n\t\tstartTime: timestamp(\"start_time\", {\n\t\t\tprecision: 3,\n\t\t\tmode: \"string\",\n\t\t}).notNull(),\n\t\tduration: integer().notNull(),\n\t\tslideUrl: text(\"slide_url\"),\n\t\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tforeignKey({\n\t\t\tcolumns: [table.exhibitId],\n\t\t\tforeignColumns: [exhibits.id],\n\t\t\tname: \"lightning_talks_exhibit_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\nexport const memberEvents = pgTable(\n\t\"member_events\",\n\t{\n\t\tid: text().primaryKey().notNull(),\n\t\tmemberId: text(\"member_id\").notNull(),\n\t\teventId: text(\"event_id\").notNull(),\n\t\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tuniqueIndex(\"member_events_member_id_event_id_key\").using(\n\t\t\t\"btree\",\n\t\t\ttable.memberId.asc().nullsLast().op(\"text_ops\"),\n\t\t\ttable.eventId.asc().nullsLast().op(\"text_ops\"),\n\t\t),\n\t\tforeignKey({\n\t\t\tcolumns: [table.eventId],\n\t\t\tforeignColumns: [events.id],\n\t\t\tname: \"member_events_event_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t\tforeignKey({\n\t\t\tcolumns: [table.memberId],\n\t\t\tforeignColumns: [members.id],\n\t\t\tname: \"member_events_member_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\nexport const memberExhibits = pgTable(\n\t\"member_exhibits\",\n\t{\n\t\tid: text().primaryKey().notNull(),\n\t\tmemberId: text(\"member_id\").notNull(),\n\t\texhibitId: text(\"exhibit_id\").notNull(),\n\t\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tuniqueIndex(\"member_exhibits_member_id_exhibit_id_key\").using(\n\t\t\t\"btree\",\n\t\t\ttable.memberId.asc().nullsLast().op(\"text_ops\"),\n\t\t\ttable.exhibitId.asc().nullsLast().op(\"text_ops\"),\n\t\t),\n\t\tforeignKey({\n\t\t\tcolumns: [table.exhibitId],\n\t\t\tforeignColumns: [exhibits.id],\n\t\t\tname: \"member_exhibits_exhibit_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t\tforeignKey({\n\t\t\tcolumns: [table.memberId],\n\t\t\tforeignColumns: [members.id],\n\t\t\tname: \"member_exhibits_member_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\nexport const prismaMigrations = pgTable(\"_prisma_migrations\", {\n\tid: varchar({ length: 36 }).primaryKey().notNull(),\n\tchecksum: varchar({ length: 64 }).notNull(),\n\tfinishedAt: timestamp(\"finished_at\", { withTimezone: true, mode: \"string\" }),\n\tmigrationName: varchar(\"migration_name\", { length: 255 }).notNull(),\n\tlogs: text(),\n\trolledBackAt: timestamp(\"rolled_back_at\", {\n\t\twithTimezone: true,\n\t\tmode: \"string\",\n\t}),\n\tstartedAt: timestamp(\"started_at\", { withTimezone: true, mode: \"string\" }).defaultNow().notNull(),\n\tappliedStepsCount: integer(\"applied_steps_count\").default(0).notNull(),\n});\n\n// ============================================================================\n// Karte Tables\n// ============================================================================\n\nexport const kartes = pgTable(\"kartes\", {\n\tid: text().primaryKey(),\n\trecordedAt: timestamp(\"recorded_at\").notNull(),\n\t/** NULL = notRecorded */\n\tconsultedAt: timestamp(\"consulted_at\"),\n\t/** consultedAtの精度。consultedAtがNULLならNULL */\n\tconsultedAtPrecision: consultedAtPrecisionEnum(\"consulted_at_precision\"),\n\tlastUpdatedAt: timestamp(\"last_updated_at\").notNull(),\n\t/** NULL = notRecorded */\n\tclientType: clientTypeEnum(\"client_type\"),\n\t/** NULL when client is notRecorded */\n\tclientName: text(\"client_name\"),\n\t/** Only for student clients; 学籍番号は8文字固定 */\n\tclientStudentId: char(\"client_student_id\", { length: 8 }),\n\t/** Only for student clients; Affiliation as JSONB */\n\tclientAffiliation: jsonb(\"client_affiliation\").$type<Affiliation>(),\n\tliabilityConsent: boolean(\"liability_consent\").notNull(),\n\tdisclosureConsent: boolean(\"disclosure_consent\").notNull(),\n\t/** 空配列 = notRecorded */\n\tcategoryIds: consultationCategoryEnum(\"category_ids\").array().notNull().default([]),\n\t/** NULL = notRecorded */\n\ttroubleDetails: text(\"trouble_details\"),\n\t/** NULL = notRecorded */\n\ttargetDevice: text(\"target_device\"),\n\t/** NULL = notRecorded */\n\tsupportContent: text(\"support_content\"),\n\t/** NULL = notRecorded */\n\tresolutionType: resolutionTypeEnum(\"resolution_type\"),\n\t/** Only for unresolved; NULL = notRecorded or N/A */\n\tfollowUp: followUpEnum(\"follow_up\"),\n\t/** NULL = notRecorded */\n\tworkDurationMinutes: integer(\"work_duration_minutes\"),\n});\n\nexport const assigneeTypeEnum = pgEnum(\"assignee_type\", toEnumValues(ASSIGNEE_TYPES));\n\nexport const karteAssignees = pgTable(\n\t\"karte_assignees\",\n\t{\n\t\tkarteId: text(\"karte_id\").notNull(),\n\t\tassigneeType: assigneeTypeEnum(\"assignee_type\").notNull(),\n\t\t/** resolved の場合のみ。メンバーID */\n\t\tmemberId: text(\"member_id\"),\n\t\t/** unresolved の場合のみ。対応者名 */\n\t\tassigneeName: text(\"assignee_name\"),\n\t},\n\t(table) => [\n\t\tforeignKey({\n\t\t\tcolumns: [table.karteId],\n\t\t\tforeignColumns: [kartes.id],\n\t\t\tname: \"karte_assignees_karte_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"cascade\"),\n\t\tforeignKey({\n\t\t\tcolumns: [table.memberId],\n\t\t\tforeignColumns: [members.id],\n\t\t\tname: \"karte_assignees_member_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\n// ============================================================================\n// Domain Event Tables\n// ============================================================================\n\nexport const memberDomainEvents = pgTable(\n\t\"member_domain_events\",\n\t{\n\t\tid: uuid().primaryKey(),\n\t\tmemberId: text(\"member_id\").notNull(),\n\t\temail: text().notNull(),\n\t\teventName: memberEventNameEnum(\"event_name\").notNull(),\n\t\tpayload: jsonb().notNull().$type<MemberEventPayload>(),\n\t\toccurredAt: timestamp(\"occurred_at\", { mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tindex(\"member_domain_events_member_id_idx\").on(table.memberId),\n\t\tindex(\"member_domain_events_event_name_idx\").on(table.eventName),\n\t\tindex(\"member_domain_events_occurred_at_idx\").on(table.occurredAt),\n\t],\n);\n\nexport const discordAccountDomainEvents = pgTable(\n\t\"discord_account_domain_events\",\n\t{\n\t\tid: uuid().primaryKey(),\n\t\tdiscordId: text(\"discord_id\").notNull(),\n\t\tmemberId: text(\"member_id\").notNull(),\n\t\teventName: discordAccountEventNameEnum(\"event_name\").notNull(),\n\t\tpayload: jsonb().notNull().$type<DiscordAccountEventPayload>(),\n\t\toccurredAt: timestamp(\"occurred_at\", { mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tindex(\"discord_account_domain_events_discord_id_idx\").on(table.discordId),\n\t\tindex(\"discord_account_domain_events_member_id_idx\").on(table.memberId),\n\t\tindex(\"discord_account_domain_events_occurred_at_idx\").on(table.occurredAt),\n\t],\n);\n\n// ============================================================================\n// Relations\n// ============================================================================\n\nexport const membersRelations = relations(members, ({ many }) => ({\n\tdiscordAccounts: many(discordAccounts),\n\tmemberEvents: many(memberEvents),\n\tmemberExhibits: many(memberExhibits),\n}));\n\nexport const discordAccountsRelations = relations(discordAccounts, ({ one }) => ({\n\tmember: one(members, {\n\t\tfields: [discordAccounts.memberId],\n\t\treferences: [members.id],\n\t}),\n}));\n\nexport const eventsRelations = relations(events, ({ many }) => ({\n\tmemberEvents: many(memberEvents),\n\texhibits: many(exhibits),\n}));\n\nexport const exhibitsRelations = relations(exhibits, ({ one, many }) => ({\n\tevent: one(events, {\n\t\tfields: [exhibits.eventId],\n\t\treferences: [events.id],\n\t}),\n\tlightningTalk: one(lightningTalks, {\n\t\tfields: [exhibits.id],\n\t\treferences: [lightningTalks.exhibitId],\n\t}),\n\tmemberExhibits: many(memberExhibits),\n}));\n\nexport const lightningTalksRelations = relations(lightningTalks, ({ one }) => ({\n\texhibit: one(exhibits, {\n\t\tfields: [lightningTalks.exhibitId],\n\t\treferences: [exhibits.id],\n\t}),\n}));\n\nexport const memberEventsRelations = relations(memberEvents, ({ one }) => ({\n\tmember: one(members, {\n\t\tfields: [memberEvents.memberId],\n\t\treferences: [members.id],\n\t}),\n\tevent: one(events, {\n\t\tfields: [memberEvents.eventId],\n\t\treferences: [events.id],\n\t}),\n}));\n\nexport const memberExhibitsRelations = relations(memberExhibits, ({ one }) => ({\n\tmember: one(members, {\n\t\tfields: [memberExhibits.memberId],\n\t\treferences: [members.id],\n\t}),\n\texhibit: one(exhibits, {\n\t\tfields: [memberExhibits.exhibitId],\n\t\treferences: [exhibits.id],\n\t}),\n}));\n\n// ============================================================================\n// Karte Relations\n// ============================================================================\n\nexport const kartesRelations = relations(kartes, ({ many }) => ({\n\tkarteAssignees: many(karteAssignees),\n}));\n\nexport const karteAssigneesRelations = relations(karteAssignees, ({ one }) => ({\n\tkarte: one(kartes, {\n\t\tfields: [karteAssignees.karteId],\n\t\treferences: [kartes.id],\n\t}),\n\tmember: one(members, {\n\t\tfields: [karteAssignees.memberId],\n\t\treferences: [members.id],\n\t}),\n}));\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema.mjs","names":[],"sources":["../../../src/infrastructure/drizzle/schema.ts"],"sourcesContent":["import { relations } from \"drizzle-orm\";\nimport { sql } from \"drizzle-orm\";\nimport {\n\tboolean,\n\tchar,\n\tforeignKey,\n\tindex,\n\tinteger,\n\tjsonb,\n\tpgEnum,\n\tpgTable,\n\ttext,\n\ttimestamp,\n\tuniqueIndex,\n\tuuid,\n\tvarchar,\n} from \"drizzle-orm/pg-core\";\nimport {\n\tASSIGNEE_TYPES,\n\tCLIENT_TYPES,\n\tCONSULTATION_CATEGORIES,\n\tCONSULTED_AT_PRECISIONS,\n\tDISCORD_ACCOUNT_EVENT_NAMES,\n\tFOLLOW_UP_OPTIONS,\n\tMEMBER_EVENT_NAMES,\n\tRESOLUTION_TYPES,\n\ttype Affiliation,\n\ttype CompleteAffiliation,\n\ttype Recorded,\n} from \"#domain\";\n\n// ============================================================================\n// Event Payload Types\n// ============================================================================\n\n/** Member集約ドメインイベントのpayload型(共通カラム以外の固有データ) */\nexport type MemberEventPayload =\n\t| {\n\t\t\tname: string;\n\t\t\tpersonalEmail: Recorded<string>;\n\t\t\tstudentId: string;\n\t\t\taffiliation: CompleteAffiliation;\n\t }\n\t| { reason: string }\n\t| { studentId: string; affiliation: CompleteAffiliation }\n\t| Record<string, never>\n\t| {\n\t\t\tpreviousAffiliation: CompleteAffiliation;\n\t\t\tnewAffiliation: CompleteAffiliation;\n\t\t\tpreviousStudentId: string;\n\t\t\tnewStudentId: string;\n\t }\n\t| {\n\t\t\tpreviousAffiliation: CompleteAffiliation;\n\t\t\tnewAffiliation: CompleteAffiliation;\n\t }\n\t| { previousStudentId: string; newStudentId: string }\n\t| { previousName: string; newName: string }\n\t| {\n\t\t\tpreviousPersonalEmail: Recorded<string>;\n\t\t\tnewPersonalEmail: Recorded<string>;\n\t };\n\n/** DiscordAccount集約ドメインイベントのpayload型 */\nexport type DiscordAccountEventPayload =\n\t| { nickName: string }\n\t| { previousNickName: string; newNickName: string };\n\n// ============================================================================\n// Enums\n// ============================================================================\n\n/** readonly配列をpgEnumが要求するmutableタプルに変換する */\nfunction toEnumValues<T extends string>(values: readonly T[]): [T, ...T[]] {\n\treturn [...values] as [T, ...T[]];\n}\n\nexport const memberStatus = pgEnum(\"member_status\", [\"active\", \"unconfirmed\", \"former\"]);\n\nexport const clientTypeEnum = pgEnum(\"client_type\", toEnumValues(CLIENT_TYPES));\n\nexport const resolutionTypeEnum = pgEnum(\"resolution_type\", toEnumValues(RESOLUTION_TYPES));\n\nexport const followUpEnum = pgEnum(\"follow_up\", toEnumValues(FOLLOW_UP_OPTIONS));\n\nexport const consultedAtPrecisionEnum = pgEnum(\n\t\"consulted_at_precision\",\n\ttoEnumValues(CONSULTED_AT_PRECISIONS),\n);\n\nexport const consultationCategoryEnum = pgEnum(\n\t\"consultation_category\",\n\ttoEnumValues(CONSULTATION_CATEGORIES.map((c) => c.id)),\n);\n\nexport const memberEventNameEnum = pgEnum(\"member_event_name\", toEnumValues(MEMBER_EVENT_NAMES));\n\nexport const discordAccountEventNameEnum = pgEnum(\n\t\"discord_account_event_name\",\n\ttoEnumValues(DISCORD_ACCOUNT_EVENT_NAMES),\n);\n\n// ============================================================================\n// Tables (introspected from production database)\n// ============================================================================\n\nexport const members = pgTable(\n\t\"members\",\n\t{\n\t\tid: text().primaryKey().notNull(),\n\t\tname: text().notNull(),\n\t\tstudentId: varchar(\"student_id\", { length: 8 }),\n\t\temail: text().notNull(),\n\t\tpersonalEmail: text(\"personal_email\"),\n\t\tstatus: memberStatus().notNull().default(\"active\"),\n\t\taffiliation: jsonb().$type<Affiliation>(),\n\t\tcreatedAt: timestamp({ mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tuniqueIndex(\"members_email_key\").using(\"btree\", table.email.asc().nullsLast().op(\"text_ops\")),\n\t],\n);\n\nexport const discordAccounts = pgTable(\n\t\"discord_accounts\",\n\t{\n\t\tdiscordId: text(\"discord_id\").primaryKey().notNull(),\n\t\tnickName: text(\"nick_name\").notNull(),\n\t\tmemberId: text(\"member_id\").notNull(),\n\t\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tforeignKey({\n\t\t\tcolumns: [table.memberId],\n\t\t\tforeignColumns: [members.id],\n\t\t\tname: \"discord_accounts_member_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\nexport const events = pgTable(\"events\", {\n\tid: text().primaryKey().notNull(),\n\tname: text().notNull(),\n\tdate: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t.notNull(),\n\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n});\n\nexport const exhibits = pgTable(\n\t\"exhibits\",\n\t{\n\t\tid: text().primaryKey().notNull(),\n\t\tname: text().notNull(),\n\t\tdescription: text(),\n\t\turl: text(),\n\t\teventId: text(\"event_id\").notNull(),\n\t\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\t\tmarkdownContent: text(\"markdown_content\"),\n\t},\n\t(table) => [\n\t\tforeignKey({\n\t\t\tcolumns: [table.eventId],\n\t\t\tforeignColumns: [events.id],\n\t\t\tname: \"exhibits_event_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\nexport const lightningTalks = pgTable(\n\t\"lightning_talks\",\n\t{\n\t\texhibitId: text(\"exhibit_id\").primaryKey().notNull(),\n\t\tstartTime: timestamp(\"start_time\", {\n\t\t\tprecision: 3,\n\t\t\tmode: \"string\",\n\t\t}).notNull(),\n\t\tduration: integer().notNull(),\n\t\tslideUrl: text(\"slide_url\"),\n\t\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tforeignKey({\n\t\t\tcolumns: [table.exhibitId],\n\t\t\tforeignColumns: [exhibits.id],\n\t\t\tname: \"lightning_talks_exhibit_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\nexport const memberEvents = pgTable(\n\t\"member_events\",\n\t{\n\t\tid: text().primaryKey().notNull(),\n\t\tmemberId: text(\"member_id\").notNull(),\n\t\teventId: text(\"event_id\").notNull(),\n\t\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tuniqueIndex(\"member_events_member_id_event_id_key\").using(\n\t\t\t\"btree\",\n\t\t\ttable.memberId.asc().nullsLast().op(\"text_ops\"),\n\t\t\ttable.eventId.asc().nullsLast().op(\"text_ops\"),\n\t\t),\n\t\tforeignKey({\n\t\t\tcolumns: [table.eventId],\n\t\t\tforeignColumns: [events.id],\n\t\t\tname: \"member_events_event_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t\tforeignKey({\n\t\t\tcolumns: [table.memberId],\n\t\t\tforeignColumns: [members.id],\n\t\t\tname: \"member_events_member_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\nexport const memberExhibits = pgTable(\n\t\"member_exhibits\",\n\t{\n\t\tid: text().primaryKey().notNull(),\n\t\tmemberId: text(\"member_id\").notNull(),\n\t\texhibitId: text(\"exhibit_id\").notNull(),\n\t\tcreatedAt: timestamp({ precision: 3, mode: \"string\" })\n\t\t\t.default(sql`CURRENT_TIMESTAMP`)\n\t\t\t.notNull(),\n\t\tupdatedAt: timestamp({ precision: 3, mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tuniqueIndex(\"member_exhibits_member_id_exhibit_id_key\").using(\n\t\t\t\"btree\",\n\t\t\ttable.memberId.asc().nullsLast().op(\"text_ops\"),\n\t\t\ttable.exhibitId.asc().nullsLast().op(\"text_ops\"),\n\t\t),\n\t\tforeignKey({\n\t\t\tcolumns: [table.exhibitId],\n\t\t\tforeignColumns: [exhibits.id],\n\t\t\tname: \"member_exhibits_exhibit_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t\tforeignKey({\n\t\t\tcolumns: [table.memberId],\n\t\t\tforeignColumns: [members.id],\n\t\t\tname: \"member_exhibits_member_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\n// ============================================================================\n// Karte Tables\n// ============================================================================\n\nexport const kartes = pgTable(\"kartes\", {\n\tid: text().primaryKey(),\n\trecordedAt: timestamp(\"recorded_at\").notNull(),\n\t/** NULL = notRecorded */\n\tconsultedAt: timestamp(\"consulted_at\"),\n\t/** consultedAtの精度。consultedAtがNULLならNULL */\n\tconsultedAtPrecision: consultedAtPrecisionEnum(\"consulted_at_precision\"),\n\tlastUpdatedAt: timestamp(\"last_updated_at\").notNull(),\n\t/** NULL = notRecorded */\n\tclientType: clientTypeEnum(\"client_type\"),\n\t/** NULL when client is notRecorded */\n\tclientName: text(\"client_name\"),\n\t/** Only for student clients; 学籍番号は8文字固定 */\n\tclientStudentId: char(\"client_student_id\", { length: 8 }),\n\t/** Only for student clients; Affiliation as JSONB */\n\tclientAffiliation: jsonb(\"client_affiliation\").$type<Affiliation>(),\n\tliabilityConsent: boolean(\"liability_consent\").notNull(),\n\tdisclosureConsent: boolean(\"disclosure_consent\").notNull(),\n\t/** 空配列 = notRecorded */\n\tcategoryIds: consultationCategoryEnum(\"category_ids\").array().notNull().default([]),\n\t/** NULL = notRecorded */\n\ttroubleDetails: text(\"trouble_details\"),\n\t/** NULL = notRecorded */\n\ttargetDevice: text(\"target_device\"),\n\t/** NULL = notRecorded */\n\tsupportContent: text(\"support_content\"),\n\t/** NULL = notRecorded */\n\tresolutionType: resolutionTypeEnum(\"resolution_type\"),\n\t/** Only for unresolved; NULL = notRecorded or N/A */\n\tfollowUp: followUpEnum(\"follow_up\"),\n\t/** NULL = notRecorded */\n\tworkDurationMinutes: integer(\"work_duration_minutes\"),\n});\n\nexport const assigneeTypeEnum = pgEnum(\"assignee_type\", toEnumValues(ASSIGNEE_TYPES));\n\nexport const karteAssignees = pgTable(\n\t\"karte_assignees\",\n\t{\n\t\tkarteId: text(\"karte_id\").notNull(),\n\t\tassigneeType: assigneeTypeEnum(\"assignee_type\").notNull(),\n\t\t/** resolved の場合のみ。メンバーID */\n\t\tmemberId: text(\"member_id\"),\n\t\t/** unresolved の場合のみ。対応者名 */\n\t\tassigneeName: text(\"assignee_name\"),\n\t},\n\t(table) => [\n\t\tforeignKey({\n\t\t\tcolumns: [table.karteId],\n\t\t\tforeignColumns: [kartes.id],\n\t\t\tname: \"karte_assignees_karte_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"cascade\"),\n\t\tforeignKey({\n\t\t\tcolumns: [table.memberId],\n\t\t\tforeignColumns: [members.id],\n\t\t\tname: \"karte_assignees_member_id_fkey\",\n\t\t})\n\t\t\t.onUpdate(\"cascade\")\n\t\t\t.onDelete(\"restrict\"),\n\t],\n);\n\n// ============================================================================\n// Domain Event Tables\n// ============================================================================\n\nexport const memberDomainEvents = pgTable(\n\t\"member_domain_events\",\n\t{\n\t\tid: uuid().primaryKey(),\n\t\tmemberId: text(\"member_id\").notNull(),\n\t\temail: text().notNull(),\n\t\teventName: memberEventNameEnum(\"event_name\").notNull(),\n\t\tpayload: jsonb().notNull().$type<MemberEventPayload>(),\n\t\toccurredAt: timestamp(\"occurred_at\", { mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tindex(\"member_domain_events_member_id_idx\").on(table.memberId),\n\t\tindex(\"member_domain_events_event_name_idx\").on(table.eventName),\n\t\tindex(\"member_domain_events_occurred_at_idx\").on(table.occurredAt),\n\t],\n);\n\nexport const discordAccountDomainEvents = pgTable(\n\t\"discord_account_domain_events\",\n\t{\n\t\tid: uuid().primaryKey(),\n\t\tdiscordId: text(\"discord_id\").notNull(),\n\t\tmemberId: text(\"member_id\").notNull(),\n\t\teventName: discordAccountEventNameEnum(\"event_name\").notNull(),\n\t\tpayload: jsonb().notNull().$type<DiscordAccountEventPayload>(),\n\t\toccurredAt: timestamp(\"occurred_at\", { mode: \"string\" }).notNull(),\n\t},\n\t(table) => [\n\t\tindex(\"discord_account_domain_events_discord_id_idx\").on(table.discordId),\n\t\tindex(\"discord_account_domain_events_member_id_idx\").on(table.memberId),\n\t\tindex(\"discord_account_domain_events_occurred_at_idx\").on(table.occurredAt),\n\t],\n);\n\n// ============================================================================\n// Relations\n// ============================================================================\n\nexport const membersRelations = relations(members, ({ many }) => ({\n\tdiscordAccounts: many(discordAccounts),\n\tmemberEvents: many(memberEvents),\n\tmemberExhibits: many(memberExhibits),\n}));\n\nexport const discordAccountsRelations = relations(discordAccounts, ({ one }) => ({\n\tmember: one(members, {\n\t\tfields: [discordAccounts.memberId],\n\t\treferences: [members.id],\n\t}),\n}));\n\nexport const eventsRelations = relations(events, ({ many }) => ({\n\tmemberEvents: many(memberEvents),\n\texhibits: many(exhibits),\n}));\n\nexport const exhibitsRelations = relations(exhibits, ({ one, many }) => ({\n\tevent: one(events, {\n\t\tfields: [exhibits.eventId],\n\t\treferences: [events.id],\n\t}),\n\tlightningTalk: one(lightningTalks, {\n\t\tfields: [exhibits.id],\n\t\treferences: [lightningTalks.exhibitId],\n\t}),\n\tmemberExhibits: many(memberExhibits),\n}));\n\nexport const lightningTalksRelations = relations(lightningTalks, ({ one }) => ({\n\texhibit: one(exhibits, {\n\t\tfields: [lightningTalks.exhibitId],\n\t\treferences: [exhibits.id],\n\t}),\n}));\n\nexport const memberEventsRelations = relations(memberEvents, ({ one }) => ({\n\tmember: one(members, {\n\t\tfields: [memberEvents.memberId],\n\t\treferences: [members.id],\n\t}),\n\tevent: one(events, {\n\t\tfields: [memberEvents.eventId],\n\t\treferences: [events.id],\n\t}),\n}));\n\nexport const memberExhibitsRelations = relations(memberExhibits, ({ one }) => ({\n\tmember: one(members, {\n\t\tfields: [memberExhibits.memberId],\n\t\treferences: [members.id],\n\t}),\n\texhibit: one(exhibits, {\n\t\tfields: [memberExhibits.exhibitId],\n\t\treferences: [exhibits.id],\n\t}),\n}));\n\n// ============================================================================\n// Karte Relations\n// ============================================================================\n\nexport const kartesRelations = relations(kartes, ({ many }) => ({\n\tkarteAssignees: many(karteAssignees),\n}));\n\nexport const karteAssigneesRelations = relations(karteAssignees, ({ one }) => ({\n\tkarte: one(kartes, {\n\t\tfields: [karteAssignees.karteId],\n\t\treferences: [kartes.id],\n\t}),\n\tmember: one(members, {\n\t\tfields: [karteAssignees.memberId],\n\t\treferences: [members.id],\n\t}),\n}));\n"],"mappings":"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"}
|