Ну, давай начнём отсюда. Во-перых, тут какая-то замечательная проверка с юзером, непонятно зачем, ведь, во-первых, тут где-то на уровне выше точно есть валидация, что именно текущий юзер пытается удалить СВОЕ сообщение, а, во-вторых, у тебя ниже получение сообщения по userId & messageId. Как у тебя без юзера могли появиться сообщения от него -- непонятно. Либо попытка залатать дыру неконсистентности, либо хз зачем. Во-вторых, у тебя славная модель Response, которую ты сделал, вероятно, специально для того, чтобы кидать бизнес-эксепшены вместо того, что делать Response.Failed(...), как в цивилизованном мире.