From a81d0191544a43f2cc709551e4d2ff88599ed105 Mon Sep 17 00:00:00 2001 From: KinjiKawaguchi Date: Wed, 11 Mar 2026 19:37:16 +0900 Subject: [PATCH 1/2] =?UTF-8?q?refactor:=20=E5=80=A4=E3=82=AA=E3=83=96?= =?UTF-8?q?=E3=82=B8=E3=82=A7=E3=82=AF=E3=83=88=E3=82=92=E6=89=80=E5=B1=9E?= =?UTF-8?q?=E3=81=99=E3=82=8B=E9=9B=86=E7=B4=84=E3=83=87=E3=82=A3=E3=83=AC?= =?UTF-8?q?=E3=82=AF=E3=83=88=E3=83=AA=E3=81=AB=E7=A7=BB=E5=8B=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit value-objects/ を廃止し、各値オブジェクトを使用元の集約内に配置。 ValueObject基底クラスはdomain/base/に移動。 型別ではなくドメイン別のディレクトリ構成に統一する。 Co-Authored-By: Claude Opus 4.6 --- src/domain/aggregates/event/Event.ts | 3 ++- src/domain/aggregates/event/Exhibit.ts | 3 ++- src/domain/aggregates/event/LightningTalk.ts | 3 ++- .../event}/LightningTalkDuration.ts | 2 +- src/domain/{value-objects => aggregates/event}/Url.ts | 2 +- src/domain/aggregates/event/index.ts | 2 ++ .../{value-objects => aggregates/member}/Departments.ts | 2 +- src/domain/{value-objects => aggregates/member}/Email.ts | 2 +- src/domain/aggregates/member/Member.ts | 4 +++- .../{value-objects => aggregates/member}/UniversityEmail.ts | 0 src/domain/aggregates/member/index.ts | 3 +++ src/domain/{value-objects => base}/ValueObject.ts | 0 src/domain/base/index.ts | 1 + src/domain/index.ts | 2 +- src/domain/value-objects/index.ts | 6 ------ 15 files changed, 20 insertions(+), 15 deletions(-) rename src/domain/{value-objects => aggregates/event}/LightningTalkDuration.ts (83%) rename src/domain/{value-objects => aggregates/event}/Url.ts (89%) rename src/domain/{value-objects => aggregates/member}/Departments.ts (91%) rename src/domain/{value-objects => aggregates/member}/Email.ts (85%) rename src/domain/{value-objects => aggregates/member}/UniversityEmail.ts (100%) rename src/domain/{value-objects => base}/ValueObject.ts (100%) create mode 100644 src/domain/base/index.ts delete mode 100644 src/domain/value-objects/index.ts diff --git a/src/domain/aggregates/event/Event.ts b/src/domain/aggregates/event/Event.ts index f455029..c022a19 100644 --- a/src/domain/aggregates/event/Event.ts +++ b/src/domain/aggregates/event/Event.ts @@ -3,7 +3,8 @@ import { ExhibitHasMemberException, ExhibitNotFoundException, } from "#domain/exceptions"; -import type { LightningTalkDuration, Url } from "#domain/value-objects"; +import type { LightningTalkDuration } from "./LightningTalkDuration"; +import type { Url } from "./Url"; import type { Exhibit } from "./Exhibit"; export class Event { diff --git a/src/domain/aggregates/event/Exhibit.ts b/src/domain/aggregates/event/Exhibit.ts index 48570ad..2b5ffd0 100644 --- a/src/domain/aggregates/event/Exhibit.ts +++ b/src/domain/aggregates/event/Exhibit.ts @@ -2,7 +2,8 @@ import { LightningTalkExhibitIdMismatchException, LightningTalkNotFoundException, } from "#domain/exceptions"; -import type { LightningTalkDuration, Url } from "#domain/value-objects"; +import type { LightningTalkDuration } from "./LightningTalkDuration"; +import type { Url } from "./Url"; import type { LightningTalk } from "./LightningTalk"; export class Exhibit { private lightningTalk?: LightningTalk; diff --git a/src/domain/aggregates/event/LightningTalk.ts b/src/domain/aggregates/event/LightningTalk.ts index c5b3a16..6245aa1 100644 --- a/src/domain/aggregates/event/LightningTalk.ts +++ b/src/domain/aggregates/event/LightningTalk.ts @@ -1,4 +1,5 @@ -import type { LightningTalkDuration, Url } from "#domain/value-objects"; +import type { LightningTalkDuration } from "./LightningTalkDuration"; +import type { Url } from "./Url"; export class LightningTalk { constructor( diff --git a/src/domain/value-objects/LightningTalkDuration.ts b/src/domain/aggregates/event/LightningTalkDuration.ts similarity index 83% rename from src/domain/value-objects/LightningTalkDuration.ts rename to src/domain/aggregates/event/LightningTalkDuration.ts index a4bc60f..aec7c81 100644 --- a/src/domain/value-objects/LightningTalkDuration.ts +++ b/src/domain/aggregates/event/LightningTalkDuration.ts @@ -1,5 +1,5 @@ import { InvalidLightningTalkDurationException } from "#domain/exceptions"; -import { ValueObject } from "./ValueObject"; +import { ValueObject } from "#domain/base/ValueObject"; export class LightningTalkDuration extends ValueObject { protected validate(): void { diff --git a/src/domain/value-objects/Url.ts b/src/domain/aggregates/event/Url.ts similarity index 89% rename from src/domain/value-objects/Url.ts rename to src/domain/aggregates/event/Url.ts index 379c279..5573a19 100644 --- a/src/domain/value-objects/Url.ts +++ b/src/domain/aggregates/event/Url.ts @@ -2,7 +2,7 @@ import { InvalidUrlException, InvalidUrlProtocolException, } from "#domain/exceptions"; -import { ValueObject } from "./ValueObject"; +import { ValueObject } from "#domain/base/ValueObject"; export class Url extends ValueObject { protected validate(): void { diff --git a/src/domain/aggregates/event/index.ts b/src/domain/aggregates/event/index.ts index 496d586..670b15a 100644 --- a/src/domain/aggregates/event/index.ts +++ b/src/domain/aggregates/event/index.ts @@ -2,3 +2,5 @@ export * from "./Event"; export * from "./EventRepository"; export * from "./Exhibit"; export * from "./LightningTalk"; +export * from "./LightningTalkDuration"; +export * from "./Url"; diff --git a/src/domain/value-objects/Departments.ts b/src/domain/aggregates/member/Departments.ts similarity index 91% rename from src/domain/value-objects/Departments.ts rename to src/domain/aggregates/member/Departments.ts index 1ace451..4bc663d 100644 --- a/src/domain/value-objects/Departments.ts +++ b/src/domain/aggregates/member/Departments.ts @@ -1,5 +1,5 @@ import { InvalidDepartmentException } from "#domain/exceptions"; -import { ValueObject } from "./ValueObject"; +import { ValueObject } from "#domain/base/ValueObject"; type AllowedDepartment = "CS" | "BI" | "IA" | "GRADUATE" | "ALUMNI" | "OTHERS"; diff --git a/src/domain/value-objects/Email.ts b/src/domain/aggregates/member/Email.ts similarity index 85% rename from src/domain/value-objects/Email.ts rename to src/domain/aggregates/member/Email.ts index 0bc3a69..f26d2e1 100644 --- a/src/domain/value-objects/Email.ts +++ b/src/domain/aggregates/member/Email.ts @@ -1,5 +1,5 @@ import { InvalidEmailFormatException } from "#domain/exceptions"; -import { ValueObject } from "./ValueObject"; +import { ValueObject } from "#domain/base/ValueObject"; export class Email extends ValueObject { protected validate(): void { diff --git a/src/domain/aggregates/member/Member.ts b/src/domain/aggregates/member/Member.ts index ed4e6d4..ac728b1 100644 --- a/src/domain/aggregates/member/Member.ts +++ b/src/domain/aggregates/member/Member.ts @@ -2,7 +2,9 @@ import { DiscordAccountAlreadyConnectedException, DiscordAccountNotConnectedException, } from "#domain/exceptions"; -import type { Department, Email, UniversityEmail } from "#domain/value-objects"; +import type { Department } from "./Departments"; +import type { Email } from "./Email"; +import type { UniversityEmail } from "./UniversityEmail"; import type { DiscordAccount } from "./DiscordAccount"; export class Member { diff --git a/src/domain/value-objects/UniversityEmail.ts b/src/domain/aggregates/member/UniversityEmail.ts similarity index 100% rename from src/domain/value-objects/UniversityEmail.ts rename to src/domain/aggregates/member/UniversityEmail.ts diff --git a/src/domain/aggregates/member/index.ts b/src/domain/aggregates/member/index.ts index da8da1c..313d0e9 100644 --- a/src/domain/aggregates/member/index.ts +++ b/src/domain/aggregates/member/index.ts @@ -1,3 +1,6 @@ export * from "./Member"; export * from "./MemberRepository"; export * from "./DiscordAccount"; +export * from "./Departments"; +export * from "./Email"; +export * from "./UniversityEmail"; diff --git a/src/domain/value-objects/ValueObject.ts b/src/domain/base/ValueObject.ts similarity index 100% rename from src/domain/value-objects/ValueObject.ts rename to src/domain/base/ValueObject.ts diff --git a/src/domain/base/index.ts b/src/domain/base/index.ts new file mode 100644 index 0000000..1bb7a73 --- /dev/null +++ b/src/domain/base/index.ts @@ -0,0 +1 @@ +export * from "./ValueObject"; diff --git a/src/domain/index.ts b/src/domain/index.ts index edb2e8c..569c894 100644 --- a/src/domain/index.ts +++ b/src/domain/index.ts @@ -1,3 +1,3 @@ -export * from "./value-objects"; +export * from "./base"; export * from "./exceptions"; export * from "./aggregates"; diff --git a/src/domain/value-objects/index.ts b/src/domain/value-objects/index.ts deleted file mode 100644 index 82b73d1..0000000 --- a/src/domain/value-objects/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from "./Departments"; -export * from "./Email"; -export * from "./LightningTalkDuration"; -export * from "./UniversityEmail"; -export * from "./Url"; -export * from "./ValueObject"; From aaf7f37a5678ffc5da032cc834c179328105ef27 Mon Sep 17 00:00:00 2001 From: KinjiKawaguchi Date: Wed, 11 Mar 2026 20:00:00 +0900 Subject: [PATCH 2/2] =?UTF-8?q?style:=20Biome=E3=81=AEimport=E9=A0=86?= =?UTF-8?q?=E5=BA=8F=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 --- src/domain/aggregates/event/Event.ts | 2 +- src/domain/aggregates/event/Exhibit.ts | 2 +- src/domain/aggregates/event/LightningTalkDuration.ts | 2 +- src/domain/aggregates/event/Url.ts | 2 +- src/domain/aggregates/member/Departments.ts | 2 +- src/domain/aggregates/member/Email.ts | 2 +- src/domain/aggregates/member/Member.ts | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/domain/aggregates/event/Event.ts b/src/domain/aggregates/event/Event.ts index c022a19..f0cc4ff 100644 --- a/src/domain/aggregates/event/Event.ts +++ b/src/domain/aggregates/event/Event.ts @@ -3,9 +3,9 @@ import { ExhibitHasMemberException, ExhibitNotFoundException, } from "#domain/exceptions"; +import type { Exhibit } from "./Exhibit"; import type { LightningTalkDuration } from "./LightningTalkDuration"; import type { Url } from "./Url"; -import type { Exhibit } from "./Exhibit"; export class Event { private exhibits: Exhibit[] = []; diff --git a/src/domain/aggregates/event/Exhibit.ts b/src/domain/aggregates/event/Exhibit.ts index 2b5ffd0..b5b965a 100644 --- a/src/domain/aggregates/event/Exhibit.ts +++ b/src/domain/aggregates/event/Exhibit.ts @@ -2,9 +2,9 @@ import { LightningTalkExhibitIdMismatchException, LightningTalkNotFoundException, } from "#domain/exceptions"; +import type { LightningTalk } from "./LightningTalk"; import type { LightningTalkDuration } from "./LightningTalkDuration"; import type { Url } from "./Url"; -import type { LightningTalk } from "./LightningTalk"; export class Exhibit { private lightningTalk?: LightningTalk; private memberIds: Set = new Set(); diff --git a/src/domain/aggregates/event/LightningTalkDuration.ts b/src/domain/aggregates/event/LightningTalkDuration.ts index aec7c81..063cb13 100644 --- a/src/domain/aggregates/event/LightningTalkDuration.ts +++ b/src/domain/aggregates/event/LightningTalkDuration.ts @@ -1,5 +1,5 @@ -import { InvalidLightningTalkDurationException } from "#domain/exceptions"; import { ValueObject } from "#domain/base/ValueObject"; +import { InvalidLightningTalkDurationException } from "#domain/exceptions"; export class LightningTalkDuration extends ValueObject { protected validate(): void { diff --git a/src/domain/aggregates/event/Url.ts b/src/domain/aggregates/event/Url.ts index 5573a19..d9eda6a 100644 --- a/src/domain/aggregates/event/Url.ts +++ b/src/domain/aggregates/event/Url.ts @@ -1,8 +1,8 @@ +import { ValueObject } from "#domain/base/ValueObject"; import { InvalidUrlException, InvalidUrlProtocolException, } from "#domain/exceptions"; -import { ValueObject } from "#domain/base/ValueObject"; export class Url extends ValueObject { protected validate(): void { diff --git a/src/domain/aggregates/member/Departments.ts b/src/domain/aggregates/member/Departments.ts index 4bc663d..e3aede6 100644 --- a/src/domain/aggregates/member/Departments.ts +++ b/src/domain/aggregates/member/Departments.ts @@ -1,5 +1,5 @@ -import { InvalidDepartmentException } from "#domain/exceptions"; import { ValueObject } from "#domain/base/ValueObject"; +import { InvalidDepartmentException } from "#domain/exceptions"; type AllowedDepartment = "CS" | "BI" | "IA" | "GRADUATE" | "ALUMNI" | "OTHERS"; diff --git a/src/domain/aggregates/member/Email.ts b/src/domain/aggregates/member/Email.ts index f26d2e1..812461b 100644 --- a/src/domain/aggregates/member/Email.ts +++ b/src/domain/aggregates/member/Email.ts @@ -1,5 +1,5 @@ -import { InvalidEmailFormatException } from "#domain/exceptions"; import { ValueObject } from "#domain/base/ValueObject"; +import { InvalidEmailFormatException } from "#domain/exceptions"; export class Email extends ValueObject { protected validate(): void { diff --git a/src/domain/aggregates/member/Member.ts b/src/domain/aggregates/member/Member.ts index ac728b1..27329ad 100644 --- a/src/domain/aggregates/member/Member.ts +++ b/src/domain/aggregates/member/Member.ts @@ -3,9 +3,9 @@ import { DiscordAccountNotConnectedException, } from "#domain/exceptions"; import type { Department } from "./Departments"; +import type { DiscordAccount } from "./DiscordAccount"; import type { Email } from "./Email"; import type { UniversityEmail } from "./UniversityEmail"; -import type { DiscordAccount } from "./DiscordAccount"; export class Member { private discordAccounts: DiscordAccount[] = [];