> Как хранится история переходов статусов платежей? (Go)
Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: InDrive
Стек: Go
> Пример ответа
В типовом Go-проекте история статусов платежей хранится в отдельной таблице реляционной БД, например payment_status_history. Основные поля: id (первичный ключ), payment_id (внешний ключ к платежу), from_status, to_status, changed_at (timestamp), и опционально changed_by (идентификатор пользователя или системы). Индексы ставятся на payment_id и changed_at для быстрой выборки.
Пример структуры в Go:
GOtype PaymentStatus struct {ID int64 `db:"id"`PaymentID int64 `db:"payment_id"`FromStatus string `db:"from_status"`ToStatus string `db:"to_status"`ChangedAt time.Time `db:"changed_at"`ChangedBy string `db:"changed_by"`}
Для записи истории используется триггер в БД или явный вызов в коде при каждом изменении статуса. В Go это обычно делается в сервисном слое в рамках одной транзакции: обновляется поле status в таблице платежей и вставляется запись в payment_status_history. Такой подход гарантирует консистентность данных.
Для чтения истории - простой запрос с фильтром по payment_id и сортировкой по changed_at DESC. При высоких нагрузках можно добавить партиционирование по дате или использовать отдельную колоночную БД для аналитики.
> Похожие задачи по Go
Какой механизм используется для отправки событий?
Как отправляются события об изменении статусов?
Вы используете один кластер или геораспределенную систему?
Как исправлять застрявшие платежи вручную при наличии реконсайл-джобы
> Похожие задачи по backend
Какой механизм используется для отправки событий?
Как отправляются события об изменении статусов?
Вы используете один кластер или геораспределенную систему?
Как исправлять застрявшие платежи вручную при наличии реконсайл-джобы
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью