@shizuoka-its/core 3.0.0-rc.2 → 3.0.0-rc.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"dto.cjs","names":[],"sources":["../../src/application/dto.ts"],"sourcesContent":["import type { CompleteAffiliation } from \"#domain/shared/affiliation/Affiliation\";\nimport type { DiscordAccount, Member } from \"#domain\";\nimport type { Email } from \"#domain/aggregates/member/Email\";\nimport type { Recorded } from \"#domain/shared/Recorded\";\n\ntype MemberDTOBase = {\n\tid: string;\n\temail: string;\n\tname: string;\n\tpersonalEmail: string | null;\n};\n\nexport type MemberDTO =\n\t| (MemberDTOBase & {\n\t\t\tstatus: \"active\";\n\t\t\tstudentId: string;\n\t\t\taffiliation: CompleteAffiliation;\n\t })\n\t| (MemberDTOBase & { status: \"unconfirmed\" })\n\t| (MemberDTOBase & { status: \"former\" });\n\nexport type DiscordAccountDTO = {\n\tdiscordId: string;\n\tmemberId: string;\n\tnickName: string;\n};\n\nfunction personalEmailToString(personalEmail: Recorded<Email>): string | null {\n\treturn personalEmail.type === \"recorded\" ? personalEmail.value.getValue() : null;\n}\n\nexport function toMemberDTO(member: Member): MemberDTO {\n\tconst base = {\n\t\tid: member.id as string,\n\t\temail: member.email.getValue(),\n\t\tname: member.name,\n\t\tpersonalEmail: personalEmailToString(member.personalEmail),\n\t};\n\n\tif (member.status === \"active\") {\n\t\treturn {\n\t\t\t...base,\n\t\t\tstatus: member.status,\n\t\t\tstudentId: member.studentId.getValue(),\n\t\t\taffiliation: member.affiliation,\n\t\t};\n\t}\n\n\treturn {\n\t\t...base,\n\t\tstatus: member.status,\n\t};\n}\n\nexport function toDiscordAccountDTO(account: DiscordAccount): DiscordAccountDTO {\n\treturn {\n\t\tdiscordId: account.discordId as string,\n\t\tmemberId: account.memberId as string,\n\t\tnickName: account.nickName,\n\t};\n}\n"],"mappings":";AA2BA,SAAS,sBAAsB,eAA+C;AAC7E,QAAO,cAAc,SAAS,aAAa,cAAc,MAAM,UAAU,GAAG;;AAG7E,SAAgB,YAAY,QAA2B;CACtD,MAAM,OAAO;EACZ,IAAI,OAAO;EACX,OAAO,OAAO,MAAM,UAAU;EAC9B,MAAM,OAAO;EACb,eAAe,sBAAsB,OAAO,cAAc;EAC1D;AAED,KAAI,OAAO,WAAW,SACrB,QAAO;EACN,GAAG;EACH,QAAQ,OAAO;EACf,WAAW,OAAO,UAAU,UAAU;EACtC,aAAa,OAAO;EACpB;AAGF,QAAO;EACN,GAAG;EACH,QAAQ,OAAO;EACf;;AAGF,SAAgB,oBAAoB,SAA4C;AAC/E,QAAO;EACN,WAAW,QAAQ;EACnB,UAAU,QAAQ;EAClB,UAAU,QAAQ;EAClB"}
1
+ {"version":3,"file":"dto.cjs","names":[],"sources":["../../src/application/dto.ts"],"sourcesContent":["import type { CompleteAffiliation } from \"#domain/shared/affiliation/Affiliation\";\nimport type { DiscordAccount, Member } from \"#domain\";\nimport type { Email } from \"#domain/aggregates/member/Email\";\nimport type { Recorded } from \"#domain/shared/Recorded\";\n\ntype MemberDTOBase = {\n\tid: string;\n\temail: string;\n\tname: string;\n\tpersonalEmail: string | null;\n};\n\nexport type MemberDTO =\n\t| (MemberDTOBase & {\n\t\t\tstatus: \"active\";\n\t\t\tstudentId: string;\n\t\t\taffiliation: CompleteAffiliation;\n\t })\n\t| (MemberDTOBase & { status: \"unconfirmed\" })\n\t| (MemberDTOBase & { status: \"former\" });\n\nexport type DiscordAccountDTO = {\n\tdiscordId: string;\n\tmemberId: string;\n\tnickName: string;\n};\n\nfunction personalEmailToString(personalEmail: Recorded<Email>): string | null {\n\treturn personalEmail.type === \"recorded\" ? personalEmail.value.getValue() : null;\n}\n\nexport function toMemberDTO(member: Member): MemberDTO {\n\tconst base = {\n\t\tid: member.id as string,\n\t\temail: member.email.getValue(),\n\t\tname: member.name,\n\t\tpersonalEmail: personalEmailToString(member.personalEmail),\n\t};\n\n\tif (member.status === \"active\") {\n\t\treturn {\n\t\t\t...base,\n\t\t\tstatus: member.status,\n\t\t\tstudentId: member.studentId.getValue(),\n\t\t\taffiliation: member.affiliation,\n\t\t};\n\t}\n\n\treturn {\n\t\t...base,\n\t\tstatus: member.status,\n\t};\n}\n\nexport type MemberWithDiscordAccounts = MemberDTO & {\n\tdiscordAccounts: DiscordAccountDTO[];\n};\n\nexport function toDiscordAccountDTO(account: DiscordAccount): DiscordAccountDTO {\n\treturn {\n\t\tdiscordId: account.discordId as string,\n\t\tmemberId: account.memberId as string,\n\t\tnickName: account.nickName,\n\t};\n}\n"],"mappings":";AA2BA,SAAS,sBAAsB,eAA+C;AAC7E,QAAO,cAAc,SAAS,aAAa,cAAc,MAAM,UAAU,GAAG;;AAG7E,SAAgB,YAAY,QAA2B;CACtD,MAAM,OAAO;EACZ,IAAI,OAAO;EACX,OAAO,OAAO,MAAM,UAAU;EAC9B,MAAM,OAAO;EACb,eAAe,sBAAsB,OAAO,cAAc;EAC1D;AAED,KAAI,OAAO,WAAW,SACrB,QAAO;EACN,GAAG;EACH,QAAQ,OAAO;EACf,WAAW,OAAO,UAAU,UAAU;EACtC,aAAa,OAAO;EACpB;AAGF,QAAO;EACN,GAAG;EACH,QAAQ,OAAO;EACf;;AAOF,SAAgB,oBAAoB,SAA4C;AAC/E,QAAO;EACN,WAAW,QAAQ;EACnB,UAAU,QAAQ;EAClB,UAAU,QAAQ;EAClB"}
@@ -21,6 +21,9 @@ type DiscordAccountDTO = {
21
21
  memberId: string;
22
22
  nickName: string;
23
23
  };
24
+ type MemberWithDiscordAccounts = MemberDTO & {
25
+ discordAccounts: DiscordAccountDTO[];
26
+ };
24
27
  //#endregion
25
- export { DiscordAccountDTO, MemberDTO };
28
+ export { MemberWithDiscordAccounts };
26
29
  //# sourceMappingURL=dto.d.cts.map
@@ -21,6 +21,9 @@ type DiscordAccountDTO = {
21
21
  memberId: string;
22
22
  nickName: string;
23
23
  };
24
+ type MemberWithDiscordAccounts = MemberDTO & {
25
+ discordAccounts: DiscordAccountDTO[];
26
+ };
24
27
  //#endregion
25
- export { DiscordAccountDTO, MemberDTO };
28
+ export { MemberWithDiscordAccounts };
26
29
  //# sourceMappingURL=dto.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dto.mjs","names":[],"sources":["../../src/application/dto.ts"],"sourcesContent":["import type { CompleteAffiliation } from \"#domain/shared/affiliation/Affiliation\";\nimport type { DiscordAccount, Member } from \"#domain\";\nimport type { Email } from \"#domain/aggregates/member/Email\";\nimport type { Recorded } from \"#domain/shared/Recorded\";\n\ntype MemberDTOBase = {\n\tid: string;\n\temail: string;\n\tname: string;\n\tpersonalEmail: string | null;\n};\n\nexport type MemberDTO =\n\t| (MemberDTOBase & {\n\t\t\tstatus: \"active\";\n\t\t\tstudentId: string;\n\t\t\taffiliation: CompleteAffiliation;\n\t })\n\t| (MemberDTOBase & { status: \"unconfirmed\" })\n\t| (MemberDTOBase & { status: \"former\" });\n\nexport type DiscordAccountDTO = {\n\tdiscordId: string;\n\tmemberId: string;\n\tnickName: string;\n};\n\nfunction personalEmailToString(personalEmail: Recorded<Email>): string | null {\n\treturn personalEmail.type === \"recorded\" ? personalEmail.value.getValue() : null;\n}\n\nexport function toMemberDTO(member: Member): MemberDTO {\n\tconst base = {\n\t\tid: member.id as string,\n\t\temail: member.email.getValue(),\n\t\tname: member.name,\n\t\tpersonalEmail: personalEmailToString(member.personalEmail),\n\t};\n\n\tif (member.status === \"active\") {\n\t\treturn {\n\t\t\t...base,\n\t\t\tstatus: member.status,\n\t\t\tstudentId: member.studentId.getValue(),\n\t\t\taffiliation: member.affiliation,\n\t\t};\n\t}\n\n\treturn {\n\t\t...base,\n\t\tstatus: member.status,\n\t};\n}\n\nexport function toDiscordAccountDTO(account: DiscordAccount): DiscordAccountDTO {\n\treturn {\n\t\tdiscordId: account.discordId as string,\n\t\tmemberId: account.memberId as string,\n\t\tnickName: account.nickName,\n\t};\n}\n"],"mappings":";AA2BA,SAAS,sBAAsB,eAA+C;AAC7E,QAAO,cAAc,SAAS,aAAa,cAAc,MAAM,UAAU,GAAG;;AAG7E,SAAgB,YAAY,QAA2B;CACtD,MAAM,OAAO;EACZ,IAAI,OAAO;EACX,OAAO,OAAO,MAAM,UAAU;EAC9B,MAAM,OAAO;EACb,eAAe,sBAAsB,OAAO,cAAc;EAC1D;AAED,KAAI,OAAO,WAAW,SACrB,QAAO;EACN,GAAG;EACH,QAAQ,OAAO;EACf,WAAW,OAAO,UAAU,UAAU;EACtC,aAAa,OAAO;EACpB;AAGF,QAAO;EACN,GAAG;EACH,QAAQ,OAAO;EACf;;AAGF,SAAgB,oBAAoB,SAA4C;AAC/E,QAAO;EACN,WAAW,QAAQ;EACnB,UAAU,QAAQ;EAClB,UAAU,QAAQ;EAClB"}
