A social knowledge tool for researchers built on ATProto
at development 38 lines 1.3 kB view raw
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}