@shizuoka-its/core 2.1.0 → 2.1.1
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.
- package/README.md +13 -19
- package/dist/index.cjs +1914 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +754 -0
- package/dist/index.d.ts +754 -2
- package/dist/index.js +1873 -16
- package/dist/index.js.map +1 -0
- package/package.json +25 -14
- package/dist/application/exceptions/ApplicationExceptions.d.ts +0 -24
- package/dist/application/exceptions/ApplicationExceptions.js +0 -66
- package/dist/application/exceptions/index.d.ts +0 -1
- package/dist/application/exceptions/index.js +0 -17
- package/dist/application/index.d.ts +0 -4
- package/dist/application/index.js +0 -20
- package/dist/application/usecase/base.d.ts +0 -8
- package/dist/application/usecase/base.js +0 -11
- package/dist/application/usecase/event/AddExhibitToEvent.d.ts +0 -23
- package/dist/application/usecase/event/AddExhibitToEvent.js +0 -27
- package/dist/application/usecase/event/ChangeExhibitDescription.d.ts +0 -18
- package/dist/application/usecase/event/ChangeExhibitDescription.js +0 -24
- package/dist/application/usecase/event/ChangeExhibitMarkdownContent.d.ts +0 -18
- package/dist/application/usecase/event/ChangeExhibitMarkdownContent.js +0 -24
- package/dist/application/usecase/event/ChangeExhibitName.d.ts +0 -18
- package/dist/application/usecase/event/ChangeExhibitName.js +0 -24
- package/dist/application/usecase/event/ChangeExhibitUrl.d.ts +0 -18
- package/dist/application/usecase/event/ChangeExhibitUrl.js +0 -24
- package/dist/application/usecase/event/ChangeLightningTalkDuration.d.ts +0 -18
- package/dist/application/usecase/event/ChangeLightningTalkDuration.js +0 -24
- package/dist/application/usecase/event/ChangeLightningTalkSlideUrl.d.ts +0 -18
- package/dist/application/usecase/event/ChangeLightningTalkSlideUrl.js +0 -24
- package/dist/application/usecase/event/ChangeLightningTalkStartTime.d.ts +0 -18
- package/dist/application/usecase/event/ChangeLightningTalkStartTime.js +0 -24
- package/dist/application/usecase/event/CreateEvent.d.ts +0 -18
- package/dist/application/usecase/event/CreateEvent.js +0 -23
- package/dist/application/usecase/event/DeleteEvent.d.ts +0 -16
- package/dist/application/usecase/event/DeleteEvent.js +0 -23
- package/dist/application/usecase/event/GetEvent.d.ts +0 -16
- package/dist/application/usecase/event/GetEvent.js +0 -18
- package/dist/application/usecase/event/GetEventList.d.ts +0 -11
- package/dist/application/usecase/event/GetEventList.js +0 -15
- package/dist/application/usecase/event/RemoveExhibitFromEvent.d.ts +0 -17
- package/dist/application/usecase/event/RemoveExhibitFromEvent.js +0 -24
- package/dist/application/usecase/event/UpdateEvent.d.ts +0 -15
- package/dist/application/usecase/event/UpdateEvent.js +0 -26
- package/dist/application/usecase/event/index.d.ts +0 -14
- package/dist/application/usecase/event/index.js +0 -30
- package/dist/application/usecase/eventParticipation/GetEventsByMember.d.ts +0 -13
- package/dist/application/usecase/eventParticipation/GetEventsByMember.js +0 -15
- package/dist/application/usecase/eventParticipation/GetExhibitsByMember.d.ts +0 -13
- package/dist/application/usecase/eventParticipation/GetExhibitsByMember.js +0 -23
- package/dist/application/usecase/eventParticipation/GetMembersByEvent.d.ts +0 -14
- package/dist/application/usecase/eventParticipation/GetMembersByEvent.js +0 -23
- package/dist/application/usecase/eventParticipation/GetMembersByExhibit.d.ts +0 -14
- package/dist/application/usecase/eventParticipation/GetMembersByExhibit.js +0 -24
- package/dist/application/usecase/eventParticipation/RegisterMemberToEvent.d.ts +0 -15
- package/dist/application/usecase/eventParticipation/RegisterMemberToEvent.js +0 -26
- package/dist/application/usecase/eventParticipation/RegisterMemberToExhibit.d.ts +0 -15
- package/dist/application/usecase/eventParticipation/RegisterMemberToExhibit.js +0 -26
- package/dist/application/usecase/eventParticipation/RemoveMemberFromEvent.d.ts +0 -15
- package/dist/application/usecase/eventParticipation/RemoveMemberFromEvent.js +0 -22
- package/dist/application/usecase/eventParticipation/RemoveMemberFromExhibit.d.ts +0 -15
- package/dist/application/usecase/eventParticipation/RemoveMemberFromExhibit.js +0 -22
- package/dist/application/usecase/eventParticipation/index.d.ts +0 -8
- package/dist/application/usecase/eventParticipation/index.js +0 -25
- package/dist/application/usecase/index.d.ts +0 -4
- package/dist/application/usecase/index.js +0 -20
- package/dist/application/usecase/member/ChangeDiscordNickName.d.ts +0 -14
- package/dist/application/usecase/member/ChangeDiscordNickName.js +0 -25
- package/dist/application/usecase/member/ConnectDiscordAccount.d.ts +0 -15
- package/dist/application/usecase/member/ConnectDiscordAccount.js +0 -24
- package/dist/application/usecase/member/GetMember.d.ts +0 -13
- package/dist/application/usecase/member/GetMember.js +0 -15
- package/dist/application/usecase/member/GetMemberByDiscordId.d.ts +0 -13
- package/dist/application/usecase/member/GetMemberByDiscordId.js +0 -15
- package/dist/application/usecase/member/GetMemberByEmail.d.ts +0 -13
- package/dist/application/usecase/member/GetMemberByEmail.js +0 -15
- package/dist/application/usecase/member/GetMemberList.d.ts +0 -11
- package/dist/application/usecase/member/GetMemberList.js +0 -15
- package/dist/application/usecase/member/RegisterMember.d.ts +0 -21
- package/dist/application/usecase/member/RegisterMember.js +0 -31
- package/dist/application/usecase/member/UpdateMember.d.ts +0 -20
- package/dist/application/usecase/member/UpdateMember.js +0 -40
- package/dist/application/usecase/member/index.d.ts +0 -8
- package/dist/application/usecase/member/index.js +0 -24
- package/dist/domain/aggregates/event/Event.d.ts +0 -49
- package/dist/domain/aggregates/event/Event.js +0 -103
- package/dist/domain/aggregates/event/EventRepository.d.ts +0 -9
- package/dist/domain/aggregates/event/EventRepository.js +0 -2
- package/dist/domain/aggregates/event/Exhibit.d.ts +0 -42
- package/dist/domain/aggregates/event/Exhibit.js +0 -87
- package/dist/domain/aggregates/event/LightningTalk.d.ts +0 -20
- package/dist/domain/aggregates/event/LightningTalk.js +0 -39
- package/dist/domain/aggregates/event/index.d.ts +0 -4
- package/dist/domain/aggregates/event/index.js +0 -20
- package/dist/domain/aggregates/index.d.ts +0 -2
- package/dist/domain/aggregates/index.js +0 -18
- package/dist/domain/aggregates/member/DiscordAccount.d.ts +0 -15
- package/dist/domain/aggregates/member/DiscordAccount.js +0 -28
- package/dist/domain/aggregates/member/Member.d.ts +0 -43
- package/dist/domain/aggregates/member/Member.js +0 -83
- package/dist/domain/aggregates/member/MemberRepository.d.ts +0 -9
- package/dist/domain/aggregates/member/MemberRepository.js +0 -2
- package/dist/domain/aggregates/member/index.d.ts +0 -3
- package/dist/domain/aggregates/member/index.js +0 -19
- package/dist/domain/exceptions/DomainExceptions.d.ts +0 -42
- package/dist/domain/exceptions/DomainExceptions.js +0 -101
- package/dist/domain/exceptions/index.d.ts +0 -1
- package/dist/domain/exceptions/index.js +0 -17
- package/dist/domain/index.d.ts +0 -3
- package/dist/domain/index.js +0 -19
- package/dist/domain/value-objects/Departments.d.ts +0 -7
- package/dist/domain/value-objects/Departments.js +0 -22
- package/dist/domain/value-objects/Email.d.ts +0 -4
- package/dist/domain/value-objects/Email.js +0 -12
- package/dist/domain/value-objects/LightningTalkDuration.d.ts +0 -4
- package/dist/domain/value-objects/LightningTalkDuration.js +0 -11
- package/dist/domain/value-objects/UniversityEmail.d.ts +0 -4
- package/dist/domain/value-objects/UniversityEmail.js +0 -13
- package/dist/domain/value-objects/Url.d.ts +0 -4
- package/dist/domain/value-objects/Url.js +0 -19
- package/dist/domain/value-objects/ValueObject.d.ts +0 -8
- package/dist/domain/value-objects/ValueObject.js +0 -24
- package/dist/domain/value-objects/index.d.ts +0 -6
- package/dist/domain/value-objects/index.js +0 -22
- package/dist/executable/event.d.ts +0 -30
- package/dist/executable/event.js +0 -60
- package/dist/executable/index.d.ts +0 -2
- package/dist/executable/index.js +0 -18
- package/dist/executable/member.d.ts +0 -12
- package/dist/executable/member.js +0 -18
- package/dist/infrastructure/index.d.ts +0 -1
- package/dist/infrastructure/index.js +0 -17
- package/dist/infrastructure/prisma/PrismaEventRepository.d.ts +0 -23
- package/dist/infrastructure/prisma/PrismaEventRepository.js +0 -239
- package/dist/infrastructure/prisma/PrismaMemberRepository.d.ts +0 -11
- package/dist/infrastructure/prisma/PrismaMemberRepository.js +0 -99
- package/dist/infrastructure/prisma/index.d.ts +0 -2
- package/dist/infrastructure/prisma/index.js +0 -18
- package/prisma/migrations/20241107053440_init/migration.sql +0 -97
- package/prisma/migrations/20241107095139_/migration.sql +0 -14
- package/prisma/migrations/20241108213534_add_markdown_content_exhibit/migration.sql +0 -2
- package/prisma/migrations/migration_lock.toml +0 -3
- package/prisma/schema.prisma +0 -109
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PrismaEventRepository = void 0;
|
|
4
|
-
const client_1 = require("@prisma/client");
|
|
5
|
-
const domain_1 = require("../../domain");
|
|
6
|
-
const prisma = new client_1.PrismaClient();
|
|
7
|
-
class PrismaEventRepository {
|
|
8
|
-
/**
|
|
9
|
-
* Prisma の Record から ドメインの Event を構築
|
|
10
|
-
* Exhibit.createWithLightningTalk() を使用して lightningTalk を持つ Exhibit を生成
|
|
11
|
-
*/
|
|
12
|
-
toDomain(record) {
|
|
13
|
-
var _a, _b, _c, _d;
|
|
14
|
-
const event = new domain_1.Event(record.id, record.name, record.date);
|
|
15
|
-
// exhibits をドメインに変換して追加
|
|
16
|
-
for (const exhibitRecord of record.exhibits) {
|
|
17
|
-
let exhibit;
|
|
18
|
-
if (exhibitRecord.lightningTalk) {
|
|
19
|
-
const ltRecord = exhibitRecord.lightningTalk;
|
|
20
|
-
const lightningTalk = new domain_1.LightningTalk(ltRecord.exhibitId, ltRecord.startTime, new domain_1.LightningTalkDuration(ltRecord.duration), ltRecord.slideUrl ? new domain_1.Url(ltRecord.slideUrl) : undefined);
|
|
21
|
-
exhibit = domain_1.Exhibit.createWithLightningTalk(exhibitRecord.id, exhibitRecord.name, lightningTalk, (_a = exhibitRecord.description) !== null && _a !== void 0 ? _a : undefined, (_b = exhibitRecord.markdownContent) !== null && _b !== void 0 ? _b : undefined, exhibitRecord.url ? new domain_1.Url(exhibitRecord.url) : undefined);
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
exhibit = new domain_1.Exhibit(exhibitRecord.id, exhibitRecord.name, (_c = exhibitRecord.description) !== null && _c !== void 0 ? _c : undefined, (_d = exhibitRecord.markdownContent) !== null && _d !== void 0 ? _d : undefined, exhibitRecord.url ? new domain_1.Url(exhibitRecord.url) : undefined);
|
|
25
|
-
}
|
|
26
|
-
event.addExhibit(exhibit);
|
|
27
|
-
}
|
|
28
|
-
return event;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* DBへEventを保存するためのヘルパー
|
|
32
|
-
* Event, Exhibit, LightningTalk の upsert処理を行う
|
|
33
|
-
*/
|
|
34
|
-
async persistEvent(event) {
|
|
35
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
36
|
-
const snapshot = event.toSnapshot();
|
|
37
|
-
// 1) まず event を upsert
|
|
38
|
-
await prisma.event.upsert({
|
|
39
|
-
where: { id: snapshot.id },
|
|
40
|
-
update: {
|
|
41
|
-
name: snapshot.name,
|
|
42
|
-
date: snapshot.date,
|
|
43
|
-
},
|
|
44
|
-
create: {
|
|
45
|
-
id: snapshot.id,
|
|
46
|
-
name: snapshot.name,
|
|
47
|
-
date: snapshot.date,
|
|
48
|
-
},
|
|
49
|
-
});
|
|
50
|
-
// 2) 既存 exhibits を削除(スナップショットに含まれないもののみ)
|
|
51
|
-
const snapshotExhibitIds = snapshot.exhibits.map((ex) => ex.id);
|
|
52
|
-
// lightningTalk を先に削除
|
|
53
|
-
await prisma.lightningTalk.deleteMany({
|
|
54
|
-
where: {
|
|
55
|
-
exhibitId: {
|
|
56
|
-
in: await this.findObsoleteExhibitIds(snapshot.id, snapshotExhibitIds),
|
|
57
|
-
},
|
|
58
|
-
},
|
|
59
|
-
});
|
|
60
|
-
// MemberExhibit(展示参加者)も先に削除
|
|
61
|
-
await prisma.memberExhibit.deleteMany({
|
|
62
|
-
where: {
|
|
63
|
-
exhibitId: {
|
|
64
|
-
in: await this.findObsoleteExhibitIds(snapshot.id, snapshotExhibitIds),
|
|
65
|
-
},
|
|
66
|
-
},
|
|
67
|
-
});
|
|
68
|
-
// exhibit 削除
|
|
69
|
-
await prisma.exhibit.deleteMany({
|
|
70
|
-
where: {
|
|
71
|
-
eventId: snapshot.id,
|
|
72
|
-
id: { notIn: snapshotExhibitIds },
|
|
73
|
-
},
|
|
74
|
-
});
|
|
75
|
-
// 3) exhibits を upsert
|
|
76
|
-
for (const ex of snapshot.exhibits) {
|
|
77
|
-
await prisma.exhibit.upsert({
|
|
78
|
-
where: { id: ex.id },
|
|
79
|
-
create: {
|
|
80
|
-
id: ex.id,
|
|
81
|
-
name: ex.name,
|
|
82
|
-
description: (_a = ex.description) !== null && _a !== void 0 ? _a : null,
|
|
83
|
-
markdownContent: (_b = ex.markdownContent) !== null && _b !== void 0 ? _b : null,
|
|
84
|
-
url: (_d = (_c = ex.url) === null || _c === void 0 ? void 0 : _c.getValue()) !== null && _d !== void 0 ? _d : null,
|
|
85
|
-
eventId: snapshot.id,
|
|
86
|
-
},
|
|
87
|
-
update: {
|
|
88
|
-
name: ex.name,
|
|
89
|
-
description: (_e = ex.description) !== null && _e !== void 0 ? _e : null,
|
|
90
|
-
markdownContent: (_f = ex.markdownContent) !== null && _f !== void 0 ? _f : null,
|
|
91
|
-
url: (_h = (_g = ex.url) === null || _g === void 0 ? void 0 : _g.getValue()) !== null && _h !== void 0 ? _h : null,
|
|
92
|
-
},
|
|
93
|
-
});
|
|
94
|
-
// LightningTalk
|
|
95
|
-
if (ex.lightningTalk) {
|
|
96
|
-
await prisma.lightningTalk.upsert({
|
|
97
|
-
where: { exhibitId: ex.id },
|
|
98
|
-
create: {
|
|
99
|
-
exhibitId: ex.id,
|
|
100
|
-
startTime: ex.lightningTalk.startTime,
|
|
101
|
-
duration: ex.lightningTalk.durationMinutes.getValue(),
|
|
102
|
-
slideUrl: (_k = (_j = ex.lightningTalk.slideUrl) === null || _j === void 0 ? void 0 : _j.getValue()) !== null && _k !== void 0 ? _k : null,
|
|
103
|
-
},
|
|
104
|
-
update: {
|
|
105
|
-
startTime: ex.lightningTalk.startTime,
|
|
106
|
-
duration: ex.lightningTalk.durationMinutes.getValue(),
|
|
107
|
-
slideUrl: (_m = (_l = ex.lightningTalk.slideUrl) === null || _l === void 0 ? void 0 : _l.getValue()) !== null && _m !== void 0 ? _m : null,
|
|
108
|
-
},
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
// 存在していたら削除
|
|
113
|
-
await prisma.lightningTalk.deleteMany({
|
|
114
|
-
where: { exhibitId: ex.id },
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
// 4) MemberEvent(イベント参加者)を同期
|
|
119
|
-
const eventMemberIds = event.getMemberIds();
|
|
120
|
-
// 古い参加者を削除
|
|
121
|
-
await prisma.memberEvent.deleteMany({
|
|
122
|
-
where: {
|
|
123
|
-
eventId: snapshot.id,
|
|
124
|
-
memberId: { notIn: eventMemberIds },
|
|
125
|
-
},
|
|
126
|
-
});
|
|
127
|
-
// 新しい参加者を登録(重複スキップ)
|
|
128
|
-
await prisma.memberEvent.createMany({
|
|
129
|
-
data: eventMemberIds.map((memberId) => ({
|
|
130
|
-
memberId,
|
|
131
|
-
eventId: snapshot.id,
|
|
132
|
-
})),
|
|
133
|
-
skipDuplicates: true,
|
|
134
|
-
});
|
|
135
|
-
// 5) MemberExhibit(展示参加者)を同期
|
|
136
|
-
for (const exhibitDomain of event.getExhibits()) {
|
|
137
|
-
const exhibitMemberIds = exhibitDomain.getMemberIds();
|
|
138
|
-
// 古い展示参加者を削除
|
|
139
|
-
await prisma.memberExhibit.deleteMany({
|
|
140
|
-
where: {
|
|
141
|
-
exhibitId: exhibitDomain.id,
|
|
142
|
-
memberId: { notIn: exhibitMemberIds },
|
|
143
|
-
},
|
|
144
|
-
});
|
|
145
|
-
// 新しい展示参加者を登録(重複スキップ)
|
|
146
|
-
await prisma.memberExhibit.createMany({
|
|
147
|
-
data: exhibitMemberIds.map((memberId) => ({
|
|
148
|
-
memberId,
|
|
149
|
-
exhibitId: exhibitDomain.id,
|
|
150
|
-
})),
|
|
151
|
-
skipDuplicates: true,
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* どの ExhibitID が消えたかを調べるヘルパー
|
|
157
|
-
*/
|
|
158
|
-
async findObsoleteExhibitIds(eventId, keptExhibitIds) {
|
|
159
|
-
// イベントに紐づく既存のExhibitIDを全て取得
|
|
160
|
-
const existingIds = await prisma.exhibit.findMany({
|
|
161
|
-
where: { eventId },
|
|
162
|
-
select: { id: true },
|
|
163
|
-
});
|
|
164
|
-
const existingIdSet = new Set(existingIds.map((r) => r.id));
|
|
165
|
-
// スナップショットに無いIDだけ抽出
|
|
166
|
-
const keptIdSet = new Set(keptExhibitIds);
|
|
167
|
-
return [...existingIdSet].filter((id) => !keptIdSet.has(id));
|
|
168
|
-
}
|
|
169
|
-
// =============== EventRepository 実装 ===============
|
|
170
|
-
async findById(id) {
|
|
171
|
-
const record = await prisma.event.findUnique({
|
|
172
|
-
where: { id },
|
|
173
|
-
include: {
|
|
174
|
-
exhibits: {
|
|
175
|
-
include: { lightningTalk: true },
|
|
176
|
-
},
|
|
177
|
-
},
|
|
178
|
-
});
|
|
179
|
-
if (!record)
|
|
180
|
-
return null;
|
|
181
|
-
return this.toDomain(record);
|
|
182
|
-
}
|
|
183
|
-
async findByParticipantMemberId(memberId) {
|
|
184
|
-
const records = await prisma.event.findMany({
|
|
185
|
-
where: {
|
|
186
|
-
members: { some: { memberId: memberId } },
|
|
187
|
-
},
|
|
188
|
-
include: {
|
|
189
|
-
exhibits: { include: { lightningTalk: true } },
|
|
190
|
-
},
|
|
191
|
-
});
|
|
192
|
-
return records.map((r) => this.toDomain(r));
|
|
193
|
-
}
|
|
194
|
-
async findByExhibitId(exhibitId) {
|
|
195
|
-
const record = await prisma.event.findFirst({
|
|
196
|
-
where: {
|
|
197
|
-
exhibits: { some: { id: exhibitId } },
|
|
198
|
-
},
|
|
199
|
-
include: {
|
|
200
|
-
exhibits: { include: { lightningTalk: true } },
|
|
201
|
-
},
|
|
202
|
-
});
|
|
203
|
-
if (!record)
|
|
204
|
-
return null;
|
|
205
|
-
return this.toDomain(record);
|
|
206
|
-
}
|
|
207
|
-
async findAll() {
|
|
208
|
-
const records = await prisma.event.findMany({
|
|
209
|
-
include: {
|
|
210
|
-
exhibits: {
|
|
211
|
-
include: { lightningTalk: true },
|
|
212
|
-
},
|
|
213
|
-
},
|
|
214
|
-
});
|
|
215
|
-
return records.map((r) => this.toDomain(r));
|
|
216
|
-
}
|
|
217
|
-
async save(event) {
|
|
218
|
-
await this.persistEvent(event);
|
|
219
|
-
}
|
|
220
|
-
async delete(eventId) {
|
|
221
|
-
// 先に lightningTalk を削除
|
|
222
|
-
const exhibitIds = await prisma.exhibit.findMany({
|
|
223
|
-
where: { eventId },
|
|
224
|
-
select: { id: true },
|
|
225
|
-
});
|
|
226
|
-
await prisma.lightningTalk.deleteMany({
|
|
227
|
-
where: {
|
|
228
|
-
exhibitId: { in: exhibitIds.map((ex) => ex.id) },
|
|
229
|
-
},
|
|
230
|
-
});
|
|
231
|
-
// exhibit 削除
|
|
232
|
-
await prisma.exhibit.deleteMany({ where: { eventId } });
|
|
233
|
-
// event 削除
|
|
234
|
-
await prisma.event.delete({
|
|
235
|
-
where: { id: eventId },
|
|
236
|
-
});
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
exports.PrismaEventRepository = PrismaEventRepository;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Member, type MemberRepository } from "../../domain";
|
|
2
|
-
export declare class PrismaMemberRepository implements MemberRepository {
|
|
3
|
-
private toDomain;
|
|
4
|
-
findByDiscordAccountId(discordAccountId: string): Promise<Member | null>;
|
|
5
|
-
findById(id: string): Promise<Member | null>;
|
|
6
|
-
findByEmail(email: string): Promise<Member | null>;
|
|
7
|
-
findByStudentId(studentId: string): Promise<Member | null>;
|
|
8
|
-
findAll(): Promise<Member[]>;
|
|
9
|
-
save(member: Member): Promise<void>;
|
|
10
|
-
delete(memberId: string): Promise<void>;
|
|
11
|
-
}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PrismaMemberRepository = void 0;
|
|
4
|
-
const client_1 = require("@prisma/client");
|
|
5
|
-
const domain_1 = require("../../domain");
|
|
6
|
-
const prisma = new client_1.PrismaClient();
|
|
7
|
-
class PrismaMemberRepository {
|
|
8
|
-
toDomain(record) {
|
|
9
|
-
const member = new domain_1.Member(record.id, record.name, record.studentId, domain_1.Department.fromString(record.department), new domain_1.UniversityEmail(record.email), record.personalEmail ? new domain_1.Email(record.personalEmail) : undefined);
|
|
10
|
-
for (const discordAccount of record.discordAccounts) {
|
|
11
|
-
member.addDiscordAccount(new domain_1.DiscordAccount(discordAccount.id, discordAccount.nickName, discordAccount.memberId));
|
|
12
|
-
}
|
|
13
|
-
return member;
|
|
14
|
-
}
|
|
15
|
-
async findByDiscordAccountId(discordAccountId) {
|
|
16
|
-
const record = await prisma.member.findFirst({
|
|
17
|
-
where: { discordAccounts: { some: { id: discordAccountId } } },
|
|
18
|
-
include: { discordAccounts: true },
|
|
19
|
-
});
|
|
20
|
-
if (!record)
|
|
21
|
-
return null;
|
|
22
|
-
return this.toDomain(record);
|
|
23
|
-
}
|
|
24
|
-
async findById(id) {
|
|
25
|
-
const record = await prisma.member.findUnique({
|
|
26
|
-
where: { id },
|
|
27
|
-
include: { discordAccounts: true },
|
|
28
|
-
});
|
|
29
|
-
if (!record)
|
|
30
|
-
return null;
|
|
31
|
-
return this.toDomain(record);
|
|
32
|
-
}
|
|
33
|
-
async findByEmail(email) {
|
|
34
|
-
const record = await prisma.member.findUnique({
|
|
35
|
-
where: { email },
|
|
36
|
-
include: { discordAccounts: true },
|
|
37
|
-
});
|
|
38
|
-
if (!record)
|
|
39
|
-
return null;
|
|
40
|
-
return this.toDomain(record);
|
|
41
|
-
}
|
|
42
|
-
async findByStudentId(studentId) {
|
|
43
|
-
const record = await prisma.member.findFirst({
|
|
44
|
-
where: { studentId },
|
|
45
|
-
include: { discordAccounts: true },
|
|
46
|
-
});
|
|
47
|
-
if (!record)
|
|
48
|
-
return null;
|
|
49
|
-
return this.toDomain(record);
|
|
50
|
-
}
|
|
51
|
-
async findAll() {
|
|
52
|
-
const records = await prisma.member.findMany({
|
|
53
|
-
include: { discordAccounts: true },
|
|
54
|
-
});
|
|
55
|
-
return records.map(this.toDomain);
|
|
56
|
-
}
|
|
57
|
-
async save(member) {
|
|
58
|
-
var _a, _b;
|
|
59
|
-
const memberSnapshot = member.toSnapshot();
|
|
60
|
-
await prisma.member.upsert({
|
|
61
|
-
where: { id: memberSnapshot.id },
|
|
62
|
-
update: {
|
|
63
|
-
name: memberSnapshot.name,
|
|
64
|
-
studentId: memberSnapshot.studentId,
|
|
65
|
-
department: memberSnapshot.department.getValue(),
|
|
66
|
-
email: memberSnapshot.email.getValue(),
|
|
67
|
-
personalEmail: (_a = memberSnapshot.personalEmail) === null || _a === void 0 ? void 0 : _a.getValue(),
|
|
68
|
-
},
|
|
69
|
-
create: {
|
|
70
|
-
id: memberSnapshot.id,
|
|
71
|
-
name: memberSnapshot.name,
|
|
72
|
-
studentId: memberSnapshot.studentId,
|
|
73
|
-
department: memberSnapshot.department.getValue(),
|
|
74
|
-
email: memberSnapshot.email.getValue(),
|
|
75
|
-
personalEmail: (_b = memberSnapshot.personalEmail) === null || _b === void 0 ? void 0 : _b.getValue(),
|
|
76
|
-
},
|
|
77
|
-
});
|
|
78
|
-
for (const discordAccount of memberSnapshot.discordAccounts) {
|
|
79
|
-
await prisma.discordAccount.upsert({
|
|
80
|
-
where: { id: discordAccount.id },
|
|
81
|
-
update: { nickName: discordAccount.nickName },
|
|
82
|
-
create: {
|
|
83
|
-
id: discordAccount.id,
|
|
84
|
-
nickName: discordAccount.nickName,
|
|
85
|
-
memberId: discordAccount.memberId,
|
|
86
|
-
},
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
async delete(memberId) {
|
|
91
|
-
await prisma.discordAccount.deleteMany({
|
|
92
|
-
where: { memberId },
|
|
93
|
-
});
|
|
94
|
-
await prisma.member.delete({
|
|
95
|
-
where: { id: memberId },
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
exports.PrismaMemberRepository = PrismaMemberRepository;
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./PrismaEventRepository"), exports);
|
|
18
|
-
__exportStar(require("./PrismaMemberRepository"), exports);
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
-- CreateTable
|
|
2
|
-
CREATE TABLE "members" (
|
|
3
|
-
"id" TEXT NOT NULL,
|
|
4
|
-
"name" TEXT NOT NULL,
|
|
5
|
-
"student_id" TEXT NOT NULL,
|
|
6
|
-
"department" TEXT NOT NULL,
|
|
7
|
-
"email" TEXT NOT NULL,
|
|
8
|
-
"personal_email" TEXT,
|
|
9
|
-
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
10
|
-
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
11
|
-
|
|
12
|
-
CONSTRAINT "members_pkey" PRIMARY KEY ("id")
|
|
13
|
-
);
|
|
14
|
-
|
|
15
|
-
-- CreateTable
|
|
16
|
-
CREATE TABLE "discord_accounts" (
|
|
17
|
-
"discord_id" TEXT NOT NULL,
|
|
18
|
-
"nick_name" TEXT NOT NULL,
|
|
19
|
-
"member_id" TEXT NOT NULL,
|
|
20
|
-
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
21
|
-
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
22
|
-
|
|
23
|
-
CONSTRAINT "discord_accounts_pkey" PRIMARY KEY ("discord_id")
|
|
24
|
-
);
|
|
25
|
-
|
|
26
|
-
-- CreateTable
|
|
27
|
-
CREATE TABLE "events" (
|
|
28
|
-
"id" TEXT NOT NULL,
|
|
29
|
-
"name" TEXT NOT NULL,
|
|
30
|
-
"date" TIMESTAMP(3) NOT NULL,
|
|
31
|
-
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
32
|
-
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
33
|
-
|
|
34
|
-
CONSTRAINT "events_pkey" PRIMARY KEY ("id")
|
|
35
|
-
);
|
|
36
|
-
|
|
37
|
-
-- CreateTable
|
|
38
|
-
CREATE TABLE "exhibits" (
|
|
39
|
-
"id" TEXT NOT NULL,
|
|
40
|
-
"name" TEXT NOT NULL,
|
|
41
|
-
"description" TEXT,
|
|
42
|
-
"url" TEXT,
|
|
43
|
-
"event_id" TEXT NOT NULL,
|
|
44
|
-
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
45
|
-
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
46
|
-
|
|
47
|
-
CONSTRAINT "exhibits_pkey" PRIMARY KEY ("id")
|
|
48
|
-
);
|
|
49
|
-
|
|
50
|
-
-- CreateTable
|
|
51
|
-
CREATE TABLE "member_events" (
|
|
52
|
-
"id" TEXT NOT NULL,
|
|
53
|
-
"member_id" TEXT NOT NULL,
|
|
54
|
-
"event_id" TEXT NOT NULL,
|
|
55
|
-
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
56
|
-
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
57
|
-
|
|
58
|
-
CONSTRAINT "member_events_pkey" PRIMARY KEY ("id")
|
|
59
|
-
);
|
|
60
|
-
|
|
61
|
-
-- CreateTable
|
|
62
|
-
CREATE TABLE "member_exhibits" (
|
|
63
|
-
"id" TEXT NOT NULL,
|
|
64
|
-
"member_id" TEXT NOT NULL,
|
|
65
|
-
"exhibit_id" TEXT NOT NULL,
|
|
66
|
-
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
67
|
-
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
68
|
-
|
|
69
|
-
CONSTRAINT "member_exhibits_pkey" PRIMARY KEY ("id")
|
|
70
|
-
);
|
|
71
|
-
|
|
72
|
-
-- CreateIndex
|
|
73
|
-
CREATE UNIQUE INDEX "members_email_key" ON "members"("email");
|
|
74
|
-
|
|
75
|
-
-- CreateIndex
|
|
76
|
-
CREATE UNIQUE INDEX "member_events_member_id_event_id_key" ON "member_events"("member_id", "event_id");
|
|
77
|
-
|
|
78
|
-
-- CreateIndex
|
|
79
|
-
CREATE UNIQUE INDEX "member_exhibits_member_id_exhibit_id_key" ON "member_exhibits"("member_id", "exhibit_id");
|
|
80
|
-
|
|
81
|
-
-- AddForeignKey
|
|
82
|
-
ALTER TABLE "discord_accounts" ADD CONSTRAINT "discord_accounts_member_id_fkey" FOREIGN KEY ("member_id") REFERENCES "members"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
83
|
-
|
|
84
|
-
-- AddForeignKey
|
|
85
|
-
ALTER TABLE "exhibits" ADD CONSTRAINT "exhibits_event_id_fkey" FOREIGN KEY ("event_id") REFERENCES "events"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
86
|
-
|
|
87
|
-
-- AddForeignKey
|
|
88
|
-
ALTER TABLE "member_events" ADD CONSTRAINT "member_events_member_id_fkey" FOREIGN KEY ("member_id") REFERENCES "members"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
89
|
-
|
|
90
|
-
-- AddForeignKey
|
|
91
|
-
ALTER TABLE "member_events" ADD CONSTRAINT "member_events_event_id_fkey" FOREIGN KEY ("event_id") REFERENCES "events"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
92
|
-
|
|
93
|
-
-- AddForeignKey
|
|
94
|
-
ALTER TABLE "member_exhibits" ADD CONSTRAINT "member_exhibits_member_id_fkey" FOREIGN KEY ("member_id") REFERENCES "members"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
95
|
-
|
|
96
|
-
-- AddForeignKey
|
|
97
|
-
ALTER TABLE "member_exhibits" ADD CONSTRAINT "member_exhibits_exhibit_id_fkey" FOREIGN KEY ("exhibit_id") REFERENCES "exhibits"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
-- CreateTable
|
|
2
|
-
CREATE TABLE "lightning_talks" (
|
|
3
|
-
"exhibit_id" TEXT NOT NULL,
|
|
4
|
-
"start_time" TIMESTAMP(3) NOT NULL,
|
|
5
|
-
"duration" INTEGER NOT NULL,
|
|
6
|
-
"slide_url" TEXT,
|
|
7
|
-
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
8
|
-
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
9
|
-
|
|
10
|
-
CONSTRAINT "lightning_talks_pkey" PRIMARY KEY ("exhibit_id")
|
|
11
|
-
);
|
|
12
|
-
|
|
13
|
-
-- AddForeignKey
|
|
14
|
-
ALTER TABLE "lightning_talks" ADD CONSTRAINT "lightning_talks_exhibit_id_fkey" FOREIGN KEY ("exhibit_id") REFERENCES "exhibits"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
package/prisma/schema.prisma
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
datasource db {
|
|
2
|
-
provider = "postgresql"
|
|
3
|
-
url = env("DATABASE_URL")
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
generator client {
|
|
7
|
-
provider = "prisma-client-js"
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
model Member {
|
|
11
|
-
id String @id @default(uuid())
|
|
12
|
-
name String
|
|
13
|
-
studentId String @map("student_id")
|
|
14
|
-
department String
|
|
15
|
-
email String @unique
|
|
16
|
-
personalEmail String? @map("personal_email")
|
|
17
|
-
// リレーション
|
|
18
|
-
discordAccounts DiscordAccount[]
|
|
19
|
-
events MemberEvent[]
|
|
20
|
-
exhibits MemberExhibit[]
|
|
21
|
-
createdAt DateTime @default(now())
|
|
22
|
-
updatedAt DateTime @updatedAt
|
|
23
|
-
|
|
24
|
-
@@map("members")
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
model DiscordAccount {
|
|
28
|
-
id String @id @map("discord_id") // DiscordIDをプライマリーキーとして使用
|
|
29
|
-
nickName String @map("nick_name")
|
|
30
|
-
memberId String @map("member_id")
|
|
31
|
-
member Member @relation(fields: [memberId], references: [id])
|
|
32
|
-
createdAt DateTime @default(now())
|
|
33
|
-
updatedAt DateTime @updatedAt
|
|
34
|
-
|
|
35
|
-
@@map("discord_accounts")
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
model Event {
|
|
39
|
-
id String @id @default(uuid())
|
|
40
|
-
name String
|
|
41
|
-
date DateTime
|
|
42
|
-
// リレーション
|
|
43
|
-
members MemberEvent[]
|
|
44
|
-
exhibits Exhibit[]
|
|
45
|
-
createdAt DateTime @default(now())
|
|
46
|
-
updatedAt DateTime @updatedAt
|
|
47
|
-
|
|
48
|
-
@@map("events")
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
model Exhibit {
|
|
52
|
-
id String @id @default(uuid())
|
|
53
|
-
name String
|
|
54
|
-
description String?
|
|
55
|
-
markdownContent String? @map("markdown_content")
|
|
56
|
-
url String?
|
|
57
|
-
// リレーション
|
|
58
|
-
eventId String @map("event_id")
|
|
59
|
-
event Event @relation(fields: [eventId], references: [id])
|
|
60
|
-
members MemberExhibit[]
|
|
61
|
-
|
|
62
|
-
// 必要だがアクセスしない関係として定義
|
|
63
|
-
lightningTalk LightningTalk?
|
|
64
|
-
createdAt DateTime @default(now())
|
|
65
|
-
updatedAt DateTime @updatedAt
|
|
66
|
-
|
|
67
|
-
@@map("exhibits")
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// イベント中のLT
|
|
71
|
-
model LightningTalk {
|
|
72
|
-
exhibitId String @id @map("exhibit_id") // PKかつFKとして使用
|
|
73
|
-
exhibit Exhibit @relation(fields: [exhibitId], references: [id])
|
|
74
|
-
startTime DateTime @map("start_time")
|
|
75
|
-
duration Int // 分単位
|
|
76
|
-
slideUrl String? @map("slide_url")
|
|
77
|
-
createdAt DateTime @default(now())
|
|
78
|
-
updatedAt DateTime @updatedAt
|
|
79
|
-
|
|
80
|
-
@@map("lightning_talks")
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// ジャンクションテーブル(Member - Event)
|
|
84
|
-
model MemberEvent {
|
|
85
|
-
id String @id @default(uuid())
|
|
86
|
-
memberId String @map("member_id")
|
|
87
|
-
eventId String @map("event_id")
|
|
88
|
-
member Member @relation(fields: [memberId], references: [id])
|
|
89
|
-
event Event @relation(fields: [eventId], references: [id])
|
|
90
|
-
createdAt DateTime @default(now())
|
|
91
|
-
updatedAt DateTime @updatedAt
|
|
92
|
-
|
|
93
|
-
@@unique([memberId, eventId])
|
|
94
|
-
@@map("member_events")
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// ジャンクションテーブル(Member - Exhibit)
|
|
98
|
-
model MemberExhibit {
|
|
99
|
-
id String @id @default(uuid())
|
|
100
|
-
memberId String @map("member_id")
|
|
101
|
-
exhibitId String @map("exhibit_id")
|
|
102
|
-
member Member @relation(fields: [memberId], references: [id])
|
|
103
|
-
exhibit Exhibit @relation(fields: [exhibitId], references: [id])
|
|
104
|
-
createdAt DateTime @default(now())
|
|
105
|
-
updatedAt DateTime @updatedAt
|
|
106
|
-
|
|
107
|
-
@@unique([memberId, exhibitId])
|
|
108
|
-
@@map("member_exhibits")
|
|
109
|
-
}
|