Сохранить документ в RethinkDB, выполнив преобразования

 
 
 
Сообщения:6
Я пишу рест-сервис на спринг буте. На данный момент сервис должен выполнять такую бизнес-логику:

1) Принять на эндпоинт пакет с ведомостью в виде JSON. Пакет состоит из заголовка и вложенного документа, который может быть ведомостями разных видов. Разные ведомости приходят на разные эндпоинты.
2) Нужно извлечь из JSON несколько полей из заголовка, провалидировать одно поле, извлечь всю ведомость и сохранить в RethinkDB.
3) При сохранении нужно вычислить хэш вложенной ведомости. Если хэш совпадает с хэшем ведомости, которая уже есть в бд, то она игнорируется. Если хэши разные, а айди одинаковые, ведомость обновляется в базе.
4) ВОзвращается ответ, содержащий два поля из заголовка и дату.

Проблема в том, в каком виде передавать ведомость из контроллера в сервис и в репозиторий, чтобы выполнить все действия. RethinkDB умеет сохранять данные как String json и как MapObject (это класс мапы из драйвера). Кроме того, даты нужно сохранять в виде OffsetDateTime, потому что только сохранение в этом формате присутствует в документации и только такой формат позволяет делать выборку из RethinkDB по датам. Ведомость надо передавать в таком виде, чтобы от нее можно было взять хэш, но не брать хэш от заголовка. При сохранении в БД надо добавить в документ несколько своих полей.

Как это сделать с наименьшим числом преобразований? Сразу в контроллере десериализовать JSON в MapObject, упаковать в класс, внутри которого документ разделяется на заголовок и сам документ и в таком виде передавать в другие слои приложения?
 
Модераторы:wedens
Сейчас эту тему просматривают:Нет