Go to file
Aleksey Kashapov 87d0e29202
OPS-474: Refactors amount randomization for new hellgate invoice mutation capability (#46)
* OPS-474: Refactors amount randomization for new hellgate invoice mutation capability

* Retires 'cartNotSupported' in favour of HG's invalid request exception throw through

* Bumps swag
2024-06-21 11:37:53 +03:00
.github OPS-474: Adds support for amount randomization (#45) 2024-05-29 13:18:54 +03:00
apps OPS-474: Refactors amount randomization for new hellgate invoice mutation capability (#46) 2024-06-21 11:37:53 +03:00
config TD-367: Drop retired APIs as of valitydev/swag-payments@37e6f46 (#20) 2022-09-05 13:22:16 +03:00
doc CAPI-23 Add initial project structure (#1) 2016-08-31 20:56:24 +03:00
.dockerignore TD-124: Setup CI/CD with GH Actions (#1) 2022-02-04 19:28:33 +03:00
.env TD-266: Change merch stat to magista proto (#14) 2022-07-18 15:48:02 +03:00
.gitignore TD-222: Reuse valitydev/action-deploy-docker@v2 (#16) 2022-07-18 19:20:03 +03:00
CONTRIBUTING.md TD-195: Remove old payment methods (#9) 2022-04-20 15:07:35 +03:00
Dockerfile OPS-268: Adds default logger permissions (#35) 2023-07-13 16:45:22 +03:00
Dockerfile.dev TD-195: Remove old payment methods (#9) 2022-04-20 15:07:35 +03:00
elvis.config TD-288: Stop responding w/ payment tool tokens (#11) 2022-05-16 11:16:36 +03:00
LICENSE Update file(s) from valitydev/.github 2022-02-21 21:37:41 +00:00
Makefile TD-195: Remove old payment methods (#9) 2022-04-20 15:07:35 +03:00
README.md TD-195: Remove old payment methods (#9) 2022-04-20 15:07:35 +03:00
rebar.config TD-686: Instruments OTEL tracing (#39) 2023-10-26 13:34:48 +03:00
rebar.lock OPS-474: Refactors amount randomization for new hellgate invoice mutation capability (#46) 2024-06-21 11:37:53 +03:00

capi

Сервис предоставляющий третьим сторонам REST API для доступа к нашим системам.

Сборка

Для запуска процесса сборки достаточно выполнить просто:

make

Чтобы запустить полученную сборку в режиме разработки и получить стандартный Erlang shell, нужно всего лишь:

make start

Хозяйке на заметку. При этом используется стандартный Erlang релиз, собранный при помощи relx в режиме разработчика.

Документация

Дальнейшую документацию можно почерпнуть, пройдясь по ссылкам в соответствующем документе.

Реализация идемпотентности запросов

Идемпотентность запросов создания/изменения сущностей обеспечивается специальной подсистемой, которая оперирует несколькими понятиями:

  • ExternalId - внешний идентификатор сущности.
  • Features - значимая часть данных запроса, изменение которых может появлиять на результат выполнения запроса.
  • Schema - рецепт как из полной структуры данных запроса получить Features.

В случае, когда в запросе фигурирует ExternalId, сервис будет обрабатывать запрос идемпотентно. Для структуры данных запроса существует Schema, по которой извлекается Features. Features ассоциируется с переданным ExternalId. При повторе запроса с таким же ExternalId код извлечет Features из новых данных и сравнит их с Features оригинального запроса, в случае совпадения сервис ответит идемпотентно, в противном случае сервис ответит ошибкой с кодом 409.

TODO

  • Вернуть передачу в hellgate контрактора, сразу как только там появятся интерфейс и бизнес-логика управления договорами
  • Ленивое создание мерчанта
  • Error Mapping
  • CORS (текущая версия не знает об операциях и авторизации, что в общем случае неприемлемо)
  • Тотальное логирование
  • При разбиению по месяцу в запросах статистики ответ приходит с разбиением по 30 дням, что не очевидно
  • В сгенеренном swagger коде в handle_request_json следует учесть, что ответ вида {false, Req1, State} невалиден и приводит к 500 ошибке
  • Перевести capi_mock_handler на thrift-чучела
  • Убрать cowlib в тестовые зависимости, когда сборщик сможет качать тестовые зависимости