tgoop.com/super_oleg_dev/160
Last Update:
Нижний уровень C4 - Code.
Но у нас осталось много не проработанных вещей, поэтому дальше я работаю сразу над несколькими:
- сущности бэкенда
- структура API роутов
- основные классы и методы
- описание сценариев работы
Список сущностей похож на БД, но собран в удобные для дальнейшего использования объекты.
API роуты старался делать не слишком низкоуровневыми, а под основные кейсы использования.
Например, у каждого приложения могут быть пресеты, в каждом свой маппинг микрофронтов.
Сначала я описал эндпоинты вида /:tenant/:app/:preset/mapping
где работа с сущностью Mapping
, но понял что по отдельности они не нужны, и удобнее сразу работать со всеми маппингами - например на GET /:tenant/:app/mapping
возвращать Record<Preset, Mapping>
.
Для основных классов из C4 Components описал методы и логику их работы. Вообще, получилось что эти сервисы и их методы 1 к 1 соотносятся с API эндпоинтами, и кажется это не очень корректно, но может измениться после рефакторинга - далее планирую найти и вынести общую логику из сервисов.
И конкретный пример:
Есть сервис HistoryService
, сигнатура одного из его методов - rollback( Tenant, Application, History? ): History[]
- он будет использоваться для откатов по истории изменения маппингов.
Для метода rollback описана логика работы:
- В рамках одной транзакции, получаем в БД соответствующую запись History либо берем предыдущую
- Находим все записи History с timestamp выше, проходим по ним
- В цикле, в таблице Mapping находим все записи под текущие History и Application
- Удаляем эти записи Mapping, в конце удаляем эту запись History
- И наконец обновляем поле Revision для текущей записи Application
На этом этапе много сложностей, так как буквально зайти дальше - это уже писать код, держать все в голове и прорабатывать низкоуровневые моменты оказалось сложнее всего, особенно в областях с множеством неизвестных.
Из интересного, сильно задумался над процессом загрузки файлов микрофронта через API платформы в файловое хранилище s3.
План примерно такой:
- CLI утилита в CI/CD создает объект FormData, считывает контент файлов, добавляет туда и отправляет стрим на бэкенд
- Бэкенд не буферизует эти данные, а сразу перенаправляет стрим в s3 через aws-sdk
Тут стоит сделать отдельно прототип и убедиться что нет подводных камней.
BY SuperOleg dev notes
Share with your friend now:
tgoop.com/super_oleg_dev/160