[BACK-GOV-04] Разработка бизнес-логики soapHandler и интеграция с базой данных
Бэкенд: Логика
NoteКраткая карточка задачи
- Репозиторий / Компонент:
gov_identity_soap_mock. - Язык: Go (1.27+).
- Тип задачи: Backend (Бизнес-логика).
- Статус: Готово к реализации
Описание задачи
Необходимо реализовать функцию soapHandler, которая будет выступать главным контроллером: валидировать метод запроса, извлекать XML-тело, проверять права доступа шлюза и возвращать статус сотрудника из БД.
Инструкция по шагам
- Валидация входящего HTTP-запроса: Внутри
soapHandlerстрого ограничить доступ — пропускать только методPOST. Извлекать байты изr.Bodyчерезio.ReadAllи выполнятьxml.Unmarshalв структуру запроса. - Проверка системного токена (Шаг 1 логики): Написать SQL-запрос к таблице
service_access_tokens. Если токен не найден (sql.ErrNoRows) или полеis_activeравноfalse, прерывать выполнение и возвращать ошибкуACCESS_DENIED: Invalid or suspended master token. - Запрос профиля сотрудника (Шаг 2 логики): Реализовать безопасный параметризованный запрос через
db.QueryRowк таблицеdigital_employees, используя очищенный от пробелов и приведенный к нижнему региструreqData.Email. - Реализация тест-кейсов и матрицы ошибок:
- Если сотрудника нет в базе — формировать ответ с
profile.ErrorMessage = "USER_NOT_FOUND". - Если сотрудник найден, но его
gov_status == "BLOCKED", возвращатьprofile.Authorized = falseи ошибкуGOV_ACCOUNT_BLOCKED. - При успешном нахождении со статусом
ACTIVE— проставлятьprofile.Authorized = trueи статусSUCCESS.
- Если сотрудника нет в базе — формировать ответ с