> Как исправлять застрявшие платежи вручную при наличии реконсайл-джобы (Go)

Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: InDrive

Стек: Go

> Пример ответа

При наличии реконсайл-джобы (reconciliation job), которая автоматически сверяет платежи, ручное исправление застрявших платежей требуется только в исключительных случаях - например, когда джоба не может разрешить конфликт из-за неоднозначных данных или ошибок в исходных записях.

Основной подход:

  1. Диагностика причины застревания. Сначала проверяем статус платежа в базе данных и логи реконсайл-джобы. Типичные причины: несоответствие суммы, отсутствие транзакции в платёжной системе, дубликаты или ошибки формата.
  2. Ручное вмешательство через админ-интерфейс или SQL. Для Go-сервиса лучше иметь эндпоинт (например, POST /admin/payments/{id}/resolve), который принимает корректирующие данные (правильный статус, сумму, ID внешней транзакции). Пример:
    GO
    func (h *Handler) ResolvePayment(w http.ResponseWriter, r *http.Request) {
    var req struct {
    PaymentID string `json:"payment_id"`
    Status string `json:"status"`
    ExternalID string `json:"external_id,omitempty"`
    }
    // валидация, проверка прав
    err := h.repo.UpdatePayment(r.Context(), req.PaymentID, req.Status, req.ExternalID)
    if err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
    return
    }
    // после обновления можно вручную запустить реконсайл для этого платежа
    h.reconciliationJob.ProcessSinglePayment(r.Context(), req.PaymentID)
    w.WriteHeader(http.StatusOK)
    }
  3. Синхронизация с реконсайл-джобой. После ручного исправления обязательно запускаем повторную сверку для этого конкретного платежа (как в примере выше), чтобы джоба подтвердила корректность и обновила связанные записи (например, баланс счёта).
  4. Логирование и аудит. Все ручные изменения должны логироваться с указанием оператора, времени и причины. Это критично для отладки и соответствия требованиям.

Важно: Ручное исправление - временная мера. Если такие случаи повторяются, нужно дорабатывать реконсайл-джобу: добавлять обработку краевых случаев, улучшать маппинг данных или увеличивать таймауты. В идеале, ручное вмешательство должно быть сведено к нулю.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью