A social knowledge tool for researchers built on ATProto
1import { IDomainEvent } from '../../../../shared/domain/events/IDomainEvent';
2import { UniqueEntityID } from '../../../../shared/domain/UniqueEntityID';
3import { CardId } from '../value-objects/CardId';
4import { CuratorId } from '../value-objects/CuratorId';
5import { EventNames } from '../../../../shared/infrastructure/events/EventConfig';
6import { Result, ok } from '../../../../shared/core/Result';
7
8export class CardAddedToLibraryEvent implements IDomainEvent {
9 public readonly eventName = EventNames.CARD_ADDED_TO_LIBRARY;
10 public readonly dateTimeOccurred: Date;
11
12 private constructor(
13 public readonly cardId: CardId,
14 public readonly curatorId: CuratorId,
15 dateTimeOccurred?: Date,
16 ) {
17 this.dateTimeOccurred = dateTimeOccurred || new Date();
18 }
19
20 public static create(
21 cardId: CardId,
22 curatorId: CuratorId,
23 ): Result<CardAddedToLibraryEvent> {
24 return ok(new CardAddedToLibraryEvent(cardId, curatorId));
25 }
26
27 public static reconstruct(
28 cardId: CardId,
29 curatorId: CuratorId,
30 dateTimeOccurred: Date,
31 ): Result<CardAddedToLibraryEvent> {
32 return ok(new CardAddedToLibraryEvent(cardId, curatorId, dateTimeOccurred));
33 }
34
35 getAggregateId(): UniqueEntityID {
36 return this.cardId.getValue();
37 }
38}