@shizuoka-its/core 2.0.0-alpha.4 → 2.0.0-alpha.5
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/dist/application/usecase/eventParticipation/GetEventsByMember.d.ts +11 -0
- package/dist/application/usecase/eventParticipation/GetEventsByMember.js +12 -0
- package/dist/application/usecase/eventParticipation/GetExhibitsByMember.d.ts +11 -0
- package/dist/application/usecase/eventParticipation/GetExhibitsByMember.js +21 -0
- package/dist/application/usecase/eventParticipation/GetMembersByEvent.d.ts +13 -0
- package/dist/application/usecase/eventParticipation/GetMembersByEvent.js +20 -0
- package/dist/application/usecase/eventParticipation/GetMembersByExhibit.d.ts +13 -0
- package/dist/application/usecase/eventParticipation/GetMembersByExhibit.js +21 -0
- package/dist/application/usecase/eventParticipation/RegisterMemberToEvent.d.ts +12 -0
- package/dist/application/usecase/eventParticipation/RegisterMemberToEvent.js +23 -0
- package/dist/application/usecase/eventParticipation/RegisterMemberToExhibit.d.ts +12 -0
- package/dist/application/usecase/eventParticipation/RegisterMemberToExhibit.js +23 -0
- package/dist/application/usecase/eventParticipation/RemoveMemberFromEvent.d.ts +12 -0
- package/dist/application/usecase/eventParticipation/RemoveMemberFromEvent.js +19 -0
- package/dist/application/usecase/eventParticipation/RemoveMemberFromExhibit.d.ts +12 -0
- package/dist/application/usecase/eventParticipation/RemoveMemberFromExhibit.js +19 -0
- package/dist/application/usecase/eventParticipation/index.d.ts +8 -0
- package/dist/application/usecase/eventParticipation/index.js +25 -0
- package/dist/domain/aggregates/event/Event.d.ts +8 -0
- package/dist/domain/aggregates/event/Event.js +29 -0
- package/dist/domain/aggregates/event/EventRepository.d.ts +2 -0
- package/dist/domain/aggregates/event/Exhibit.d.ts +4 -0
- package/dist/domain/aggregates/event/Exhibit.js +10 -0
- package/dist/domain/exceptions/DomainExceptions.d.ts +3 -0
- package/dist/domain/exceptions/DomainExceptions.js +8 -1
- package/dist/infrastructure/prisma/PrismaEventRepository.d.ts +2 -0
- package/dist/infrastructure/prisma/PrismaEventRepository.js +68 -0
- package/dist/infrastructure/prisma/index.d.ts +0 -2
- package/dist/infrastructure/prisma/index.js +0 -2
- package/package.json +1 -1
- package/dist/domain/aggregates/memberEvent/MemberEvent.d.ts +0 -11
- package/dist/domain/aggregates/memberEvent/MemberEvent.js +0 -18
- package/dist/domain/aggregates/memberEvent/MemberEventRepository.d.ts +0 -8
- package/dist/domain/aggregates/memberEvent/MemberEventRepository.js +0 -2
- package/dist/domain/aggregates/memberExhibit/MemberExhibit.d.ts +0 -11
- package/dist/domain/aggregates/memberExhibit/MemberExhibit.js +0 -18
- package/dist/domain/aggregates/memberExhibit/MemberExhibitRepository.d.ts +0 -8
- package/dist/domain/aggregates/memberExhibit/MemberExhibitRepository.js +0 -2
- package/dist/infrastructure/prisma/PrismaMemberEventRepository.d.ts +0 -10
- package/dist/infrastructure/prisma/PrismaMemberEventRepository.js +0 -48
- package/dist/infrastructure/prisma/PrismaMemberExhibitRepository.d.ts +0 -10
- package/dist/infrastructure/prisma/PrismaMemberExhibitRepository.js +0 -48
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Event } from "../../../domain/aggregates/event/Event";
|
|
2
|
+
import type { EventRepository } from "../../../domain/aggregates/event/EventRepository";
|
|
3
|
+
import type { IUseCase } from "../base";
|
|
4
|
+
export interface GetEventsByMemberInput {
|
|
5
|
+
memberId: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class GetEventsByMember implements IUseCase<GetEventsByMemberInput, Event[]> {
|
|
8
|
+
private readonly eventRepository;
|
|
9
|
+
constructor(eventRepository: EventRepository);
|
|
10
|
+
execute(input: GetEventsByMemberInput): Promise<Event[]>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GetEventsByMember = void 0;
|
|
4
|
+
class GetEventsByMember {
|
|
5
|
+
constructor(eventRepository) {
|
|
6
|
+
this.eventRepository = eventRepository;
|
|
7
|
+
}
|
|
8
|
+
async execute(input) {
|
|
9
|
+
return await this.eventRepository.findByParticipantMemberId(input.memberId);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.GetEventsByMember = GetEventsByMember;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { EventRepository } from "../../../domain/aggregates/event/EventRepository";
|
|
2
|
+
import type { Exhibit } from "../../../domain/aggregates/event/Exhibit";
|
|
3
|
+
import type { IUseCase } from "../base";
|
|
4
|
+
export interface GetExhibitsByMemberInput {
|
|
5
|
+
memberId: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class GetExhibitsByMember implements IUseCase<GetExhibitsByMemberInput, Exhibit[]> {
|
|
8
|
+
private readonly eventRepository;
|
|
9
|
+
constructor(eventRepository: EventRepository);
|
|
10
|
+
execute(input: GetExhibitsByMemberInput): Promise<Exhibit[]>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GetExhibitsByMember = void 0;
|
|
4
|
+
class GetExhibitsByMember {
|
|
5
|
+
constructor(eventRepository) {
|
|
6
|
+
this.eventRepository = eventRepository;
|
|
7
|
+
}
|
|
8
|
+
async execute(input) {
|
|
9
|
+
const events = await this.eventRepository.findByParticipantMemberId(input.memberId);
|
|
10
|
+
const exhibits = [];
|
|
11
|
+
for (const event of events) {
|
|
12
|
+
for (const exhibit of event.getExhibits()) {
|
|
13
|
+
if (exhibit.getMemberIds().includes(input.memberId)) {
|
|
14
|
+
exhibits.push(exhibit);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return exhibits;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.GetExhibitsByMember = GetExhibitsByMember;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Member } from "../../../domain/aggregates/member/Member";
|
|
2
|
+
import type { MemberRepository } from "../../../domain/aggregates/member/MemberRepository";
|
|
3
|
+
import type { EventRepository } from "../../../domain/aggregates/event/EventRepository";
|
|
4
|
+
import type { IUseCase } from "../base";
|
|
5
|
+
export interface GetMembersByEventInput {
|
|
6
|
+
eventId: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class GetMembersByEvent implements IUseCase<GetMembersByEventInput, Member[]> {
|
|
9
|
+
private readonly eventRepository;
|
|
10
|
+
private readonly memberRepository;
|
|
11
|
+
constructor(eventRepository: EventRepository, memberRepository: MemberRepository);
|
|
12
|
+
execute(input: GetMembersByEventInput): Promise<Member[]>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GetMembersByEvent = void 0;
|
|
4
|
+
const ApplicationExceptions_1 = require("../../exceptions/ApplicationExceptions");
|
|
5
|
+
class GetMembersByEvent {
|
|
6
|
+
constructor(eventRepository, memberRepository) {
|
|
7
|
+
this.eventRepository = eventRepository;
|
|
8
|
+
this.memberRepository = memberRepository;
|
|
9
|
+
}
|
|
10
|
+
async execute(input) {
|
|
11
|
+
const event = await this.eventRepository.findById(input.eventId);
|
|
12
|
+
if (!event) {
|
|
13
|
+
throw new ApplicationExceptions_1.EventNotFoundException();
|
|
14
|
+
}
|
|
15
|
+
return (await Promise.all(event
|
|
16
|
+
.getMemberIds()
|
|
17
|
+
.map((memberId) => this.memberRepository.findById(memberId)))).filter((member) => member !== null);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.GetMembersByEvent = GetMembersByEvent;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { EventRepository } from "../../../domain/aggregates/event/EventRepository";
|
|
2
|
+
import type { Member } from "../../../domain/aggregates/member/Member";
|
|
3
|
+
import type { MemberRepository } from "../../../domain/aggregates/member/MemberRepository";
|
|
4
|
+
import type { IUseCase } from "../base";
|
|
5
|
+
export interface GetMembersByExhibitInput {
|
|
6
|
+
exhibitId: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class GetMembersByExhibit implements IUseCase<GetMembersByExhibitInput, Member[]> {
|
|
9
|
+
private readonly memberRepository;
|
|
10
|
+
private readonly eventRepository;
|
|
11
|
+
constructor(memberRepository: MemberRepository, eventRepository: EventRepository);
|
|
12
|
+
execute(input: GetMembersByExhibitInput): Promise<Member[]>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GetMembersByExhibit = void 0;
|
|
4
|
+
const exceptions_1 = require("../../exceptions");
|
|
5
|
+
class GetMembersByExhibit {
|
|
6
|
+
constructor(memberRepository, eventRepository) {
|
|
7
|
+
this.memberRepository = memberRepository;
|
|
8
|
+
this.eventRepository = eventRepository;
|
|
9
|
+
}
|
|
10
|
+
async execute(input) {
|
|
11
|
+
const event = await this.eventRepository.findByExhibitId(input.exhibitId);
|
|
12
|
+
if (!event) {
|
|
13
|
+
throw new exceptions_1.EventNotFoundException();
|
|
14
|
+
}
|
|
15
|
+
const members = await Promise.all(event
|
|
16
|
+
.getMemberIds()
|
|
17
|
+
.map((memberId) => this.memberRepository.findById(memberId)));
|
|
18
|
+
return members.filter((m) => m !== null);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.GetMembersByExhibit = GetMembersByExhibit;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { EventRepository, MemberRepository } from "../../../domain";
|
|
2
|
+
import type { IUseCase } from "../base";
|
|
3
|
+
export interface RegisterMemberToEventInput {
|
|
4
|
+
memberId: string;
|
|
5
|
+
eventId: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class RegisterMemberToEvent implements IUseCase<RegisterMemberToEventInput, void> {
|
|
8
|
+
private readonly eventRepository;
|
|
9
|
+
private readonly memberRepository;
|
|
10
|
+
constructor(eventRepository: EventRepository, memberRepository: MemberRepository);
|
|
11
|
+
execute(input: RegisterMemberToEventInput): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RegisterMemberToEvent = void 0;
|
|
4
|
+
const exceptions_1 = require("../../exceptions");
|
|
5
|
+
class RegisterMemberToEvent {
|
|
6
|
+
constructor(eventRepository, memberRepository) {
|
|
7
|
+
this.eventRepository = eventRepository;
|
|
8
|
+
this.memberRepository = memberRepository;
|
|
9
|
+
}
|
|
10
|
+
async execute(input) {
|
|
11
|
+
const event = await this.eventRepository.findById(input.eventId);
|
|
12
|
+
if (!event) {
|
|
13
|
+
throw new exceptions_1.EventNotFoundException();
|
|
14
|
+
}
|
|
15
|
+
const member = await this.memberRepository.findById(input.memberId);
|
|
16
|
+
if (!member) {
|
|
17
|
+
throw new exceptions_1.MemberNotFoundException();
|
|
18
|
+
}
|
|
19
|
+
event.addMemberId(input.memberId);
|
|
20
|
+
await this.eventRepository.save(event);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.RegisterMemberToEvent = RegisterMemberToEvent;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { EventRepository, MemberRepository } from "../../../domain";
|
|
2
|
+
import type { IUseCase } from "../base";
|
|
3
|
+
export interface RegisterMemberToExhibitInput {
|
|
4
|
+
memberId: string;
|
|
5
|
+
exhibitId: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class RegisterMemberToExhibit implements IUseCase<RegisterMemberToExhibitInput, void> {
|
|
8
|
+
private readonly eventRepository;
|
|
9
|
+
private readonly memberRepository;
|
|
10
|
+
constructor(eventRepository: EventRepository, memberRepository: MemberRepository);
|
|
11
|
+
execute(input: RegisterMemberToExhibitInput): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RegisterMemberToExhibit = void 0;
|
|
4
|
+
const exceptions_1 = require("../..//exceptions");
|
|
5
|
+
class RegisterMemberToExhibit {
|
|
6
|
+
constructor(eventRepository, memberRepository) {
|
|
7
|
+
this.eventRepository = eventRepository;
|
|
8
|
+
this.memberRepository = memberRepository;
|
|
9
|
+
}
|
|
10
|
+
async execute(input) {
|
|
11
|
+
const event = await this.eventRepository.findByExhibitId(input.exhibitId);
|
|
12
|
+
if (!event) {
|
|
13
|
+
throw new exceptions_1.EventNotFoundException();
|
|
14
|
+
}
|
|
15
|
+
const member = await this.memberRepository.findById(input.memberId);
|
|
16
|
+
if (!member) {
|
|
17
|
+
throw new exceptions_1.MemberNotFoundException();
|
|
18
|
+
}
|
|
19
|
+
event.addExhibitMemberId(input.exhibitId, input.memberId);
|
|
20
|
+
await this.eventRepository.save(event);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.RegisterMemberToExhibit = RegisterMemberToExhibit;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { EventRepository, MemberRepository } from "../../../domain";
|
|
2
|
+
import type { IUseCase } from "../base";
|
|
3
|
+
export interface RemoveMemberFromEventInput {
|
|
4
|
+
memberId: string;
|
|
5
|
+
eventId: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class RemoveMemberFromEvent implements IUseCase<RemoveMemberFromEventInput, void> {
|
|
8
|
+
private readonly eventRepository;
|
|
9
|
+
private readonly memberRepository;
|
|
10
|
+
constructor(eventRepository: EventRepository, memberRepository: MemberRepository);
|
|
11
|
+
execute(input: RemoveMemberFromEventInput): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RemoveMemberFromEvent = void 0;
|
|
4
|
+
const exceptions_1 = require("../../exceptions");
|
|
5
|
+
class RemoveMemberFromEvent {
|
|
6
|
+
constructor(eventRepository, memberRepository) {
|
|
7
|
+
this.eventRepository = eventRepository;
|
|
8
|
+
this.memberRepository = memberRepository;
|
|
9
|
+
}
|
|
10
|
+
async execute(input) {
|
|
11
|
+
const event = await this.eventRepository.findById(input.eventId);
|
|
12
|
+
if (!event) {
|
|
13
|
+
throw new exceptions_1.EventNotFoundException();
|
|
14
|
+
}
|
|
15
|
+
event.removeMemberId(input.memberId);
|
|
16
|
+
await this.eventRepository.save(event);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.RemoveMemberFromEvent = RemoveMemberFromEvent;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { EventRepository, MemberRepository } from "../../../domain";
|
|
2
|
+
import type { IUseCase } from "../base";
|
|
3
|
+
export interface RemoveMemberFromExhibitInput {
|
|
4
|
+
memberId: string;
|
|
5
|
+
exhibitId: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class RemoveMemberFromExhibit implements IUseCase<RemoveMemberFromExhibitInput, void> {
|
|
8
|
+
private readonly memberRepository;
|
|
9
|
+
private readonly eventRepository;
|
|
10
|
+
constructor(memberRepository: MemberRepository, eventRepository: EventRepository);
|
|
11
|
+
execute(input: RemoveMemberFromExhibitInput): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RemoveMemberFromExhibit = void 0;
|
|
4
|
+
const exceptions_1 = require("../../exceptions");
|
|
5
|
+
class RemoveMemberFromExhibit {
|
|
6
|
+
constructor(memberRepository, eventRepository) {
|
|
7
|
+
this.memberRepository = memberRepository;
|
|
8
|
+
this.eventRepository = eventRepository;
|
|
9
|
+
}
|
|
10
|
+
async execute(input) {
|
|
11
|
+
const event = await this.eventRepository.findByExhibitId(input.exhibitId);
|
|
12
|
+
if (!event) {
|
|
13
|
+
throw new exceptions_1.EventNotFoundException();
|
|
14
|
+
}
|
|
15
|
+
event.removeExhibitMemberId(input.exhibitId, input.memberId);
|
|
16
|
+
await this.eventRepository.save(event);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.RemoveMemberFromExhibit = RemoveMemberFromExhibit;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from "./RegisterMemberToEvent";
|
|
2
|
+
export * from "./RemoveMemberFromEvent";
|
|
3
|
+
export * from "./GetEventsByMember";
|
|
4
|
+
export * from "./GetMembersByEvent";
|
|
5
|
+
export * from "./RegisterMemberToExhibit";
|
|
6
|
+
export * from "./RemoveMemberFromExhibit";
|
|
7
|
+
export * from "./GetExhibitsByMember";
|
|
8
|
+
export * from "./GetMembersByExhibit";
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
// TODO: 各ユースケース実装後にexport文を有効化すること
|
|
18
|
+
__exportStar(require("./RegisterMemberToEvent"), exports);
|
|
19
|
+
__exportStar(require("./RemoveMemberFromEvent"), exports);
|
|
20
|
+
__exportStar(require("./GetEventsByMember"), exports);
|
|
21
|
+
__exportStar(require("./GetMembersByEvent"), exports);
|
|
22
|
+
__exportStar(require("./RegisterMemberToExhibit"), exports);
|
|
23
|
+
__exportStar(require("./RemoveMemberFromExhibit"), exports);
|
|
24
|
+
__exportStar(require("./GetExhibitsByMember"), exports);
|
|
25
|
+
__exportStar(require("./GetMembersByExhibit"), exports);
|
|
@@ -5,7 +5,10 @@ export declare class Event {
|
|
|
5
5
|
private name;
|
|
6
6
|
private date;
|
|
7
7
|
private exhibits;
|
|
8
|
+
private memberIds;
|
|
8
9
|
constructor(id: string, name: string, date: Date);
|
|
10
|
+
getExhibits(): Exhibit[];
|
|
11
|
+
getMemberIds(): string[];
|
|
9
12
|
changeName(newName: string): void;
|
|
10
13
|
changeDate(newDate: Date): void;
|
|
11
14
|
addExhibit(exhibit: Exhibit): void;
|
|
@@ -18,6 +21,10 @@ export declare class Event {
|
|
|
18
21
|
changeExhibitLightningTalkDuration(exhibitId: string, newDuration: LightningTalkDuration): void;
|
|
19
22
|
changeExhibitLightningTalkSlideUrl(exhibitId: string, newSlideUrl: Url): void;
|
|
20
23
|
private getExhibitOrThrow;
|
|
24
|
+
addMemberId(memberId: string): void;
|
|
25
|
+
removeMemberId(memberId: string): void;
|
|
26
|
+
addExhibitMemberId(exhibitId: string, memberId: string): void;
|
|
27
|
+
removeExhibitMemberId(exhibitId: string, memberId: string): void;
|
|
21
28
|
toSnapshot(): {
|
|
22
29
|
id: string;
|
|
23
30
|
name: string;
|
|
@@ -35,5 +42,6 @@ export declare class Event {
|
|
|
35
42
|
slideUrl: Url | undefined;
|
|
36
43
|
} | undefined;
|
|
37
44
|
}[];
|
|
45
|
+
memberIds: string[];
|
|
38
46
|
};
|
|
39
47
|
}
|
|
@@ -10,6 +10,13 @@ class Event {
|
|
|
10
10
|
this.name = name;
|
|
11
11
|
this.date = date;
|
|
12
12
|
this.exhibits = [];
|
|
13
|
+
this.memberIds = new Set();
|
|
14
|
+
}
|
|
15
|
+
getExhibits() {
|
|
16
|
+
return this.exhibits;
|
|
17
|
+
}
|
|
18
|
+
getMemberIds() {
|
|
19
|
+
return Array.from(this.memberIds);
|
|
13
20
|
}
|
|
14
21
|
changeName(newName) {
|
|
15
22
|
this.name = newName;
|
|
@@ -22,6 +29,10 @@ class Event {
|
|
|
22
29
|
if (this.exhibits.some((x) => x.id === exhibit.id)) {
|
|
23
30
|
throw new exceptions_1.ExhibitAlreadyExistsException(`Exhibit(id=${exhibit.id}) は既に存在します`);
|
|
24
31
|
}
|
|
32
|
+
// NOTE: Exhibitに登録するタイミングでEventのmemberIdsにも登録する必要がある
|
|
33
|
+
for (const memberId of exhibit.getMemberIds()) {
|
|
34
|
+
this.memberIds.add(memberId);
|
|
35
|
+
}
|
|
25
36
|
this.exhibits.push(exhibit);
|
|
26
37
|
}
|
|
27
38
|
removeExhibit(exhibitId) {
|
|
@@ -56,12 +67,30 @@ class Event {
|
|
|
56
67
|
}
|
|
57
68
|
return exhibit;
|
|
58
69
|
}
|
|
70
|
+
addMemberId(memberId) {
|
|
71
|
+
this.memberIds.add(memberId);
|
|
72
|
+
}
|
|
73
|
+
removeMemberId(memberId) {
|
|
74
|
+
for (const exhibit of this.exhibits) {
|
|
75
|
+
if (exhibit.getMemberIds().includes(memberId)) {
|
|
76
|
+
throw new exceptions_1.ExhibitHasMemberException();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
this.memberIds.delete(memberId);
|
|
80
|
+
}
|
|
81
|
+
addExhibitMemberId(exhibitId, memberId) {
|
|
82
|
+
this.getExhibitOrThrow(exhibitId).addMemberId(memberId);
|
|
83
|
+
// NOTE: Exhibitに登録するタイミングでEventのmemberIdsにも登録する必要がある
|
|
84
|
+
this.memberIds.add(memberId);
|
|
85
|
+
}
|
|
86
|
+
removeExhibitMemberId(exhibitId, memberId) { }
|
|
59
87
|
toSnapshot() {
|
|
60
88
|
return {
|
|
61
89
|
id: this.id,
|
|
62
90
|
name: this.name,
|
|
63
91
|
date: this.date,
|
|
64
92
|
exhibits: this.exhibits.map((exhibit) => exhibit.toSnapshot()),
|
|
93
|
+
memberIds: Array.from(this.memberIds),
|
|
65
94
|
};
|
|
66
95
|
}
|
|
67
96
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { Event } from "./Event";
|
|
2
2
|
export interface EventRepository {
|
|
3
3
|
findById(id: string): Promise<Event | null>;
|
|
4
|
+
findByParticipantMemberId(memberId: string): Promise<Event[]>;
|
|
5
|
+
findByExhibitId(exhibitId: string): Promise<Event | null>;
|
|
4
6
|
findAll(): Promise<Event[]>;
|
|
5
7
|
save(event: Event): Promise<void>;
|
|
6
8
|
delete(eventId: string): Promise<void>;
|
|
@@ -7,8 +7,10 @@ export declare class Exhibit {
|
|
|
7
7
|
private markdownContent?;
|
|
8
8
|
private url?;
|
|
9
9
|
private lightningTalk?;
|
|
10
|
+
private memberIds;
|
|
10
11
|
static createWithLightningTalk(id: string, name: string, lt: LightningTalk, description?: string, markdownContent?: string, url?: Url): Exhibit;
|
|
11
12
|
constructor(id: string, name: string, description?: string | undefined, markdownContent?: string | undefined, url?: Url | undefined);
|
|
13
|
+
getMemberIds(): string[];
|
|
12
14
|
changeName(newName: string): void;
|
|
13
15
|
changeDescription(newDescription: string): void;
|
|
14
16
|
changeMarkdownContent(newMarkdownContent: string): void;
|
|
@@ -16,6 +18,8 @@ export declare class Exhibit {
|
|
|
16
18
|
changeLightningTalkStartTime(newStartTime: Date): void;
|
|
17
19
|
changeLightningTalkDuration(newDuration: LightningTalkDuration): void;
|
|
18
20
|
changeLightningTalkSlideUrl(newSlideUrl: Url): void;
|
|
21
|
+
addMemberId(memberId: string): void;
|
|
22
|
+
removeMemberId(memberId: string): void;
|
|
19
23
|
private getLightningTalkOrThrow;
|
|
20
24
|
toSnapshot(): {
|
|
21
25
|
id: string;
|
|
@@ -19,6 +19,10 @@ class Exhibit {
|
|
|
19
19
|
this.description = description;
|
|
20
20
|
this.markdownContent = markdownContent;
|
|
21
21
|
this.url = url;
|
|
22
|
+
this.memberIds = new Set();
|
|
23
|
+
}
|
|
24
|
+
getMemberIds() {
|
|
25
|
+
return Array.from(this.memberIds);
|
|
22
26
|
}
|
|
23
27
|
changeName(newName) {
|
|
24
28
|
this.name = newName;
|
|
@@ -41,6 +45,12 @@ class Exhibit {
|
|
|
41
45
|
changeLightningTalkSlideUrl(newSlideUrl) {
|
|
42
46
|
this.getLightningTalkOrThrow().changeSlideUrl(newSlideUrl);
|
|
43
47
|
}
|
|
48
|
+
addMemberId(memberId) {
|
|
49
|
+
this.memberIds.add(memberId);
|
|
50
|
+
}
|
|
51
|
+
removeMemberId(memberId) {
|
|
52
|
+
this.memberIds.delete(memberId);
|
|
53
|
+
}
|
|
44
54
|
getLightningTalkOrThrow() {
|
|
45
55
|
if (!this.lightningTalk) {
|
|
46
56
|
throw new exceptions_1.LightningTalkNotFoundException(`Exhibit(id=${this.id}) に紐づく LightningTalk が存在しません`);
|
|
@@ -40,3 +40,6 @@ export declare class LightningTalkNotFoundException extends DomainException {
|
|
|
40
40
|
export declare class LightningTalkExhibitIdMismatchException extends DomainException {
|
|
41
41
|
constructor(message?: string);
|
|
42
42
|
}
|
|
43
|
+
export declare class ExhibitHasMemberException extends DomainException {
|
|
44
|
+
constructor(message?: string);
|
|
45
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LightningTalkExhibitIdMismatchException = exports.LightningTalkNotFoundException = exports.ExhibitNotFoundException = exports.ExhibitAlreadyExistsException = exports.InvalidUrlProtocolException = exports.InvalidUrlException = exports.InvalidLightningTalkDurationException = exports.InvalidDepartmentException = exports.InvalidUniversityEmailException = exports.DiscordAccountNotConnectedException = exports.DiscordAccountAlreadyConnectedException = exports.InvalidEmailFormatException = exports.InvalidMemberException = exports.DomainException = void 0;
|
|
3
|
+
exports.ExhibitHasMemberException = exports.LightningTalkExhibitIdMismatchException = exports.LightningTalkNotFoundException = exports.ExhibitNotFoundException = exports.ExhibitAlreadyExistsException = exports.InvalidUrlProtocolException = exports.InvalidUrlException = exports.InvalidLightningTalkDurationException = exports.InvalidDepartmentException = exports.InvalidUniversityEmailException = exports.DiscordAccountNotConnectedException = exports.DiscordAccountAlreadyConnectedException = exports.InvalidEmailFormatException = exports.InvalidMemberException = exports.DomainException = void 0;
|
|
4
4
|
class DomainException extends Error {
|
|
5
5
|
constructor(message) {
|
|
6
6
|
super(message);
|
|
@@ -99,3 +99,10 @@ class LightningTalkExhibitIdMismatchException extends DomainException {
|
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
exports.LightningTalkExhibitIdMismatchException = LightningTalkExhibitIdMismatchException;
|
|
102
|
+
class ExhibitHasMemberException extends DomainException {
|
|
103
|
+
constructor(message = "イベントに紐づいた展示に当該メンバーがいるため、Eventから削除できません") {
|
|
104
|
+
super(message);
|
|
105
|
+
this.name = "ExhibitHasMemberException";
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
exports.ExhibitHasMemberException = ExhibitHasMemberException;
|
|
@@ -16,6 +16,8 @@ export declare class PrismaEventRepository implements EventRepository {
|
|
|
16
16
|
*/
|
|
17
17
|
private findObsoleteExhibitIds;
|
|
18
18
|
findById(id: string): Promise<Event | null>;
|
|
19
|
+
findByParticipantMemberId(memberId: string): Promise<Event[]>;
|
|
20
|
+
findByExhibitId(exhibitId: string): Promise<Event | null>;
|
|
19
21
|
findAll(): Promise<Event[]>;
|
|
20
22
|
save(event: Event): Promise<void>;
|
|
21
23
|
delete(eventId: string): Promise<void>;
|
|
@@ -58,6 +58,14 @@ class PrismaEventRepository {
|
|
|
58
58
|
},
|
|
59
59
|
},
|
|
60
60
|
});
|
|
61
|
+
// MemberExhibit(展示参加者)も先に削除
|
|
62
|
+
await prisma.memberExhibit.deleteMany({
|
|
63
|
+
where: {
|
|
64
|
+
exhibitId: {
|
|
65
|
+
in: await this.findObsoleteExhibitIds(snapshot.id, snapshotExhibitIds),
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
});
|
|
61
69
|
// exhibit 削除
|
|
62
70
|
await prisma.exhibit.deleteMany({
|
|
63
71
|
where: {
|
|
@@ -108,6 +116,42 @@ class PrismaEventRepository {
|
|
|
108
116
|
});
|
|
109
117
|
}
|
|
110
118
|
}
|
|
119
|
+
// 4) MemberEvent(イベント参加者)を同期
|
|
120
|
+
const eventMemberIds = event.getMemberIds();
|
|
121
|
+
// 古い参加者を削除
|
|
122
|
+
await prisma.memberEvent.deleteMany({
|
|
123
|
+
where: {
|
|
124
|
+
eventId: snapshot.id,
|
|
125
|
+
memberId: { notIn: eventMemberIds },
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
// 新しい参加者を登録(重複スキップ)
|
|
129
|
+
await prisma.memberEvent.createMany({
|
|
130
|
+
data: eventMemberIds.map((memberId) => ({
|
|
131
|
+
memberId,
|
|
132
|
+
eventId: snapshot.id,
|
|
133
|
+
})),
|
|
134
|
+
skipDuplicates: true,
|
|
135
|
+
});
|
|
136
|
+
// 5) MemberExhibit(展示参加者)を同期
|
|
137
|
+
for (const exhibitDomain of event.getExhibits()) {
|
|
138
|
+
const exhibitMemberIds = exhibitDomain.getMemberIds();
|
|
139
|
+
// 古い展示参加者を削除
|
|
140
|
+
await prisma.memberExhibit.deleteMany({
|
|
141
|
+
where: {
|
|
142
|
+
exhibitId: exhibitDomain.id,
|
|
143
|
+
memberId: { notIn: exhibitMemberIds },
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
// 新しい展示参加者を登録(重複スキップ)
|
|
147
|
+
await prisma.memberExhibit.createMany({
|
|
148
|
+
data: exhibitMemberIds.map((memberId) => ({
|
|
149
|
+
memberId,
|
|
150
|
+
exhibitId: exhibitDomain.id,
|
|
151
|
+
})),
|
|
152
|
+
skipDuplicates: true,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
111
155
|
}
|
|
112
156
|
/**
|
|
113
157
|
* どの ExhibitID が消えたかを調べるヘルパー
|
|
@@ -137,6 +181,30 @@ class PrismaEventRepository {
|
|
|
137
181
|
return null;
|
|
138
182
|
return this.toDomain(record);
|
|
139
183
|
}
|
|
184
|
+
async findByParticipantMemberId(memberId) {
|
|
185
|
+
const records = await prisma.event.findMany({
|
|
186
|
+
where: {
|
|
187
|
+
members: { some: { memberId: memberId } },
|
|
188
|
+
},
|
|
189
|
+
include: {
|
|
190
|
+
exhibits: { include: { lightningTalk: true } },
|
|
191
|
+
},
|
|
192
|
+
});
|
|
193
|
+
return records.map((r) => this.toDomain(r));
|
|
194
|
+
}
|
|
195
|
+
async findByExhibitId(exhibitId) {
|
|
196
|
+
const record = await prisma.event.findFirst({
|
|
197
|
+
where: {
|
|
198
|
+
exhibits: { some: { id: exhibitId } },
|
|
199
|
+
},
|
|
200
|
+
include: {
|
|
201
|
+
exhibits: { include: { lightningTalk: true } },
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
if (!record)
|
|
205
|
+
return null;
|
|
206
|
+
return this.toDomain(record);
|
|
207
|
+
}
|
|
140
208
|
async findAll() {
|
|
141
209
|
const records = await prisma.event.findMany({
|
|
142
210
|
include: {
|
|
@@ -15,6 +15,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./PrismaEventRepository"), exports);
|
|
18
|
-
__exportStar(require("./PrismaMemberEventRepository"), exports);
|
|
19
|
-
__exportStar(require("./PrismaMemberExhibitRepository"), exports);
|
|
20
18
|
__exportStar(require("./PrismaMemberRepository"), exports);
|
package/package.json
CHANGED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MemberEvent = void 0;
|
|
4
|
-
class MemberEvent {
|
|
5
|
-
constructor(id, memberId, eventId) {
|
|
6
|
-
this.id = id;
|
|
7
|
-
this.memberId = memberId;
|
|
8
|
-
this.eventId = eventId;
|
|
9
|
-
}
|
|
10
|
-
toSnapshot() {
|
|
11
|
-
return {
|
|
12
|
-
id: this.id,
|
|
13
|
-
memberId: this.memberId,
|
|
14
|
-
eventId: this.eventId,
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
exports.MemberEvent = MemberEvent;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { MemberEvent } from "./MemberEvent";
|
|
2
|
-
export interface MemberEventRepository {
|
|
3
|
-
findById(id: string): Promise<MemberEvent | null>;
|
|
4
|
-
findByMemberId(memberId: string): Promise<MemberEvent[]>;
|
|
5
|
-
findByEventId(eventId: string): Promise<MemberEvent[]>;
|
|
6
|
-
save(memberEvent: MemberEvent): Promise<void>;
|
|
7
|
-
delete(id: string): Promise<void>;
|
|
8
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export declare class MemberExhibit {
|
|
2
|
-
readonly id: string;
|
|
3
|
-
readonly memberId: string;
|
|
4
|
-
readonly exhibitId: string;
|
|
5
|
-
constructor(id: string, memberId: string, exhibitId: string);
|
|
6
|
-
toSnapshot(): {
|
|
7
|
-
id: string;
|
|
8
|
-
memberId: string;
|
|
9
|
-
exhibitId: string;
|
|
10
|
-
};
|
|
11
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MemberExhibit = void 0;
|
|
4
|
-
class MemberExhibit {
|
|
5
|
-
constructor(id, memberId, exhibitId) {
|
|
6
|
-
this.id = id;
|
|
7
|
-
this.memberId = memberId;
|
|
8
|
-
this.exhibitId = exhibitId;
|
|
9
|
-
}
|
|
10
|
-
toSnapshot() {
|
|
11
|
-
return {
|
|
12
|
-
id: this.id,
|
|
13
|
-
memberId: this.memberId,
|
|
14
|
-
exhibitId: this.exhibitId,
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
exports.MemberExhibit = MemberExhibit;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { MemberExhibit } from "./MemberExhibit";
|
|
2
|
-
export interface MemberExhibitRepository {
|
|
3
|
-
findById(id: string): Promise<MemberExhibit | null>;
|
|
4
|
-
findByMemberId(memberId: string): Promise<MemberExhibit[]>;
|
|
5
|
-
findByExhibitId(exhibitId: string): Promise<MemberExhibit[]>;
|
|
6
|
-
save(memberExhibit: MemberExhibit): Promise<void>;
|
|
7
|
-
delete(id: string): Promise<void>;
|
|
8
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { MemberEvent } from "../../domain/aggregates/memberEvent/MemberEvent";
|
|
2
|
-
import type { MemberEventRepository } from "../../domain/aggregates/memberEvent/MemberEventRepository";
|
|
3
|
-
export declare class PrismaMemberEventRepository implements MemberEventRepository {
|
|
4
|
-
private toDomain;
|
|
5
|
-
findById(id: string): Promise<MemberEvent | null>;
|
|
6
|
-
findByMemberId(memberId: string): Promise<MemberEvent[]>;
|
|
7
|
-
findByEventId(eventId: string): Promise<MemberEvent[]>;
|
|
8
|
-
save(memberEvent: MemberEvent): Promise<void>;
|
|
9
|
-
delete(id: string): Promise<void>;
|
|
10
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PrismaMemberEventRepository = void 0;
|
|
4
|
-
const client_1 = require("@prisma/client");
|
|
5
|
-
const MemberEvent_1 = require("../../domain/aggregates/memberEvent/MemberEvent");
|
|
6
|
-
const prisma = new client_1.PrismaClient();
|
|
7
|
-
class PrismaMemberEventRepository {
|
|
8
|
-
toDomain(record) {
|
|
9
|
-
return new MemberEvent_1.MemberEvent(record.id, record.memberId, record.eventId);
|
|
10
|
-
}
|
|
11
|
-
async findById(id) {
|
|
12
|
-
const record = await prisma.memberEvent.findUnique({ where: { id } });
|
|
13
|
-
if (!record)
|
|
14
|
-
return null;
|
|
15
|
-
return this.toDomain(record);
|
|
16
|
-
}
|
|
17
|
-
async findByMemberId(memberId) {
|
|
18
|
-
const records = await prisma.memberEvent.findMany({
|
|
19
|
-
where: { memberId },
|
|
20
|
-
});
|
|
21
|
-
return records.map((r) => this.toDomain(r));
|
|
22
|
-
}
|
|
23
|
-
async findByEventId(eventId) {
|
|
24
|
-
const records = await prisma.memberEvent.findMany({
|
|
25
|
-
where: { eventId },
|
|
26
|
-
});
|
|
27
|
-
return records.map((r) => this.toDomain(r));
|
|
28
|
-
}
|
|
29
|
-
async save(memberEvent) {
|
|
30
|
-
const snapshot = memberEvent.toSnapshot();
|
|
31
|
-
await prisma.memberEvent.upsert({
|
|
32
|
-
where: { id: snapshot.id },
|
|
33
|
-
create: {
|
|
34
|
-
id: snapshot.id,
|
|
35
|
-
memberId: snapshot.memberId,
|
|
36
|
-
eventId: snapshot.eventId,
|
|
37
|
-
},
|
|
38
|
-
update: {
|
|
39
|
-
memberId: snapshot.memberId,
|
|
40
|
-
eventId: snapshot.eventId,
|
|
41
|
-
},
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
async delete(id) {
|
|
45
|
-
await prisma.memberEvent.delete({ where: { id } });
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
exports.PrismaMemberEventRepository = PrismaMemberEventRepository;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { MemberExhibit } from "../../domain/aggregates/memberExhibit/MemberExhibit";
|
|
2
|
-
import type { MemberExhibitRepository } from "../../domain/aggregates/memberExhibit/MemberExhibitRepository";
|
|
3
|
-
export declare class PrismaMemberExhibitRepository implements MemberExhibitRepository {
|
|
4
|
-
private toDomain;
|
|
5
|
-
findById(id: string): Promise<MemberExhibit | null>;
|
|
6
|
-
findByMemberId(memberId: string): Promise<MemberExhibit[]>;
|
|
7
|
-
findByExhibitId(exhibitId: string): Promise<MemberExhibit[]>;
|
|
8
|
-
save(memberExhibit: MemberExhibit): Promise<void>;
|
|
9
|
-
delete(id: string): Promise<void>;
|
|
10
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PrismaMemberExhibitRepository = void 0;
|
|
4
|
-
const client_1 = require("@prisma/client");
|
|
5
|
-
const MemberExhibit_1 = require("../../domain/aggregates/memberExhibit/MemberExhibit");
|
|
6
|
-
const prisma = new client_1.PrismaClient();
|
|
7
|
-
class PrismaMemberExhibitRepository {
|
|
8
|
-
toDomain(record) {
|
|
9
|
-
return new MemberExhibit_1.MemberExhibit(record.id, record.memberId, record.exhibitId);
|
|
10
|
-
}
|
|
11
|
-
async findById(id) {
|
|
12
|
-
const record = await prisma.memberExhibit.findUnique({ where: { id } });
|
|
13
|
-
if (!record)
|
|
14
|
-
return null;
|
|
15
|
-
return this.toDomain(record);
|
|
16
|
-
}
|
|
17
|
-
async findByMemberId(memberId) {
|
|
18
|
-
const records = await prisma.memberExhibit.findMany({
|
|
19
|
-
where: { memberId },
|
|
20
|
-
});
|
|
21
|
-
return records.map((r) => this.toDomain(r));
|
|
22
|
-
}
|
|
23
|
-
async findByExhibitId(exhibitId) {
|
|
24
|
-
const records = await prisma.memberExhibit.findMany({
|
|
25
|
-
where: { exhibitId },
|
|
26
|
-
});
|
|
27
|
-
return records.map((r) => this.toDomain(r));
|
|
28
|
-
}
|
|
29
|
-
async save(memberExhibit) {
|
|
30
|
-
const snapshot = memberExhibit.toSnapshot();
|
|
31
|
-
await prisma.memberExhibit.upsert({
|
|
32
|
-
where: { id: snapshot.id },
|
|
33
|
-
create: {
|
|
34
|
-
id: snapshot.id,
|
|
35
|
-
memberId: snapshot.memberId,
|
|
36
|
-
exhibitId: snapshot.exhibitId,
|
|
37
|
-
},
|
|
38
|
-
update: {
|
|
39
|
-
memberId: snapshot.memberId,
|
|
40
|
-
exhibitId: snapshot.exhibitId,
|
|
41
|
-
},
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
async delete(id) {
|
|
45
|
-
await prisma.memberExhibit.delete({ where: { id } });
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
exports.PrismaMemberExhibitRepository = PrismaMemberExhibitRepository;
|