[BACK-GOV-04] Разработка бизнес-логики soapHandler и интеграция с базой данных

Бэкенд: Логика

Published

October 14, 2026

NoteКраткая карточка задачи
  • Репозиторий / Компонент: gov_identity_soap_mock.
  • Язык: Go (1.27+).
  • Тип задачи: Backend (Бизнес-логика).
  • Статус: Готово к реализации

Описание задачи

Необходимо реализовать функцию soapHandler, которая будет выступать главным контроллером: валидировать метод запроса, извлекать XML-тело, проверять права доступа шлюза и возвращать статус сотрудника из БД.

Инструкция по шагам

  1. Валидация входящего HTTP-запроса: Внутри soapHandler строго ограничить доступ — пропускать только метод POST. Извлекать байты из r.Body через io.ReadAll и выполнять xml.Unmarshal в структуру запроса.
  2. Проверка системного токена (Шаг 1 логики): Написать SQL-запрос к таблице service_access_tokens. Если токен не найден (sql.ErrNoRows) или поле is_active равно false, прерывать выполнение и возвращать ошибку ACCESS_DENIED: Invalid or suspended master token.
  3. Запрос профиля сотрудника (Шаг 2 логики): Реализовать безопасный параметризованный запрос через db.QueryRow к таблице digital_employees, используя очищенный от пробелов и приведенный к нижнему регистру reqData.Email.
  4. Реализация тест-кейсов и матрицы ошибок:
    • Если сотрудника нет в базе — формировать ответ с profile.ErrorMessage = "USER_NOT_FOUND".
    • Если сотрудник найден, но его gov_status == "BLOCKED", возвращать profile.Authorized = false и ошибку GOV_ACCOUNT_BLOCKED.
    • При успешном нахождении со статусом ACTIVE — проставлять profile.Authorized = true и статус SUCCESS.