Senior
/* Existují objednávky, které v průběhu svého životního cyklu mění stavy. Je třeba implementovat vrstvu práce s databází: - Ukládat historii stavů objednávky - Zohlednit partičování V budoucnu, mimo rámec aktuálního úkolu, budou implementovány další metody: získání stavů podle času, úplná historie objednávky atd. */
sobes.tech AI
Odpověď od AI
Для реализации слоя работы с БД, который сохраняет историю статусов заказов с учетом партицирования, можно использовать следующую архитектуру:
-
Таблица
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) настраивается отдельно, чтобы оптимизировать хранение и запросы.