Senior
/* Il existe des commandes qui changent d'état au cours de leur cycle de vie. Il est nécessaire de mettre en œuvre une couche de travail avec la base de données : - Enregistrer l'historique des statuts de la commande - Prendre en compte le partitionnement À l'avenir, en dehors de la tâche actuelle, d'autres méthodes seront implémentées : obtenir les statuts par temps, l'historique complet de la commande, etc. */
sobes.tech IA
Réponse de l'IA
Для реализации слоя работы с БД, который сохраняет историю статусов заказов с учетом партицирования, можно использовать следующую архитектуру:
-
Таблица
order_status_historyс колонками:order_id(идентификатор заказа)status(текущий статус)changed_at(время изменения)- другие метаданные (например, кто изменил)
-
Партицирование по времени (например, по месяцам) или по
order_id— зависит от объема и частоты запросов. -
В Go можно реализовать слой с методами:
SaveStatus(orderID string, status string, changedAt time.Time) error— для сохранения новой записи- В дальнейшем — методы для выборки истории по времени или по заказу.
Пример кода на Go с использованием database/sql:
import (
"database/sql"
"time"
)
type OrderStatusHistory struct {
DB *sql.DB
}
func (osh *OrderStatusHistory) SaveStatus(orderID string, status string, changedAt time.Time) error {
query := `INSERT INTO order_status_history (order_id, status, changed_at) VALUES (?, ?, ?)`
_, err := osh.DB.Exec(query, orderID, status, changedAt)
return err
}
Партицирование на уровне базы данных (например, в PostgreSQL) настраивается отдельно, чтобы оптимизировать хранение и запросы.