> Как хранится история переходов статусов платежей? (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:

GO
type 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. При высоких нагрузках можно добавить партиционирование по дате или использовать отдельную колоночную БД для аналитики.

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

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