我是事件外包的初学者,并且将NestJS与Typeorm结合使用。我正在使用'@ nestjs / cqrs'库中的AggregateRoot。该库在应用事件时需要事件的构造函数名称。
无论如何,我认为我的问题与Typeorm有关。我不知道如何指定postgres json反序列化的方式。
我使用以下模型将事件持久保存在PostgreSQL数据库中
log.com.jcabi.ssh.Ssh=info
我的事件存储在这里:
@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;
}
。使用Typeorm的EventRepository进行操作时,我拥有事件的所有有效负载。但是,由于模型中有效负载的类型为ArticleCreatedEvent
,构造函数名称为'object',而我的object
根据构造函数名称处理事件,因此我希望它为'ArticleCreatedEvent' 。
我可以向Typeorm指定构造函数应该是ArticleCreatedEvent,然后传递有效载荷吗?如果不是,您是否知道一种在postgres中存储对象的方法,以保留对象的原型(例如,保留构造函数名称)?
谢谢!