zalando / friboo

Utility library for writing microservices in Clojure, with support for Swagger and OAuth
Apache License 2.0
118 stars 16 forks source link

Database exception middleware pattern #122

Open sbgreene1307 opened 6 years ago

sbgreene1307 commented 6 years ago

The current setup for db commands seems tightly coupled to the HystrixBadRequestException.

This forces me to write an ignore-function that will propagate exceptions I care about and then an exception-wrapper function to process database errors. For example, if an insert fails on a table with a duplicate key error, then I propagate this by matching the message pattern, setting the HystrixBadRequestException message to something useful for me, and finally catching this exception in my wrapping function just to get the message. This requires new developers to know to use the wrap-sql-exception function.

As an alternative, friboo.system/db.clj, could implement the middleware pattern as explained in this article.

This would allow me to write wrapper functions for the exceptions as I see fit and other devs won't need to worry about remembering to wrap their sql cmds.

dazld commented 6 years ago

thanks for the proposal! would you like to take a crack at a PR showing an example?

sbgreene1307 commented 6 years ago

@dazld An example with the current pattern I have to follow?

dazld commented 6 years ago

no, I think I've understood your current pain. I'd be interested in what your solution would look like.