The use case should
- Check if the payment exists (trying to load it from the repository)
- Check if the payment is cancelable (e.g. not a booked external payment)
- Change payment object
- Write changed payment object to database
- Return success/Failure result (with payment id and possible failure reason)
Implementation details:
add an isCanceled property to the direct debit