typescript-ddd-example icon indicating copy to clipboard operation
typescript-ddd-example copied to clipboard

Should the controller expect Domain Errors from the command bus?

Open DanielRamosAcosta opened this issue 2 years ago • 2 comments

You have this at the CoursePutController.ts#L20:

    try {
      await this.commandBus.dispatch(createCourseCommand);
    } catch (error) {
      if (error instanceof CourseAlreadyExists) {
        res.status(httpStatus.BAD_REQUEST).send(error.message);
      } else {
        res.status(httpStatus.INTERNAL_SERVER_ERROR).json(error);
      }
    }

Right now this works because we are using an InMemoryCommandBus implementation. But, if we change the CommandBus implementation to one where we cannot expect the execution of the code (for example if we store this command in Kafka for later consumption), the implementation of this controller wouldn't work at all (because the use case will never get executed in this request, and it will never throw).

Is this true? Thanks!

DanielRamosAcosta avatar Jan 27 '22 22:01 DanielRamosAcosta

To be precise, this implementation will work if you use Kafka but will never trigger the bad request catch. If Kafka itself is unavailable it will respond with internal server error though.

fraylopez avatar Jan 31 '22 19:01 fraylopez

I also would like to know how errors in a boundex context are sent to other when you send command. In the course "DDD en TypeScript: Comunicación entre servicios y aplicaciones" this is not explained :disappointed:

rjurado01 avatar May 06 '23 15:05 rjurado01