[80%] abstract cqrs