Я новичок в организации событий и использую NestJS с Typeorm.Я использую AggregateRoot из библиотеки '@ nestjs / cqrs'.Эта библиотека нуждается в имени конструктора события, когда она применяет событие.
В любом случае, я думаю, что моя проблема связана с Typeorm.Я не знаю, как указать способ десериализации postgres json.
Я сохраняю свои события в базе данных postgresql, используя следующую модель
@Entity()
export class Event {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column()
aggregateId: number;
@Column('json')
payload: object;
@Column()
className: string;
}
Мои события хранятся так:
handle(event: ArticleCreatedEvent) {
const articleCreatedEvent = new Event();
articleCreatedEvent.payload = event;
articleCreatedEvent.aggregateId = event.id;
const { constructor } = Object.getPrototypeOf(event);
articleCreatedEvent.className = constructor.name;
this.EventRepository.save(articleCreatedEvent);
return;
}
Моя проблема: мне нужно получить ArticleCreatedEvent
из БД.Когда я делаю это с помощью EventRepository Typeorm, у меня есть все полезные данные моего события.НО, поскольку тип полезной нагрузки в модели - object
, имя конструктора - «объект», а мой AggregateRoot
обрабатывает базу событий на основе имени конструктора, я хотел бы, чтобы он был «ArticleCreatedEvent».
Могу ли я указать Typeorm, что конструктор должен быть ArticleCreatedEvent, а затем передать полезную нагрузку?Если нет, знаете ли вы, как сохранить объект в postgres, сохранив прототип объекта (например, сохранив имя конструктора)?
Спасибо!