1
+ {"version":3,"file":"dto.mjs","names":[],"sources":["../../src/application/dto.ts"],"sourcesContent":["import type { CompleteAffiliation } from \"#domain/shared/affiliation/Affiliation\";\nimport type { DiscordAccount, Member } from \"#domain\";\nimport type { Email } from \"#domain/aggregates/member/Email\";\nimport type { Recorded } from \"#domain/shared/Recorded\";\n\ntype MemberDTOBase = {\n\tid: string;\n\temail: string;\n\tname: string;\n\tpersonalEmail: string | null;\n};\n\nexport type MemberDTO =\n\t| (MemberDTOBase & {\n\t\t\tstatus: \"active\";\n\t\t\tstudentId: string;\n\t\t\taffiliation: CompleteAffiliation;\n\t })\n\t| (MemberDTOBase & { status: \"unconfirmed\" })\n\t| (MemberDTOBase & { status: \"former\" });\n\nexport type DiscordAccountDTO = {\n\tdiscordId: string;\n\tmemberId: string;\n\tnickName: string;\n};\n\nfunction personalEmailToString(personalEmail: Recorded<Email>): string | null {\n\treturn personalEmail.type === \"recorded\" ? personalEmail.value.getValue() : null;\n}\n\nexport function toMemberDTO(member: Member): MemberDTO {\n\tconst base = {\n\t\tid: member.id as string,\n\t\temail: member.email.getValue(),\n\t\tname: member.name,\n\t\tpersonalEmail: personalEmailToString(member.personalEmail),\n\t};\n\n\tif (member.status === \"active\") {\n\t\treturn {\n\t\t\t...base,\n\t\t\tstatus: member.status,\n\t\t\tstudentId: member.studentId.getValue(),\n\t\t\taffiliation: member.affiliation,\n\t\t};\n\t}\n\n\treturn {\n\t\t...base,\n\t\tstatus: member.status,\n\t};\n}\n\nexport type MemberWithDiscordAccounts = MemberDTO & {\n\tdiscordAccounts: DiscordAccountDTO[];\n};\n\nexport function toDiscordAccountDTO(account: DiscordAccount): DiscordAccountDTO {\n\treturn {\n\t\tdiscordId: account.discordId as string,\n\t\tmemberId: account.memberId as string,\n\t\tnickName: account.nickName,\n\t};\n}\n"],"mappings":";AA2BA,SAAS,sBAAsB,eAA+C;AAC7E,QAAO,cAAc,SAAS,aAAa,cAAc,MAAM,UAAU,GAAG;;AAG7E,SAAgB,YAAY,QAA2B;CACtD,MAAM,OAAO;EACZ,IAAI,OAAO;EACX,OAAO,OAAO,MAAM,UAAU;EAC9B,MAAM,OAAO;EACb,eAAe,sBAAsB,OAAO,cAAc;EAC1D;AAED,KAAI,OAAO,WAAW,SACrB,QAAO;EACN,GAAG;EACH,QAAQ,OAAO;EACf,WAAW,OAAO,UAAU,UAAU;EACtC,aAAa,OAAO;EACpB;AAGF,QAAO;EACN,GAAG;EACH,QAAQ,OAAO;EACf;;AAOF,SAAgB,oBAAoB,SAA4C;AAC/E,QAAO;EACN,WAAW,QAAQ;EACnB,UAAU,QAAQ;EAClB,UAAU,QAAQ;EAClB"}
@@ -0,0 +1,23 @@
1
+ const require_dto = require("../../dto.cjs");
2
+ const require_base = require("../base.cjs");
3
+ //#region src/application/usecase/member/GetMemberWithDiscordAccounts.ts
4
+ var GetMemberWithDiscordAccountsUseCase = class extends require_base.IUseCase {
5
+ constructor(memberRepo, discordRepo) {
6
+ super();
7
+ this.memberRepo = memberRepo;
8
+ this.discordRepo = discordRepo;
9
+ }
10
+ async execute(input) {
11
+ const member = await this.memberRepo.findById(input.id);
12
+ if (!member) return { member: null };
13
+ const discordAccounts = await this.discordRepo.findByMemberId(member.id);
14
+ return { member: {
15
+ ...require_dto.toMemberDTO(member),
16
+ discordAccounts: discordAccounts.map(require_dto.toDiscordAccountDTO)
17
+ } };
18
+ }
19
+ };
20
+ //#endregion
21
+ exports.GetMemberWithDiscordAccountsUseCase = GetMemberWithDiscordAccountsUseCase;
22
+
23
+ //# sourceMappingURL=GetMemberWithDiscordAccounts.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GetMemberWithDiscordAccounts.cjs","names":["IUseCase","toMemberDTO","toDiscordAccountDTO"],"sources":["../../../../src/application/usecase/member/GetMemberWithDiscordAccounts.ts"],"sourcesContent":["import type { DiscordAccountRepository, MemberId, MemberRepository } from \"#domain\";\nimport type { MemberWithDiscordAccounts } from \"../../dto\";\nimport { toDiscordAccountDTO, toMemberDTO } from \"../../dto\";\nimport { IUseCase } from \"../base\";\n\nexport interface GetMemberWithDiscordAccountsInput {\n\tid: MemberId;\n}\n\nexport interface GetMemberWithDiscordAccountsOutput {\n\tmember: MemberWithDiscordAccounts | null;\n}\n\nexport class GetMemberWithDiscordAccountsUseCase extends IUseCase<\n\tGetMemberWithDiscordAccountsInput,\n\tGetMemberWithDiscordAccountsOutput\n> {\n\tconstructor(\n\t\tprivate readonly memberRepo: MemberRepository,\n\t\tprivate readonly discordRepo: DiscordAccountRepository,\n\t) {\n\t\tsuper();\n\t}\n\n\tasync execute(\n\t\tinput: GetMemberWithDiscordAccountsInput,\n\t): Promise<GetMemberWithDiscordAccountsOutput> {\n\t\tconst member = await this.memberRepo.findById(input.id);\n\t\tif (!member) {\n\t\t\treturn { member: null };\n\t\t}\n\n\t\tconst discordAccounts = await this.discordRepo.findByMemberId(member.id);\n\n\t\treturn {\n\t\t\tmember: {\n\t\t\t\t...toMemberDTO(member),\n\t\t\t\tdiscordAccounts: discordAccounts.map(toDiscordAccountDTO),\n\t\t\t},\n\t\t};\n\t}\n}\n"],"mappings":";;;AAaA,IAAa,sCAAb,cAAyDA,aAAAA,SAGvD;CACD,YACC,YACA,aACC;AACD,SAAO;AAHU,OAAA,aAAA;AACA,OAAA,cAAA;;CAKlB,MAAM,QACL,OAC8C;EAC9C,MAAM,SAAS,MAAM,KAAK,WAAW,SAAS,MAAM,GAAG;AACvD,MAAI,CAAC,OACJ,QAAO,EAAE,QAAQ,MAAM;EAGxB,MAAM,kBAAkB,MAAM,KAAK,YAAY,eAAe,OAAO,GAAG;AAExE,SAAO,EACN,QAAQ;GACP,GAAGC,YAAAA,YAAY,OAAO;GACtB,iBAAiB,gBAAgB,IAAIC,YAAAA,oBAAoB;GACzD,EACD"}
@@ -0,0 +1,23 @@
1
+ import { toDiscordAccountDTO, toMemberDTO } from "../../dto.mjs";
2
+ import { IUseCase } from "../base.mjs";
3
+ //#region src/application/usecase/member/GetMemberWithDiscordAccounts.ts
4
+ var GetMemberWithDiscordAccountsUseCase = class extends IUseCase {
5
+ constructor(memberRepo, discordRepo) {
6
+ super();
7
+ this.memberRepo = memberRepo;
8
+ this.discordRepo = discordRepo;
9
+ }
10
+ async execute(input) {
11
+ const member = await this.memberRepo.findById(input.id);
12
+ if (!member) return { member: null };
13
+ const discordAccounts = await this.discordRepo.findByMemberId(member.id);
14
+ return { member: {
15
+ ...toMemberDTO(member),
16
+ discordAccounts: discordAccounts.map(toDiscordAccountDTO)
17
+ } };
18
+ }
19
+ };
20
+ //#endregion
21
+ export { GetMemberWithDiscordAccountsUseCase };
22
+
23
+ //# sourceMappingURL=GetMemberWithDiscordAccounts.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GetMemberWithDiscordAccounts.mjs","names":[],"sources":["../../../../src/application/usecase/member/GetMemberWithDiscordAccounts.ts"],"sourcesContent":["import type { DiscordAccountRepository, MemberId, MemberRepository } from \"#domain\";\nimport type { MemberWithDiscordAccounts } from \"../../dto\";\nimport { toDiscordAccountDTO, toMemberDTO } from \"../../dto\";\nimport { IUseCase } from \"../base\";\n\nexport interface GetMemberWithDiscordAccountsInput {\n\tid: MemberId;\n}\n\nexport interface GetMemberWithDiscordAccountsOutput {\n\tmember: MemberWithDiscordAccounts | null;\n}\n\nexport class GetMemberWithDiscordAccountsUseCase extends IUseCase<\n\tGetMemberWithDiscordAccountsInput,\n\tGetMemberWithDiscordAccountsOutput\n> {\n\tconstructor(\n\t\tprivate readonly memberRepo: MemberRepository,\n\t\tprivate readonly discordRepo: DiscordAccountRepository,\n\t) {\n\t\tsuper();\n\t}\n\n\tasync execute(\n\t\tinput: GetMemberWithDiscordAccountsInput,\n\t): Promise<GetMemberWithDiscordAccountsOutput> {\n\t\tconst member = await this.memberRepo.findById(input.id);\n\t\tif (!member) {\n\t\t\treturn { member: null };\n\t\t}\n\n\t\tconst discordAccounts = await this.discordRepo.findByMemberId(member.id);\n\n\t\treturn {\n\t\t\tmember: {\n\t\t\t\t...toMemberDTO(member),\n\t\t\t\tdiscordAccounts: discordAccounts.map(toDiscordAccountDTO),\n\t\t\t},\n\t\t};\n\t}\n}\n"],"mappings":";;;AAaA,IAAa,sCAAb,cAAyD,SAGvD;CACD,YACC,YACA,aACC;AACD,SAAO;AAHU,OAAA,aAAA;AACA,OAAA,cAAA;;CAKlB,MAAM,QACL,OAC8C;EAC9C,MAAM,SAAS,MAAM,KAAK,WAAW,SAAS,MAAM,GAAG;AACvD,MAAI,CAAC,OACJ,QAAO,EAAE,QAAQ,MAAM;EAGxB,MAAM,kBAAkB,MAAM,KAAK,YAAY,eAAe,OAAO,GAAG;AAExE,SAAO,EACN,QAAQ;GACP,GAAG,YAAY,OAAO;GACtB,iBAAiB,gBAAgB,IAAI,oBAAoB;GACzD,EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"ListMembersWithDiscordAccounts.cjs","names":["IUseCase","toDiscordAccountDTO","toMemberDTO"],"sources":["../../../../src/application/usecase/member/ListMembersWithDiscordAccounts.ts"],"sourcesContent":["import type { DiscordAccountRepository, MemberId, MemberRepository } from \"#domain\";\nimport type { DiscordAccountDTO, MemberDTO } from \"../../dto\";\nimport { toDiscordAccountDTO, toMemberDTO } from \"../../dto\";\nimport { IUseCase } from \"../base\";\n\nexport type ListMembersWithDiscordAccountsInput = Record<string, never>;\n\nexport type MemberWithDiscordAccounts = MemberDTO & {\n\tdiscordAccounts: DiscordAccountDTO[];\n};\n\nexport interface ListMembersWithDiscordAccountsOutput {\n\tentries: MemberWithDiscordAccounts[];\n}\n\nexport class ListMembersWithDiscordAccountsUseCase extends IUseCase<\n\tListMembersWithDiscordAccountsInput,\n\tListMembersWithDiscordAccountsOutput\n> {\n\tconstructor(\n\t\tprivate readonly memberRepo: MemberRepository,\n\t\tprivate readonly discordRepo: DiscordAccountRepository,\n\t) {\n\t\tsuper();\n\t}\n\n\tasync execute(\n\t\t_input: ListMembersWithDiscordAccountsInput,\n\t): Promise<ListMembersWithDiscordAccountsOutput> {\n\t\tconst [members, allDiscordAccounts] = await Promise.all([\n\t\t\tthis.memberRepo.findAll(),\n\t\t\tthis.discordRepo.findAll(),\n\t\t]);\n\n\t\tconst accountsByMemberId = new Map<MemberId, DiscordAccountDTO[]>();\n\t\tfor (const account of allDiscordAccounts) {\n\t\t\tconst existing = accountsByMemberId.get(account.memberId) ?? [];\n\t\t\texisting.push(toDiscordAccountDTO(account));\n\t\t\taccountsByMemberId.set(account.memberId, existing);\n\t\t}\n\n\t\treturn {\n\t\t\tentries: members.map((member) => ({\n\t\t\t\t...toMemberDTO(member),\n\t\t\t\tdiscordAccounts: accountsByMemberId.get(member.id) ?? [],\n\t\t\t})),\n\t\t};\n\t}\n}\n"],"mappings":";;;AAeA,IAAa,wCAAb,cAA2DA,aAAAA,SAGzD;CACD,YACC,YACA,aACC;AACD,SAAO;AAHU,OAAA,aAAA;AACA,OAAA,cAAA;;CAKlB,MAAM,QACL,QACgD;EAChD,MAAM,CAAC,SAAS,sBAAsB,MAAM,QAAQ,IAAI,CACvD,KAAK,WAAW,SAAS,EACzB,KAAK,YAAY,SAAS,CAC1B,CAAC;EAEF,MAAM,qCAAqB,IAAI,KAAoC;AACnE,OAAK,MAAM,WAAW,oBAAoB;GACzC,MAAM,WAAW,mBAAmB,IAAI,QAAQ,SAAS,IAAI,EAAE;AAC/D,YAAS,KAAKC,YAAAA,oBAAoB,QAAQ,CAAC;AAC3C,sBAAmB,IAAI,QAAQ,UAAU,SAAS;;AAGnD,SAAO,EACN,SAAS,QAAQ,KAAK,YAAY;GACjC,GAAGC,YAAAA,YAAY,OAAO;GACtB,iBAAiB,mBAAmB,IAAI,OAAO,GAAG,IAAI,EAAE;GACxD,EAAE,EACH"}
1
+ {"version":3,"file":"ListMembersWithDiscordAccounts.cjs","names":["IUseCase","toDiscordAccountDTO","toMemberDTO"],"sources":["../../../../src/application/usecase/member/ListMembersWithDiscordAccounts.ts"],"sourcesContent":["import type { DiscordAccountRepository, MemberId, MemberRepository } from \"#domain\";\nimport type { DiscordAccountDTO, MemberWithDiscordAccounts } from \"../../dto\";\nimport { toDiscordAccountDTO, toMemberDTO } from \"../../dto\";\nimport { IUseCase } from \"../base\";\n\nexport type ListMembersWithDiscordAccountsInput = Record<string, never>;\n\nexport interface ListMembersWithDiscordAccountsOutput {\n\tentries: MemberWithDiscordAccounts[];\n}\n\nexport class ListMembersWithDiscordAccountsUseCase extends IUseCase<\n\tListMembersWithDiscordAccountsInput,\n\tListMembersWithDiscordAccountsOutput\n> {\n\tconstructor(\n\t\tprivate readonly memberRepo: MemberRepository,\n\t\tprivate readonly discordRepo: DiscordAccountRepository,\n\t) {\n\t\tsuper();\n\t}\n\n\tasync execute(\n\t\t_input: ListMembersWithDiscordAccountsInput,\n\t): Promise<ListMembersWithDiscordAccountsOutput> {\n\t\tconst [members, allDiscordAccounts] = await Promise.all([\n\t\t\tthis.memberRepo.findAll(),\n\t\t\tthis.discordRepo.findAll(),\n\t\t]);\n\n\t\tconst accountsByMemberId = new Map<MemberId, DiscordAccountDTO[]>();\n\t\tfor (const account of allDiscordAccounts) {\n\t\t\tconst existing = accountsByMemberId.get(account.memberId) ?? [];\n\t\t\texisting.push(toDiscordAccountDTO(account));\n\t\t\taccountsByMemberId.set(account.memberId, existing);\n\t\t}\n\n\t\treturn {\n\t\t\tentries: members.map((member) => ({\n\t\t\t\t...toMemberDTO(member),\n\t\t\t\tdiscordAccounts: accountsByMemberId.get(member.id) ?? [],\n\t\t\t})),\n\t\t};\n\t}\n}\n"],"mappings":";;;AAWA,IAAa,wCAAb,cAA2DA,aAAAA,SAGzD;CACD,YACC,YACA,aACC;AACD,SAAO;AAHU,OAAA,aAAA;AACA,OAAA,cAAA;;CAKlB,MAAM,QACL,QACgD;EAChD,MAAM,CAAC,SAAS,sBAAsB,MAAM,QAAQ,IAAI,CACvD,KAAK,WAAW,SAAS,EACzB,KAAK,YAAY,SAAS,CAC1B,CAAC;EAEF,MAAM,qCAAqB,IAAI,KAAoC;AACnE,OAAK,MAAM,WAAW,oBAAoB;GACzC,MAAM,WAAW,mBAAmB,IAAI,QAAQ,SAAS,IAAI,EAAE;AAC/D,YAAS,KAAKC,YAAAA,oBAAoB,QAAQ,CAAC;AAC3C,sBAAmB,IAAI,QAAQ,UAAU,SAAS;;AAGnD,SAAO,EACN,SAAS,QAAQ,KAAK,YAAY;GACjC,GAAGC,YAAAA,YAAY,OAAO;GACtB,iBAAiB,mBAAmB,IAAI,OAAO,GAAG,IAAI,EAAE;GACxD,EAAE,EACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"ListMembersWithDiscordAccounts.mjs","names":[],"sources":["../../../../src/application/usecase/member/ListMembersWithDiscordAccounts.ts"],"sourcesContent":["import type { DiscordAccountRepository, MemberId, MemberRepository } from \"#domain\";\nimport type { DiscordAccountDTO, MemberDTO } from \"../../dto\";\nimport { toDiscordAccountDTO, toMemberDTO } from \"../../dto\";\nimport { IUseCase } from \"../base\";\n\nexport type ListMembersWithDiscordAccountsInput = Record<string, never>;\n\nexport type MemberWithDiscordAccounts = MemberDTO & {\n\tdiscordAccounts: DiscordAccountDTO[];\n};\n\nexport interface ListMembersWithDiscordAccountsOutput {\n\tentries: MemberWithDiscordAccounts[];\n}\n\nexport class ListMembersWithDiscordAccountsUseCase extends IUseCase<\n\tListMembersWithDiscordAccountsInput,\n\tListMembersWithDiscordAccountsOutput\n> {\n\tconstructor(\n\t\tprivate readonly memberRepo: MemberRepository,\n\t\tprivate readonly discordRepo: DiscordAccountRepository,\n\t) {\n\t\tsuper();\n\t}\n\n\tasync execute(\n\t\t_input: ListMembersWithDiscordAccountsInput,\n\t): Promise<ListMembersWithDiscordAccountsOutput> {\n\t\tconst [members, allDiscordAccounts] = await Promise.all([\n\t\t\tthis.memberRepo.findAll(),\n\t\t\tthis.discordRepo.findAll(),\n\t\t]);\n\n\t\tconst accountsByMemberId = new Map<MemberId, DiscordAccountDTO[]>();\n\t\tfor (const account of allDiscordAccounts) {\n\t\t\tconst existing = accountsByMemberId.get(account.memberId) ?? [];\n\t\t\texisting.push(toDiscordAccountDTO(account));\n\t\t\taccountsByMemberId.set(account.memberId, existing);\n\t\t}\n\n\t\treturn {\n\t\t\tentries: members.map((member) => ({\n\t\t\t\t...toMemberDTO(member),\n\t\t\t\tdiscordAccounts: accountsByMemberId.get(member.id) ?? [],\n\t\t\t})),\n\t\t};\n\t}\n}\n"],"mappings":";;;AAeA,IAAa,wCAAb,cAA2D,SAGzD;CACD,YACC,YACA,aACC;AACD,SAAO;AAHU,OAAA,aAAA;AACA,OAAA,cAAA;;CAKlB,MAAM,QACL,QACgD;EAChD,MAAM,CAAC,SAAS,sBAAsB,MAAM,QAAQ,IAAI,CACvD,KAAK,WAAW,SAAS,EACzB,KAAK,YAAY,SAAS,CAC1B,CAAC;EAEF,MAAM,qCAAqB,IAAI,KAAoC;AACnE,OAAK,MAAM,WAAW,oBAAoB;GACzC,MAAM,WAAW,mBAAmB,IAAI,QAAQ,SAAS,IAAI,EAAE;AAC/D,YAAS,KAAK,oBAAoB,QAAQ,CAAC;AAC3C,sBAAmB,IAAI,QAAQ,UAAU,SAAS;;AAGnD,SAAO,EACN,SAAS,QAAQ,KAAK,YAAY;GACjC,GAAG,YAAY,OAAO;GACtB,iBAAiB,mBAAmB,IAAI,OAAO,GAAG,IAAI,EAAE;GACxD,EAAE,EACH"}
1
+ {"version":3,"file":"ListMembersWithDiscordAccounts.mjs","names":[],"sources":["../../../../src/application/usecase/member/ListMembersWithDiscordAccounts.ts"],"sourcesContent":["import type { DiscordAccountRepository, MemberId, MemberRepository } from \"#domain\";\nimport type { DiscordAccountDTO, MemberWithDiscordAccounts } from \"../../dto\";\nimport { toDiscordAccountDTO, toMemberDTO } from \"../../dto\";\nimport { IUseCase } from \"../base\";\n\nexport type ListMembersWithDiscordAccountsInput = Record<string, never>;\n\nexport interface ListMembersWithDiscordAccountsOutput {\n\tentries: MemberWithDiscordAccounts[];\n}\n\nexport class ListMembersWithDiscordAccountsUseCase extends IUseCase<\n\tListMembersWithDiscordAccountsInput,\n\tListMembersWithDiscordAccountsOutput\n> {\n\tconstructor(\n\t\tprivate readonly memberRepo: MemberRepository,\n\t\tprivate readonly discordRepo: DiscordAccountRepository,\n\t) {\n\t\tsuper();\n\t}\n\n\tasync execute(\n\t\t_input: ListMembersWithDiscordAccountsInput,\n\t): Promise<ListMembersWithDiscordAccountsOutput> {\n\t\tconst [members, allDiscordAccounts] = await Promise.all([\n\t\t\tthis.memberRepo.findAll(),\n\t\t\tthis.discordRepo.findAll(),\n\t\t]);\n\n\t\tconst accountsByMemberId = new Map<MemberId, DiscordAccountDTO[]>();\n\t\tfor (const account of allDiscordAccounts) {\n\t\t\tconst existing = accountsByMemberId.get(account.memberId) ?? [];\n\t\t\texisting.push(toDiscordAccountDTO(account));\n\t\t\taccountsByMemberId.set(account.memberId, existing);\n\t\t}\n\n\t\treturn {\n\t\t\tentries: members.map((member) => ({\n\t\t\t\t...toMemberDTO(member),\n\t\t\t\tdiscordAccounts: accountsByMemberId.get(member.id) ?? [],\n\t\t\t})),\n\t\t};\n\t}\n}\n"],"mappings":";;;AAWA,IAAa,wCAAb,cAA2D,SAGzD;CACD,YACC,YACA,aACC;AACD,SAAO;AAHU,OAAA,aAAA;AACA,OAAA,cAAA;;CAKlB,MAAM,QACL,QACgD;EAChD,MAAM,CAAC,SAAS,sBAAsB,MAAM,QAAQ,IAAI,CACvD,KAAK,WAAW,SAAS,EACzB,KAAK,YAAY,SAAS,CAC1B,CAAC;EAEF,MAAM,qCAAqB,IAAI,KAAoC;AACnE,OAAK,MAAM,WAAW,oBAAoB;GACzC,MAAM,WAAW,mBAAmB,IAAI,QAAQ,SAAS,IAAI,EAAE;AAC/D,YAAS,KAAK,oBAAoB,QAAQ,CAAC;AAC3C,sBAAmB,IAAI,QAAQ,UAAU,SAAS;;AAGnD,SAAO,EACN,SAAS,QAAQ,KAAK,YAAY;GACjC,GAAG,YAAY,OAAO;GACtB,iBAAiB,mBAAmB,IAAI,OAAO,GAAG,IAAI,EAAE;GACxD,EAAE,EACH"}
@@ -9,6 +9,7 @@ const require_ConnectDiscordAccount = require("../application/usecase/member/Con
9
9
  const require_GetMember = require("../application/usecase/member/GetMember.cjs");
10
10
  const require_GetMemberByDiscordId = require("../application/usecase/member/GetMemberByDiscordId.cjs");
11
11
  const require_GetMemberByEmail = require("../application/usecase/member/GetMemberByEmail.cjs");
12
+ const require_GetMemberWithDiscordAccounts = require("../application/usecase/member/GetMemberWithDiscordAccounts.cjs");
12
13
  const require_GetMemberList = require("../application/usecase/member/GetMemberList.cjs");
13
14
  const require_ListMembersWithDiscordAccounts = require("../application/usecase/member/ListMembersWithDiscordAccounts.cjs");
14
15
  const require_RegisterMember = require("../application/usecase/member/RegisterMember.cjs");
@@ -25,6 +26,7 @@ function createMemberService(deps) {
25
26
  const getMemberByEmail = new require_GetMemberByEmail.GetMemberByEmailUseCase(memberRepo);
26
27
  const getMemberByDiscordId = new require_GetMemberByDiscordId.GetMemberByDiscordIdUseCase(discordRepo, memberRepo);
27
28
  const getMemberList = new require_GetMemberList.GetMemberListUseCase(memberRepo);
29
+ const getMemberWithDiscord = new require_GetMemberWithDiscordAccounts.GetMemberWithDiscordAccountsUseCase(memberRepo, discordRepo);
28
30
  const listMembersWithDiscord = new require_ListMembersWithDiscordAccounts.ListMembersWithDiscordAccountsUseCase(memberRepo, discordRepo);
29
31
  const connectDiscordAccountUC = new require_ConnectDiscordAccount.ConnectDiscordAccountUseCase(memberRepo, discordRepo);
30
32
  const changeDiscordNickNameUC = new require_ChangeDiscordNickName.ChangeDiscordNickNameUseCase(discordRepo);
@@ -46,6 +48,7 @@ function createMemberService(deps) {
46
48
  getByEmail: (email) => getMemberByEmail.execute({ email: new require_UniversityEmail.UniversityEmail(email) }),
47
49
  getByDiscordId: (id) => getMemberByDiscordId.execute({ discordId: require_DiscordId.discordId(id) }),
48
50
  list: () => getMemberList.execute({}),
51
+ getMemberWithDiscordAccounts: (id) => getMemberWithDiscord.execute({ id: require_MemberId.memberId(id) }),
49
52
  listMembersWithDiscordAccounts: () => listMembersWithDiscord.execute({}),
50
53
  connectDiscordAccount: (input) => connectDiscordAccountUC.execute({
51
54
  memberId: require_MemberId.memberId(input.memberId),
@@ -1 +1 @@
1
- {"version":3,"file":"memberService.cjs","names":["DrizzleMemberRepository","DrizzleDiscordAccountRepository","RegisterMemberUseCase","UpdateMemberUseCase","GetMemberUseCase","GetMemberByEmailUseCase","GetMemberByDiscordIdUseCase","GetMemberListUseCase","ListMembersWithDiscordAccountsUseCase","ConnectDiscordAccountUseCase","ChangeDiscordNickNameUseCase","StudentId","UniversityEmail","recorded","Email","notRecorded","memberId","discordId"],"sources":["../../src/executable/memberService.ts"],"sourcesContent":["import {\n\tChangeDiscordNickNameUseCase,\n\tConnectDiscordAccountUseCase,\n\tGetMemberByDiscordIdUseCase,\n\tGetMemberByEmailUseCase,\n\tGetMemberListUseCase,\n\tGetMemberUseCase,\n\tListMembersWithDiscordAccountsUseCase,\n\ttype MemberWithDiscordAccounts,\n\tRegisterMemberUseCase,\n\tUpdateMemberUseCase,\n} from \"#application\";\nimport { discordId } from \"#domain/aggregates/discord-account/DiscordId\";\nimport type { DiscordAccountRepository } from \"#domain/aggregates/discord-account/DiscordAccountRepository\";\nimport type { DiscordAccount } from \"#domain/aggregates/discord-account/DiscordAccount\";\nimport { Email } from \"#domain/aggregates/member/Email\";\nimport type { Member } from \"#domain/aggregates/member/Member\";\nimport { memberId } from \"#domain/aggregates/member/MemberId\";\nimport type { MemberRepository } from \"#domain/aggregates/member/MemberRepository\";\nimport { UniversityEmail } from \"#domain/aggregates/member/UniversityEmail\";\nimport type { CompleteAffiliation } from \"#domain/shared/affiliation/Affiliation\";\nimport { recorded, notRecorded } from \"#domain/shared/Recorded\";\nimport { StudentId } from \"#domain/shared/StudentId\";\nimport { DrizzleDiscordAccountRepository, DrizzleMemberRepository } from \"#infrastructure\";\n\nexport type { MemberWithDiscordAccounts } from \"#application\";\n\nexport type MemberService = {\n\tregister(input: {\n\t\tname: string;\n\t\tstudentId: string;\n\t\temail: string;\n\t\tpersonalEmail?: string;\n\t\taffiliation: CompleteAffiliation;\n\t}): Promise<{ member: Member }>;\n\n\tupdate(input: {\n\t\tmemberId: string;\n\t\tname?: string;\n\t\tstudentId?: string;\n\t\tpersonalEmail?: string | null;\n\t}): Promise<{ member: Member }>;\n\n\tgetById(id: string): Promise<{ member: Member | null }>;\n\n\tgetByEmail(email: string): Promise<{ member: Member | null }>;\n\n\tgetByDiscordId(discordId: string): Promise<{ member: Member | null }>;\n\n\tlist(): Promise<{ members: Member[] }>;\n\n\tlistMembersWithDiscordAccounts(): Promise<{\n\t\tentries: MemberWithDiscordAccounts[];\n\t}>;\n\n\tconnectDiscordAccount(input: {\n\t\tmemberId: string;\n\t\tdiscordAccountId: string;\n\t\tdiscordNickName?: string;\n\t}): Promise<{ discordAccount: DiscordAccount }>;\n\n\tchangeDiscordNickName(input: {\n\t\tdiscordAccountId: string;\n\t\tdiscordNickName: string;\n\t}): Promise<{ discordAccount: DiscordAccount }>;\n};\n\nexport type MemberServiceDeps = {\n\tmemberRepository?: MemberRepository;\n\tdiscordAccountRepository?: DiscordAccountRepository;\n};\n\nexport function createMemberService(deps?: MemberServiceDeps): MemberService {\n\tconst memberRepo = deps?.memberRepository ?? new DrizzleMemberRepository();\n\tconst discordRepo = deps?.discordAccountRepository ?? new DrizzleDiscordAccountRepository();\n\n\tconst registerMember = new RegisterMemberUseCase(memberRepo);\n\tconst updateMember = new UpdateMemberUseCase(memberRepo);\n\tconst getMember = new GetMemberUseCase(memberRepo);\n\tconst getMemberByEmail = new GetMemberByEmailUseCase(memberRepo);\n\tconst getMemberByDiscordId = new GetMemberByDiscordIdUseCase(discordRepo, memberRepo);\n\tconst getMemberList = new GetMemberListUseCase(memberRepo);\n\tconst listMembersWithDiscord = new ListMembersWithDiscordAccountsUseCase(memberRepo, discordRepo);\n\tconst connectDiscordAccountUC = new ConnectDiscordAccountUseCase(memberRepo, discordRepo);\n\tconst changeDiscordNickNameUC = new ChangeDiscordNickNameUseCase(discordRepo);\n\n\treturn {\n\t\tregister: (input) =>\n\t\t\tregisterMember.execute({\n\t\t\t\tname: input.name,\n\t\t\t\tstudentId: StudentId.fromString(input.studentId),\n\t\t\t\temail: new UniversityEmail(input.email),\n\t\t\t\tpersonalEmail:\n\t\t\t\t\tinput.personalEmail !== undefined\n\t\t\t\t\t\t? recorded(new Email(input.personalEmail))\n\t\t\t\t\t\t: notRecorded(),\n\t\t\t\taffiliation: input.affiliation,\n\t\t\t}),\n\n\t\tupdate: (input) =>\n\t\t\tupdateMember.execute({\n\t\t\t\tmemberId: memberId(input.memberId),\n\t\t\t\tname: input.name,\n\t\t\t\tstudentId: input.studentId ? StudentId.fromString(input.studentId) : undefined,\n\t\t\t\tpersonalEmail:\n\t\t\t\t\tinput.personalEmail === null\n\t\t\t\t\t\t? notRecorded()\n\t\t\t\t\t\t: input.personalEmail !== undefined\n\t\t\t\t\t\t\t? recorded(new Email(input.personalEmail))\n\t\t\t\t\t\t\t: undefined,\n\t\t\t}),\n\n\t\tgetById: (id) => getMember.execute({ id: memberId(id) }),\n\n\t\tgetByEmail: (email) => getMemberByEmail.execute({ email: new UniversityEmail(email) }),\n\n\t\tgetByDiscordId: (id) => getMemberByDiscordId.execute({ discordId: discordId(id) }),\n\n\t\tlist: () => getMemberList.execute({} as Record<string, never>),\n\n\t\tlistMembersWithDiscordAccounts: () =>\n\t\t\tlistMembersWithDiscord.execute({} as Record<string, never>),\n\n\t\tconnectDiscordAccount: (input) =>\n\t\t\tconnectDiscordAccountUC.execute({\n\t\t\t\tmemberId: memberId(input.memberId),\n\t\t\t\tdiscordAccountId: discordId(input.discordAccountId),\n\t\t\t\tdiscordNickName: input.discordNickName,\n\t\t\t}),\n\n\t\tchangeDiscordNickName: (input) =>\n\t\t\tchangeDiscordNickNameUC.execute({\n\t\t\t\tdiscordAccountId: discordId(input.discordAccountId),\n\t\t\t\tdiscordNickName: input.discordNickName,\n\t\t\t}),\n\t};\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAwEA,SAAgB,oBAAoB,MAAyC;CAC5E,MAAM,aAAa,MAAM,oBAAoB,IAAIA,gCAAAA,yBAAyB;CAC1E,MAAM,cAAc,MAAM,4BAA4B,IAAIC,wCAAAA,iCAAiC;CAE3F,MAAM,iBAAiB,IAAIC,uBAAAA,sBAAsB,WAAW;CAC5D,MAAM,eAAe,IAAIC,qBAAAA,oBAAoB,WAAW;CACxD,MAAM,YAAY,IAAIC,kBAAAA,iBAAiB,WAAW;CAClD,MAAM,mBAAmB,IAAIC,yBAAAA,wBAAwB,WAAW;CAChE,MAAM,uBAAuB,IAAIC,6BAAAA,4BAA4B,aAAa,WAAW;CACrF,MAAM,gBAAgB,IAAIC,sBAAAA,qBAAqB,WAAW;CAC1D,MAAM,yBAAyB,IAAIC,uCAAAA,sCAAsC,YAAY,YAAY;CACjG,MAAM,0BAA0B,IAAIC,8BAAAA,6BAA6B,YAAY,YAAY;CACzF,MAAM,0BAA0B,IAAIC,8BAAAA,6BAA6B,YAAY;AAE7E,QAAO;EACN,WAAW,UACV,eAAe,QAAQ;GACtB,MAAM,MAAM;GACZ,WAAWC,kBAAAA,UAAU,WAAW,MAAM,UAAU;GAChD,OAAO,IAAIC,wBAAAA,gBAAgB,MAAM,MAAM;GACvC,eACC,MAAM,kBAAkB,KAAA,IACrBC,iBAAAA,SAAS,IAAIC,cAAAA,MAAM,MAAM,cAAc,CAAC,GACxCC,iBAAAA,aAAa;GACjB,aAAa,MAAM;GACnB,CAAC;EAEH,SAAS,UACR,aAAa,QAAQ;GACpB,UAAUC,iBAAAA,SAAS,MAAM,SAAS;GAClC,MAAM,MAAM;GACZ,WAAW,MAAM,YAAYL,kBAAAA,UAAU,WAAW,MAAM,UAAU,GAAG,KAAA;GACrE,eACC,MAAM,kBAAkB,OACrBI,iBAAAA,aAAa,GACb,MAAM,kBAAkB,KAAA,IACvBF,iBAAAA,SAAS,IAAIC,cAAAA,MAAM,MAAM,cAAc,CAAC,GACxC,KAAA;GACL,CAAC;EAEH,UAAU,OAAO,UAAU,QAAQ,EAAE,IAAIE,iBAAAA,SAAS,GAAG,EAAE,CAAC;EAExD,aAAa,UAAU,iBAAiB,QAAQ,EAAE,OAAO,IAAIJ,wBAAAA,gBAAgB,MAAM,EAAE,CAAC;EAEtF,iBAAiB,OAAO,qBAAqB,QAAQ,EAAE,WAAWK,kBAAAA,UAAU,GAAG,EAAE,CAAC;EAElF,YAAY,cAAc,QAAQ,EAAE,CAA0B;EAE9D,sCACC,uBAAuB,QAAQ,EAAE,CAA0B;EAE5D,wBAAwB,UACvB,wBAAwB,QAAQ;GAC/B,UAAUD,iBAAAA,SAAS,MAAM,SAAS;GAClC,kBAAkBC,kBAAAA,UAAU,MAAM,iBAAiB;GACnD,iBAAiB,MAAM;GACvB,CAAC;EAEH,wBAAwB,UACvB,wBAAwB,QAAQ;GAC/B,kBAAkBA,kBAAAA,UAAU,MAAM,iBAAiB;GACnD,iBAAiB,MAAM;GACvB,CAAC;EACH"}
1
+ {"version":3,"file":"memberService.cjs","names":["DrizzleMemberRepository","DrizzleDiscordAccountRepository","RegisterMemberUseCase","UpdateMemberUseCase","GetMemberUseCase","GetMemberByEmailUseCase","GetMemberByDiscordIdUseCase","GetMemberListUseCase","GetMemberWithDiscordAccountsUseCase","ListMembersWithDiscordAccountsUseCase","ConnectDiscordAccountUseCase","ChangeDiscordNickNameUseCase","StudentId","UniversityEmail","recorded","Email","notRecorded","memberId","discordId"],"sources":["../../src/executable/memberService.ts"],"sourcesContent":["import {\n\tChangeDiscordNickNameUseCase,\n\tConnectDiscordAccountUseCase,\n\tGetMemberByDiscordIdUseCase,\n\tGetMemberByEmailUseCase,\n\tGetMemberListUseCase,\n\tGetMemberUseCase,\n\tGetMemberWithDiscordAccountsUseCase,\n\tListMembersWithDiscordAccountsUseCase,\n\ttype MemberWithDiscordAccounts,\n\tRegisterMemberUseCase,\n\tUpdateMemberUseCase,\n} from \"#application\";\nimport { discordId } from \"#domain/aggregates/discord-account/DiscordId\";\nimport type { DiscordAccountRepository } from \"#domain/aggregates/discord-account/DiscordAccountRepository\";\nimport type { DiscordAccount } from \"#domain/aggregates/discord-account/DiscordAccount\";\nimport { Email } from \"#domain/aggregates/member/Email\";\nimport type { Member } from \"#domain/aggregates/member/Member\";\nimport { memberId } from \"#domain/aggregates/member/MemberId\";\nimport type { MemberRepository } from \"#domain/aggregates/member/MemberRepository\";\nimport { UniversityEmail } from \"#domain/aggregates/member/UniversityEmail\";\nimport type { CompleteAffiliation } from \"#domain/shared/affiliation/Affiliation\";\nimport { recorded, notRecorded } from \"#domain/shared/Recorded\";\nimport { StudentId } from \"#domain/shared/StudentId\";\nimport { DrizzleDiscordAccountRepository, DrizzleMemberRepository } from \"#infrastructure\";\n\nexport type { MemberWithDiscordAccounts } from \"#application\";\n\nexport type MemberService = {\n\tregister(input: {\n\t\tname: string;\n\t\tstudentId: string;\n\t\temail: string;\n\t\tpersonalEmail?: string;\n\t\taffiliation: CompleteAffiliation;\n\t}): Promise<{ member: Member }>;\n\n\tupdate(input: {\n\t\tmemberId: string;\n\t\tname?: string;\n\t\tstudentId?: string;\n\t\tpersonalEmail?: string | null;\n\t}): Promise<{ member: Member }>;\n\n\tgetById(id: string): Promise<{ member: Member | null }>;\n\n\tgetByEmail(email: string): Promise<{ member: Member | null }>;\n\n\tgetByDiscordId(discordId: string): Promise<{ member: Member | null }>;\n\n\tlist(): Promise<{ members: Member[] }>;\n\n\tgetMemberWithDiscordAccounts(id: string): Promise<{\n\t\tmember: MemberWithDiscordAccounts | null;\n\t}>;\n\n\tlistMembersWithDiscordAccounts(): Promise<{\n\t\tentries: MemberWithDiscordAccounts[];\n\t}>;\n\n\tconnectDiscordAccount(input: {\n\t\tmemberId: string;\n\t\tdiscordAccountId: string;\n\t\tdiscordNickName?: string;\n\t}): Promise<{ discordAccount: DiscordAccount }>;\n\n\tchangeDiscordNickName(input: {\n\t\tdiscordAccountId: string;\n\t\tdiscordNickName: string;\n\t}): Promise<{ discordAccount: DiscordAccount }>;\n};\n\nexport type MemberServiceDeps = {\n\tmemberRepository?: MemberRepository;\n\tdiscordAccountRepository?: DiscordAccountRepository;\n};\n\nexport function createMemberService(deps?: MemberServiceDeps): MemberService {\n\tconst memberRepo = deps?.memberRepository ?? new DrizzleMemberRepository();\n\tconst discordRepo = deps?.discordAccountRepository ?? new DrizzleDiscordAccountRepository();\n\n\tconst registerMember = new RegisterMemberUseCase(memberRepo);\n\tconst updateMember = new UpdateMemberUseCase(memberRepo);\n\tconst getMember = new GetMemberUseCase(memberRepo);\n\tconst getMemberByEmail = new GetMemberByEmailUseCase(memberRepo);\n\tconst getMemberByDiscordId = new GetMemberByDiscordIdUseCase(discordRepo, memberRepo);\n\tconst getMemberList = new GetMemberListUseCase(memberRepo);\n\tconst getMemberWithDiscord = new GetMemberWithDiscordAccountsUseCase(memberRepo, discordRepo);\n\tconst listMembersWithDiscord = new ListMembersWithDiscordAccountsUseCase(memberRepo, discordRepo);\n\tconst connectDiscordAccountUC = new ConnectDiscordAccountUseCase(memberRepo, discordRepo);\n\tconst changeDiscordNickNameUC = new ChangeDiscordNickNameUseCase(discordRepo);\n\n\treturn {\n\t\tregister: (input) =>\n\t\t\tregisterMember.execute({\n\t\t\t\tname: input.name,\n\t\t\t\tstudentId: StudentId.fromString(input.studentId),\n\t\t\t\temail: new UniversityEmail(input.email),\n\t\t\t\tpersonalEmail:\n\t\t\t\t\tinput.personalEmail !== undefined\n\t\t\t\t\t\t? recorded(new Email(input.personalEmail))\n\t\t\t\t\t\t: notRecorded(),\n\t\t\t\taffiliation: input.affiliation,\n\t\t\t}),\n\n\t\tupdate: (input) =>\n\t\t\tupdateMember.execute({\n\t\t\t\tmemberId: memberId(input.memberId),\n\t\t\t\tname: input.name,\n\t\t\t\tstudentId: input.studentId ? StudentId.fromString(input.studentId) : undefined,\n\t\t\t\tpersonalEmail:\n\t\t\t\t\tinput.personalEmail === null\n\t\t\t\t\t\t? notRecorded()\n\t\t\t\t\t\t: input.personalEmail !== undefined\n\t\t\t\t\t\t\t? recorded(new Email(input.personalEmail))\n\t\t\t\t\t\t\t: undefined,\n\t\t\t}),\n\n\t\tgetById: (id) => getMember.execute({ id: memberId(id) }),\n\n\t\tgetByEmail: (email) => getMemberByEmail.execute({ email: new UniversityEmail(email) }),\n\n\t\tgetByDiscordId: (id) => getMemberByDiscordId.execute({ discordId: discordId(id) }),\n\n\t\tlist: () => getMemberList.execute({} as Record<string, never>),\n\n\t\tgetMemberWithDiscordAccounts: (id) => getMemberWithDiscord.execute({ id: memberId(id) }),\n\n\t\tlistMembersWithDiscordAccounts: () =>\n\t\t\tlistMembersWithDiscord.execute({} as Record<string, never>),\n\n\t\tconnectDiscordAccount: (input) =>\n\t\t\tconnectDiscordAccountUC.execute({\n\t\t\t\tmemberId: memberId(input.memberId),\n\t\t\t\tdiscordAccountId: discordId(input.discordAccountId),\n\t\t\t\tdiscordNickName: input.discordNickName,\n\t\t\t}),\n\n\t\tchangeDiscordNickName: (input) =>\n\t\t\tchangeDiscordNickNameUC.execute({\n\t\t\t\tdiscordAccountId: discordId(input.discordAccountId),\n\t\t\t\tdiscordNickName: input.discordNickName,\n\t\t\t}),\n\t};\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA6EA,SAAgB,oBAAoB,MAAyC;CAC5E,MAAM,aAAa,MAAM,oBAAoB,IAAIA,gCAAAA,yBAAyB;CAC1E,MAAM,cAAc,MAAM,4BAA4B,IAAIC,wCAAAA,iCAAiC;CAE3F,MAAM,iBAAiB,IAAIC,uBAAAA,sBAAsB,WAAW;CAC5D,MAAM,eAAe,IAAIC,qBAAAA,oBAAoB,WAAW;CACxD,MAAM,YAAY,IAAIC,kBAAAA,iBAAiB,WAAW;CAClD,MAAM,mBAAmB,IAAIC,yBAAAA,wBAAwB,WAAW;CAChE,MAAM,uBAAuB,IAAIC,6BAAAA,4BAA4B,aAAa,WAAW;CACrF,MAAM,gBAAgB,IAAIC,sBAAAA,qBAAqB,WAAW;CAC1D,MAAM,uBAAuB,IAAIC,qCAAAA,oCAAoC,YAAY,YAAY;CAC7F,MAAM,yBAAyB,IAAIC,uCAAAA,sCAAsC,YAAY,YAAY;CACjG,MAAM,0BAA0B,IAAIC,8BAAAA,6BAA6B,YAAY,YAAY;CACzF,MAAM,0BAA0B,IAAIC,8BAAAA,6BAA6B,YAAY;AAE7E,QAAO;EACN,WAAW,UACV,eAAe,QAAQ;GACtB,MAAM,MAAM;GACZ,WAAWC,kBAAAA,UAAU,WAAW,MAAM,UAAU;GAChD,OAAO,IAAIC,wBAAAA,gBAAgB,MAAM,MAAM;GACvC,eACC,MAAM,kBAAkB,KAAA,IACrBC,iBAAAA,SAAS,IAAIC,cAAAA,MAAM,MAAM,cAAc,CAAC,GACxCC,iBAAAA,aAAa;GACjB,aAAa,MAAM;GACnB,CAAC;EAEH,SAAS,UACR,aAAa,QAAQ;GACpB,UAAUC,iBAAAA,SAAS,MAAM,SAAS;GAClC,MAAM,MAAM;GACZ,WAAW,MAAM,YAAYL,kBAAAA,UAAU,WAAW,MAAM,UAAU,GAAG,KAAA;GACrE,eACC,MAAM,kBAAkB,OACrBI,iBAAAA,aAAa,GACb,MAAM,kBAAkB,KAAA,IACvBF,iBAAAA,SAAS,IAAIC,cAAAA,MAAM,MAAM,cAAc,CAAC,GACxC,KAAA;GACL,CAAC;EAEH,UAAU,OAAO,UAAU,QAAQ,EAAE,IAAIE,iBAAAA,SAAS,GAAG,EAAE,CAAC;EAExD,aAAa,UAAU,iBAAiB,QAAQ,EAAE,OAAO,IAAIJ,wBAAAA,gBAAgB,MAAM,EAAE,CAAC;EAEtF,iBAAiB,OAAO,qBAAqB,QAAQ,EAAE,WAAWK,kBAAAA,UAAU,GAAG,EAAE,CAAC;EAElF,YAAY,cAAc,QAAQ,EAAE,CAA0B;EAE9D,+BAA+B,OAAO,qBAAqB,QAAQ,EAAE,IAAID,iBAAAA,SAAS,GAAG,EAAE,CAAC;EAExF,sCACC,uBAAuB,QAAQ,EAAE,CAA0B;EAE5D,wBAAwB,UACvB,wBAAwB,QAAQ;GAC/B,UAAUA,iBAAAA,SAAS,MAAM,SAAS;GAClC,kBAAkBC,kBAAAA,UAAU,MAAM,iBAAiB;GACnD,iBAAiB,MAAM;GACvB,CAAC;EAEH,wBAAwB,UACvB,wBAAwB,QAAQ;GAC/B,kBAAkBA,kBAAAA,UAAU,MAAM,iBAAiB;GACnD,iBAAiB,MAAM;GACvB,CAAC;EACH"}
@@ -3,7 +3,7 @@ import { DiscordAccount } from "../domain/aggregates/discord-account/DiscordAcco
3
3
  import { DiscordAccountRepository } from "../domain/aggregates/discord-account/DiscordAccountRepository.cjs";
4
4
  import { Member } from "../domain/aggregates/member/Member.cjs";
5
5
  import { MemberRepository } from "../domain/aggregates/member/MemberRepository.cjs";
6
- import { MemberWithDiscordAccounts } from "../application/usecase/member/ListMembersWithDiscordAccounts.cjs";
6
+ import { MemberWithDiscordAccounts } from "../application/dto.cjs";
7
7
 
8
8
  //#region src/executable/memberService.d.ts
9
9
  type MemberService = {
@@ -36,6 +36,9 @@ type MemberService = {
36
36
  list(): Promise<{
37
37
  members: Member[];
38
38
  }>;
39
+ getMemberWithDiscordAccounts(id: string): Promise<{
40
+ member: MemberWithDiscordAccounts | null;
41
+ }>;
39
42
  listMembersWithDiscordAccounts(): Promise<{
40
43
  entries: MemberWithDiscordAccounts[];
41
44
  }>;
@@ -3,7 +3,7 @@ import { DiscordAccount } from "../domain/aggregates/discord-account/DiscordAcco
3
3
  import { DiscordAccountRepository } from "../domain/aggregates/discord-account/DiscordAccountRepository.mjs";
4
4
  import { Member } from "../domain/aggregates/member/Member.mjs";
5
5
  import { MemberRepository } from "../domain/aggregates/member/MemberRepository.mjs";
6
- import { MemberWithDiscordAccounts } from "../application/usecase/member/ListMembersWithDiscordAccounts.mjs";
6
+ import { MemberWithDiscordAccounts } from "../application/dto.mjs";
7
7
 
8
8
  //#region src/executable/memberService.d.ts
9
9
  type MemberService = {
@@ -36,6 +36,9 @@ type MemberService = {
36
36
  list(): Promise<{
37
37
  members: Member[];
38
38
  }>;
39
+ getMemberWithDiscordAccounts(id: string): Promise<{
40
+ member: MemberWithDiscordAccounts | null;
41
+ }>;
39
42
  listMembersWithDiscordAccounts(): Promise<{
40
43
  entries: MemberWithDiscordAccounts[];
41
44
  }>;
@@ -9,6 +9,7 @@ import { ConnectDiscordAccountUseCase } from "../application/usecase/member/Conn
9
9
  import { GetMemberUseCase } from "../application/usecase/member/GetMember.mjs";
10
10
  import { GetMemberByDiscordIdUseCase } from "../application/usecase/member/GetMemberByDiscordId.mjs";
11
11
  import { GetMemberByEmailUseCase } from "../application/usecase/member/GetMemberByEmail.mjs";
12
+ import { GetMemberWithDiscordAccountsUseCase } from "../application/usecase/member/GetMemberWithDiscordAccounts.mjs";
12
13
  import { GetMemberListUseCase } from "../application/usecase/member/GetMemberList.mjs";
13
14
  import { ListMembersWithDiscordAccountsUseCase } from "../application/usecase/member/ListMembersWithDiscordAccounts.mjs";
14
15
  import { RegisterMemberUseCase } from "../application/usecase/member/RegisterMember.mjs";
@@ -25,6 +26,7 @@ function createMemberService(deps) {
25
26
  const getMemberByEmail = new GetMemberByEmailUseCase(memberRepo);
26
27
  const getMemberByDiscordId = new GetMemberByDiscordIdUseCase(discordRepo, memberRepo);
27
28
  const getMemberList = new GetMemberListUseCase(memberRepo);
29
+ const getMemberWithDiscord = new GetMemberWithDiscordAccountsUseCase(memberRepo, discordRepo);
28
30
  const listMembersWithDiscord = new ListMembersWithDiscordAccountsUseCase(memberRepo, discordRepo);
29
31
  const connectDiscordAccountUC = new ConnectDiscordAccountUseCase(memberRepo, discordRepo);
30
32
  const changeDiscordNickNameUC = new ChangeDiscordNickNameUseCase(discordRepo);
@@ -46,6 +48,7 @@ function createMemberService(deps) {
46
48
  getByEmail: (email) => getMemberByEmail.execute({ email: new UniversityEmail(email) }),
47
49
  getByDiscordId: (id) => getMemberByDiscordId.execute({ discordId: discordId(id) }),
48
50
  list: () => getMemberList.execute({}),
51
+ getMemberWithDiscordAccounts: (id) => getMemberWithDiscord.execute({ id: memberId(id) }),
49
52
  listMembersWithDiscordAccounts: () => listMembersWithDiscord.execute({}),
50
53
  connectDiscordAccount: (input) => connectDiscordAccountUC.execute({
51
54
  memberId: memberId(input.memberId),
@@ -1 +1 @@
1
- {"version":3,"file":"memberService.mjs","names":[],"sources":["../../src/executable/memberService.ts"],"sourcesContent":["import {\n\tChangeDiscordNickNameUseCase,\n\tConnectDiscordAccountUseCase,\n\tGetMemberByDiscordIdUseCase,\n\tGetMemberByEmailUseCase,\n\tGetMemberListUseCase,\n\tGetMemberUseCase,\n\tListMembersWithDiscordAccountsUseCase,\n\ttype MemberWithDiscordAccounts,\n\tRegisterMemberUseCase,\n\tUpdateMemberUseCase,\n} from \"#application\";\nimport { discordId } from \"#domain/aggregates/discord-account/DiscordId\";\nimport type { DiscordAccountRepository } from \"#domain/aggregates/discord-account/DiscordAccountRepository\";\nimport type { DiscordAccount } from \"#domain/aggregates/discord-account/DiscordAccount\";\nimport { Email } from \"#domain/aggregates/member/Email\";\nimport type { Member } from \"#domain/aggregates/member/Member\";\nimport { memberId } from \"#domain/aggregates/member/MemberId\";\nimport type { MemberRepository } from \"#domain/aggregates/member/MemberRepository\";\nimport { UniversityEmail } from \"#domain/aggregates/member/UniversityEmail\";\nimport type { CompleteAffiliation } from \"#domain/shared/affiliation/Affiliation\";\nimport { recorded, notRecorded } from \"#domain/shared/Recorded\";\nimport { StudentId } from \"#domain/shared/StudentId\";\nimport { DrizzleDiscordAccountRepository, DrizzleMemberRepository } from \"#infrastructure\";\n\nexport type { MemberWithDiscordAccounts } from \"#application\";\n\nexport type MemberService = {\n\tregister(input: {\n\t\tname: string;\n\t\tstudentId: string;\n\t\temail: string;\n\t\tpersonalEmail?: string;\n\t\taffiliation: CompleteAffiliation;\n\t}): Promise<{ member: Member }>;\n\n\tupdate(input: {\n\t\tmemberId: string;\n\t\tname?: string;\n\t\tstudentId?: string;\n\t\tpersonalEmail?: string | null;\n\t}): Promise<{ member: Member }>;\n\n\tgetById(id: string): Promise<{ member: Member | null }>;\n\n\tgetByEmail(email: string): Promise<{ member: Member | null }>;\n\n\tgetByDiscordId(discordId: string): Promise<{ member: Member | null }>;\n\n\tlist(): Promise<{ members: Member[] }>;\n\n\tlistMembersWithDiscordAccounts(): Promise<{\n\t\tentries: MemberWithDiscordAccounts[];\n\t}>;\n\n\tconnectDiscordAccount(input: {\n\t\tmemberId: string;\n\t\tdiscordAccountId: string;\n\t\tdiscordNickName?: string;\n\t}): Promise<{ discordAccount: DiscordAccount }>;\n\n\tchangeDiscordNickName(input: {\n\t\tdiscordAccountId: string;\n\t\tdiscordNickName: string;\n\t}): Promise<{ discordAccount: DiscordAccount }>;\n};\n\nexport type MemberServiceDeps = {\n\tmemberRepository?: MemberRepository;\n\tdiscordAccountRepository?: DiscordAccountRepository;\n};\n\nexport function createMemberService(deps?: MemberServiceDeps): MemberService {\n\tconst memberRepo = deps?.memberRepository ?? new DrizzleMemberRepository();\n\tconst discordRepo = deps?.discordAccountRepository ?? new DrizzleDiscordAccountRepository();\n\n\tconst registerMember = new RegisterMemberUseCase(memberRepo);\n\tconst updateMember = new UpdateMemberUseCase(memberRepo);\n\tconst getMember = new GetMemberUseCase(memberRepo);\n\tconst getMemberByEmail = new GetMemberByEmailUseCase(memberRepo);\n\tconst getMemberByDiscordId = new GetMemberByDiscordIdUseCase(discordRepo, memberRepo);\n\tconst getMemberList = new GetMemberListUseCase(memberRepo);\n\tconst listMembersWithDiscord = new ListMembersWithDiscordAccountsUseCase(memberRepo, discordRepo);\n\tconst connectDiscordAccountUC = new ConnectDiscordAccountUseCase(memberRepo, discordRepo);\n\tconst changeDiscordNickNameUC = new ChangeDiscordNickNameUseCase(discordRepo);\n\n\treturn {\n\t\tregister: (input) =>\n\t\t\tregisterMember.execute({\n\t\t\t\tname: input.name,\n\t\t\t\tstudentId: StudentId.fromString(input.studentId),\n\t\t\t\temail: new UniversityEmail(input.email),\n\t\t\t\tpersonalEmail:\n\t\t\t\t\tinput.personalEmail !== undefined\n\t\t\t\t\t\t? recorded(new Email(input.personalEmail))\n\t\t\t\t\t\t: notRecorded(),\n\t\t\t\taffiliation: input.affiliation,\n\t\t\t}),\n\n\t\tupdate: (input) =>\n\t\t\tupdateMember.execute({\n\t\t\t\tmemberId: memberId(input.memberId),\n\t\t\t\tname: input.name,\n\t\t\t\tstudentId: input.studentId ? StudentId.fromString(input.studentId) : undefined,\n\t\t\t\tpersonalEmail:\n\t\t\t\t\tinput.personalEmail === null\n\t\t\t\t\t\t? notRecorded()\n\t\t\t\t\t\t: input.personalEmail !== undefined\n\t\t\t\t\t\t\t? recorded(new Email(input.personalEmail))\n\t\t\t\t\t\t\t: undefined,\n\t\t\t}),\n\n\t\tgetById: (id) => getMember.execute({ id: memberId(id) }),\n\n\t\tgetByEmail: (email) => getMemberByEmail.execute({ email: new UniversityEmail(email) }),\n\n\t\tgetByDiscordId: (id) => getMemberByDiscordId.execute({ discordId: discordId(id) }),\n\n\t\tlist: () => getMemberList.execute({} as Record<string, never>),\n\n\t\tlistMembersWithDiscordAccounts: () =>\n\t\t\tlistMembersWithDiscord.execute({} as Record<string, never>),\n\n\t\tconnectDiscordAccount: (input) =>\n\t\t\tconnectDiscordAccountUC.execute({\n\t\t\t\tmemberId: memberId(input.memberId),\n\t\t\t\tdiscordAccountId: discordId(input.discordAccountId),\n\t\t\t\tdiscordNickName: input.discordNickName,\n\t\t\t}),\n\n\t\tchangeDiscordNickName: (input) =>\n\t\t\tchangeDiscordNickNameUC.execute({\n\t\t\t\tdiscordAccountId: discordId(input.discordAccountId),\n\t\t\t\tdiscordNickName: input.discordNickName,\n\t\t\t}),\n\t};\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAwEA,SAAgB,oBAAoB,MAAyC;CAC5E,MAAM,aAAa,MAAM,oBAAoB,IAAI,yBAAyB;CAC1E,MAAM,cAAc,MAAM,4BAA4B,IAAI,iCAAiC;CAE3F,MAAM,iBAAiB,IAAI,sBAAsB,WAAW;CAC5D,MAAM,eAAe,IAAI,oBAAoB,WAAW;CACxD,MAAM,YAAY,IAAI,iBAAiB,WAAW;CAClD,MAAM,mBAAmB,IAAI,wBAAwB,WAAW;CAChE,MAAM,uBAAuB,IAAI,4BAA4B,aAAa,WAAW;CACrF,MAAM,gBAAgB,IAAI,qBAAqB,WAAW;CAC1D,MAAM,yBAAyB,IAAI,sCAAsC,YAAY,YAAY;CACjG,MAAM,0BAA0B,IAAI,6BAA6B,YAAY,YAAY;CACzF,MAAM,0BAA0B,IAAI,6BAA6B,YAAY;AAE7E,QAAO;EACN,WAAW,UACV,eAAe,QAAQ;GACtB,MAAM,MAAM;GACZ,WAAW,UAAU,WAAW,MAAM,UAAU;GAChD,OAAO,IAAI,gBAAgB,MAAM,MAAM;GACvC,eACC,MAAM,kBAAkB,KAAA,IACrB,SAAS,IAAI,MAAM,MAAM,cAAc,CAAC,GACxC,aAAa;GACjB,aAAa,MAAM;GACnB,CAAC;EAEH,SAAS,UACR,aAAa,QAAQ;GACpB,UAAU,SAAS,MAAM,SAAS;GAClC,MAAM,MAAM;GACZ,WAAW,MAAM,YAAY,UAAU,WAAW,MAAM,UAAU,GAAG,KAAA;GACrE,eACC,MAAM,kBAAkB,OACrB,aAAa,GACb,MAAM,kBAAkB,KAAA,IACvB,SAAS,IAAI,MAAM,MAAM,cAAc,CAAC,GACxC,KAAA;GACL,CAAC;EAEH,UAAU,OAAO,UAAU,QAAQ,EAAE,IAAI,SAAS,GAAG,EAAE,CAAC;EAExD,aAAa,UAAU,iBAAiB,QAAQ,EAAE,OAAO,IAAI,gBAAgB,MAAM,EAAE,CAAC;EAEtF,iBAAiB,OAAO,qBAAqB,QAAQ,EAAE,WAAW,UAAU,GAAG,EAAE,CAAC;EAElF,YAAY,cAAc,QAAQ,EAAE,CAA0B;EAE9D,sCACC,uBAAuB,QAAQ,EAAE,CAA0B;EAE5D,wBAAwB,UACvB,wBAAwB,QAAQ;GAC/B,UAAU,SAAS,MAAM,SAAS;GAClC,kBAAkB,UAAU,MAAM,iBAAiB;GACnD,iBAAiB,MAAM;GACvB,CAAC;EAEH,wBAAwB,UACvB,wBAAwB,QAAQ;GAC/B,kBAAkB,UAAU,MAAM,iBAAiB;GACnD,iBAAiB,MAAM;GACvB,CAAC;EACH"}
1
+ {"version":3,"file":"memberService.mjs","names":[],"sources":["../../src/executable/memberService.ts"],"sourcesContent":["import {\n\tChangeDiscordNickNameUseCase,\n\tConnectDiscordAccountUseCase,\n\tGetMemberByDiscordIdUseCase,\n\tGetMemberByEmailUseCase,\n\tGetMemberListUseCase,\n\tGetMemberUseCase,\n\tGetMemberWithDiscordAccountsUseCase,\n\tListMembersWithDiscordAccountsUseCase,\n\ttype MemberWithDiscordAccounts,\n\tRegisterMemberUseCase,\n\tUpdateMemberUseCase,\n} from \"#application\";\nimport { discordId } from \"#domain/aggregates/discord-account/DiscordId\";\nimport type { DiscordAccountRepository } from \"#domain/aggregates/discord-account/DiscordAccountRepository\";\nimport type { DiscordAccount } from \"#domain/aggregates/discord-account/DiscordAccount\";\nimport { Email } from \"#domain/aggregates/member/Email\";\nimport type { Member } from \"#domain/aggregates/member/Member\";\nimport { memberId } from \"#domain/aggregates/member/MemberId\";\nimport type { MemberRepository } from \"#domain/aggregates/member/MemberRepository\";\nimport { UniversityEmail } from \"#domain/aggregates/member/UniversityEmail\";\nimport type { CompleteAffiliation } from \"#domain/shared/affiliation/Affiliation\";\nimport { recorded, notRecorded } from \"#domain/shared/Recorded\";\nimport { StudentId } from \"#domain/shared/StudentId\";\nimport { DrizzleDiscordAccountRepository, DrizzleMemberRepository } from \"#infrastructure\";\n\nexport type { MemberWithDiscordAccounts } from \"#application\";\n\nexport type MemberService = {\n\tregister(input: {\n\t\tname: string;\n\t\tstudentId: string;\n\t\temail: string;\n\t\tpersonalEmail?: string;\n\t\taffiliation: CompleteAffiliation;\n\t}): Promise<{ member: Member }>;\n\n\tupdate(input: {\n\t\tmemberId: string;\n\t\tname?: string;\n\t\tstudentId?: string;\n\t\tpersonalEmail?: string | null;\n\t}): Promise<{ member: Member }>;\n\n\tgetById(id: string): Promise<{ member: Member | null }>;\n\n\tgetByEmail(email: string): Promise<{ member: Member | null }>;\n\n\tgetByDiscordId(discordId: string): Promise<{ member: Member | null }>;\n\n\tlist(): Promise<{ members: Member[] }>;\n\n\tgetMemberWithDiscordAccounts(id: string): Promise<{\n\t\tmember: MemberWithDiscordAccounts | null;\n\t}>;\n\n\tlistMembersWithDiscordAccounts(): Promise<{\n\t\tentries: MemberWithDiscordAccounts[];\n\t}>;\n\n\tconnectDiscordAccount(input: {\n\t\tmemberId: string;\n\t\tdiscordAccountId: string;\n\t\tdiscordNickName?: string;\n\t}): Promise<{ discordAccount: DiscordAccount }>;\n\n\tchangeDiscordNickName(input: {\n\t\tdiscordAccountId: string;\n\t\tdiscordNickName: string;\n\t}): Promise<{ discordAccount: DiscordAccount }>;\n};\n\nexport type MemberServiceDeps = {\n\tmemberRepository?: MemberRepository;\n\tdiscordAccountRepository?: DiscordAccountRepository;\n};\n\nexport function createMemberService(deps?: MemberServiceDeps): MemberService {\n\tconst memberRepo = deps?.memberRepository ?? new DrizzleMemberRepository();\n\tconst discordRepo = deps?.discordAccountRepository ?? new DrizzleDiscordAccountRepository();\n\n\tconst registerMember = new RegisterMemberUseCase(memberRepo);\n\tconst updateMember = new UpdateMemberUseCase(memberRepo);\n\tconst getMember = new GetMemberUseCase(memberRepo);\n\tconst getMemberByEmail = new GetMemberByEmailUseCase(memberRepo);\n\tconst getMemberByDiscordId = new GetMemberByDiscordIdUseCase(discordRepo, memberRepo);\n\tconst getMemberList = new GetMemberListUseCase(memberRepo);\n\tconst getMemberWithDiscord = new GetMemberWithDiscordAccountsUseCase(memberRepo, discordRepo);\n\tconst listMembersWithDiscord = new ListMembersWithDiscordAccountsUseCase(memberRepo, discordRepo);\n\tconst connectDiscordAccountUC = new ConnectDiscordAccountUseCase(memberRepo, discordRepo);\n\tconst changeDiscordNickNameUC = new ChangeDiscordNickNameUseCase(discordRepo);\n\n\treturn {\n\t\tregister: (input) =>\n\t\t\tregisterMember.execute({\n\t\t\t\tname: input.name,\n\t\t\t\tstudentId: StudentId.fromString(input.studentId),\n\t\t\t\temail: new UniversityEmail(input.email),\n\t\t\t\tpersonalEmail:\n\t\t\t\t\tinput.personalEmail !== undefined\n\t\t\t\t\t\t? recorded(new Email(input.personalEmail))\n\t\t\t\t\t\t: notRecorded(),\n\t\t\t\taffiliation: input.affiliation,\n\t\t\t}),\n\n\t\tupdate: (input) =>\n\t\t\tupdateMember.execute({\n\t\t\t\tmemberId: memberId(input.memberId),\n\t\t\t\tname: input.name,\n\t\t\t\tstudentId: input.studentId ? StudentId.fromString(input.studentId) : undefined,\n\t\t\t\tpersonalEmail:\n\t\t\t\t\tinput.personalEmail === null\n\t\t\t\t\t\t? notRecorded()\n\t\t\t\t\t\t: input.personalEmail !== undefined\n\t\t\t\t\t\t\t? recorded(new Email(input.personalEmail))\n\t\t\t\t\t\t\t: undefined,\n\t\t\t}),\n\n\t\tgetById: (id) => getMember.execute({ id: memberId(id) }),\n\n\t\tgetByEmail: (email) => getMemberByEmail.execute({ email: new UniversityEmail(email) }),\n\n\t\tgetByDiscordId: (id) => getMemberByDiscordId.execute({ discordId: discordId(id) }),\n\n\t\tlist: () => getMemberList.execute({} as Record<string, never>),\n\n\t\tgetMemberWithDiscordAccounts: (id) => getMemberWithDiscord.execute({ id: memberId(id) }),\n\n\t\tlistMembersWithDiscordAccounts: () =>\n\t\t\tlistMembersWithDiscord.execute({} as Record<string, never>),\n\n\t\tconnectDiscordAccount: (input) =>\n\t\t\tconnectDiscordAccountUC.execute({\n\t\t\t\tmemberId: memberId(input.memberId),\n\t\t\t\tdiscordAccountId: discordId(input.discordAccountId),\n\t\t\t\tdiscordNickName: input.discordNickName,\n\t\t\t}),\n\n\t\tchangeDiscordNickName: (input) =>\n\t\t\tchangeDiscordNickNameUC.execute({\n\t\t\t\tdiscordAccountId: discordId(input.discordAccountId),\n\t\t\t\tdiscordNickName: input.discordNickName,\n\t\t\t}),\n\t};\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA6EA,SAAgB,oBAAoB,MAAyC;CAC5E,MAAM,aAAa,MAAM,oBAAoB,IAAI,yBAAyB;CAC1E,MAAM,cAAc,MAAM,4BAA4B,IAAI,iCAAiC;CAE3F,MAAM,iBAAiB,IAAI,sBAAsB,WAAW;CAC5D,MAAM,eAAe,IAAI,oBAAoB,WAAW;CACxD,MAAM,YAAY,IAAI,iBAAiB,WAAW;CAClD,MAAM,mBAAmB,IAAI,wBAAwB,WAAW;CAChE,MAAM,uBAAuB,IAAI,4BAA4B,aAAa,WAAW;CACrF,MAAM,gBAAgB,IAAI,qBAAqB,WAAW;CAC1D,MAAM,uBAAuB,IAAI,oCAAoC,YAAY,YAAY;CAC7F,MAAM,yBAAyB,IAAI,sCAAsC,YAAY,YAAY;CACjG,MAAM,0BAA0B,IAAI,6BAA6B,YAAY,YAAY;CACzF,MAAM,0BAA0B,IAAI,6BAA6B,YAAY;AAE7E,QAAO;EACN,WAAW,UACV,eAAe,QAAQ;GACtB,MAAM,MAAM;GACZ,WAAW,UAAU,WAAW,MAAM,UAAU;GAChD,OAAO,IAAI,gBAAgB,MAAM,MAAM;GACvC,eACC,MAAM,kBAAkB,KAAA,IACrB,SAAS,IAAI,MAAM,MAAM,cAAc,CAAC,GACxC,aAAa;GACjB,aAAa,MAAM;GACnB,CAAC;EAEH,SAAS,UACR,aAAa,QAAQ;GACpB,UAAU,SAAS,MAAM,SAAS;GAClC,MAAM,MAAM;GACZ,WAAW,MAAM,YAAY,UAAU,WAAW,MAAM,UAAU,GAAG,KAAA;GACrE,eACC,MAAM,kBAAkB,OACrB,aAAa,GACb,MAAM,kBAAkB,KAAA,IACvB,SAAS,IAAI,MAAM,MAAM,cAAc,CAAC,GACxC,KAAA;GACL,CAAC;EAEH,UAAU,OAAO,UAAU,QAAQ,EAAE,IAAI,SAAS,GAAG,EAAE,CAAC;EAExD,aAAa,UAAU,iBAAiB,QAAQ,EAAE,OAAO,IAAI,gBAAgB,MAAM,EAAE,CAAC;EAEtF,iBAAiB,OAAO,qBAAqB,QAAQ,EAAE,WAAW,UAAU,GAAG,EAAE,CAAC;EAElF,YAAY,cAAc,QAAQ,EAAE,CAA0B;EAE9D,+BAA+B,OAAO,qBAAqB,QAAQ,EAAE,IAAI,SAAS,GAAG,EAAE,CAAC;EAExF,sCACC,uBAAuB,QAAQ,EAAE,CAA0B;EAE5D,wBAAwB,UACvB,wBAAwB,QAAQ;GAC/B,UAAU,SAAS,MAAM,SAAS;GAClC,kBAAkB,UAAU,MAAM,iBAAiB;GACnD,iBAAiB,MAAM;GACvB,CAAC;EAEH,wBAAwB,UACvB,wBAAwB,QAAQ;GAC/B,kBAAkB,UAAU,MAAM,iBAAiB;GACnD,iBAAiB,MAAM;GACvB,CAAC;EACH"}
package/dist/index.d.cts CHANGED
@@ -37,7 +37,7 @@ import { UniversityEmail } from "./domain/aggregates/member/UniversityEmail.cjs"
37
37
  import { DepartmentTransferred, FacultyTransferred, InternallyAdvanced, MEMBER_EVENT_NAMES, MajorTransferred, MemberConfirmed, MemberDomainEvent, MemberRegistered, MemberRemoved, MemberReregistered, MemberUnconfirmed, NameChanged, PersonalEmailChanged, RemovalReason, StudentIdChanged } from "./domain/aggregates/member/MemberEvent.cjs";
38
38
  import { ActiveMember, FormerMember, Member, UnconfirmedMember } from "./domain/aggregates/member/Member.cjs";
39
39
  import { MemberRepository } from "./domain/aggregates/member/MemberRepository.cjs";
40
- import { MemberWithDiscordAccounts } from "./application/usecase/member/ListMembersWithDiscordAccounts.cjs";
40
+ import { MemberWithDiscordAccounts } from "./application/dto.cjs";
41
41
  import { MemberUseCases, createMemberUseCases } from "./executable/member.cjs";
42
42
  import { EventUseCases, createEventUseCases } from "./executable/event.cjs";
43
43
  import { KarteUseCases, createKarteUseCases } from "./executable/karte.cjs";
package/dist/index.d.mts CHANGED
@@ -37,7 +37,7 @@ import { UniversityEmail } from "./domain/aggregates/member/UniversityEmail.mjs"
37
37
  import { DepartmentTransferred, FacultyTransferred, InternallyAdvanced, MEMBER_EVENT_NAMES, MajorTransferred, MemberConfirmed, MemberDomainEvent, MemberRegistered, MemberRemoved, MemberReregistered, MemberUnconfirmed, NameChanged, PersonalEmailChanged, RemovalReason, StudentIdChanged } from "./domain/aggregates/member/MemberEvent.mjs";
38
38
  import { ActiveMember, FormerMember, Member, UnconfirmedMember } from "./domain/aggregates/member/Member.mjs";
39
39
  import { MemberRepository } from "./domain/aggregates/member/MemberRepository.mjs";
40
- import { MemberWithDiscordAccounts } from "./application/usecase/member/ListMembersWithDiscordAccounts.mjs";
40
+ import { MemberWithDiscordAccounts } from "./application/dto.mjs";
41
41
  import { MemberUseCases, createMemberUseCases } from "./executable/member.mjs";
42
42
  import { EventUseCases, createEventUseCases } from "./executable/event.mjs";
43
43
  import { KarteUseCases, createKarteUseCases } from "./executable/karte.mjs";
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shizuoka-its/core",
3
- "version": "3.0.0-rc.2",
3
+ "version": "3.0.0-rc.4",
4
4
  "description": "ITS core library",
5
5
  "keywords": [],
6
6
  "license": "ISC",
@@ -1,9 +0,0 @@
1
- import { DiscordAccountDTO, MemberDTO } from "../../dto.cjs";
2
-
3
- //#region src/application/usecase/member/ListMembersWithDiscordAccounts.d.ts
4
- type MemberWithDiscordAccounts = MemberDTO & {
5
- discordAccounts: DiscordAccountDTO[];
6
- };
7
- //#endregion
8
- export { MemberWithDiscordAccounts };
9
- //# sourceMappingURL=ListMembersWithDiscordAccounts.d.cts.map
@@ -1,9 +0,0 @@
1
- import { DiscordAccountDTO, MemberDTO } from "../../dto.mjs";
2
-
3
- //#region src/application/usecase/member/ListMembersWithDiscordAccounts.d.ts
4
- type MemberWithDiscordAccounts = MemberDTO & {
5
- discordAccounts: DiscordAccountDTO[];
6
- };
7
- //#endregion
8
- export { MemberWithDiscordAccounts };
9
- //# sourceMappingURL=ListMembersWithDiscordAccounts.d.mts.map