store db и event-sourcing, но у меня есть сомнения относительно прогнозов и cqrs. Пока что я вызываю свой коммандос и свой обработчик команд следующим образом:
создать-пользователя-команду
export class CreateUserCommand implements ICommand {
constructor(
public readonly userDto: UserStruct,
) {}
}
обработчик команд:
export class CreateUserHandler implements ICommandHandler<CreateUserCommand> {
constructor(private readonly publisher: EventPublisher) {}
async execute(command: CreateUserCommand) {
const { userDto } = command;
const user = User.create(userDto);
console.log(user.value)
if (user.isLeft()) throw user.value;
const userPublisher = this.publisher.mergeObjectContext(user.value);
userPublisher.commit()
}
}
событие:
export class UserCreatedEvent implements IEvent {
static readonly NAME = "UniFtcIdade/user-registered";
readonly $name = UserCreatedEvent.NAME;
readonly $version = 0;
constructor(
public readonly aggregateId: string,
public readonly state: { email: string; name: string },
public readonly date: Date
) {
}
}
домен:
export class User extends AggregateRoot {
public readonly name: string;
public readonly email: string;
private constructor (guid: string, name: string, email: string) {
super()
this.apply(new UserCreatedEvent(guid, {email, name}, new Date()));
}
static create(
dto: UserStruct
): Either<InvalidNameError | InvalidEmailError, User> {
const name: Either<InvalidNameError, Name> = Name.create(dto.name);
const email: Either<InvalidEmailError, Email> = Email.create(dto.email);
if (name.isLeft()) return left(name.value);
if (email.isLeft()) return left(email.value);
const user = new User(v4(),name.value.value, email.value.value);
return right(user);
}
}
Но я сомневаюсь, как прогнозы войдут в эту ситуацию. Проекция используется для получения текущего состояния агрегата ??? У меня должен быть db как mongodb для сохранения текущего состояния, то есть каждый раз, когда я вызываю свой обработчик команд и меняю текущее состояние в mongodb ??? Предусмотрена ли для этого проекция событийb? сохранить текущее состояние агрегата ??