mirror of
https://github.com/serty2005/rmser.git
synced 2026-02-05 03:12:34 -06:00
Перевел на multi-tenant
Добавил поставщиков Накладные успешно создаются из фронта
This commit is contained in:
@@ -5,6 +5,8 @@ import (
|
||||
|
||||
"rmser/internal/domain/operations"
|
||||
|
||||
"github.com/google/uuid"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
@@ -16,19 +18,15 @@ func NewRepository(db *gorm.DB) operations.Repository {
|
||||
return &pgRepository{db: db}
|
||||
}
|
||||
|
||||
func (r *pgRepository) SaveOperations(ops []operations.StoreOperation, opType operations.OperationType, dateFrom, dateTo time.Time) error {
|
||||
func (r *pgRepository) SaveOperations(ops []operations.StoreOperation, serverID uuid.UUID, opType operations.OperationType, dateFrom, dateTo time.Time) error {
|
||||
return r.db.Transaction(func(tx *gorm.DB) error {
|
||||
// 1. Удаляем старые записи этого типа, которые пересекаются с периодом.
|
||||
// Так как отчет агрегированный, мы привязываемся к периоду "с" и "по".
|
||||
// Упрощение: удаляем всё, где PeriodFrom совпадает с текущей выгрузкой,
|
||||
// предполагая, что мы всегда грузим одними и теми же квантами (например, месяц или неделя).
|
||||
// Для надежности удалим всё, что попадает в диапазон.
|
||||
if err := tx.Where("op_type = ? AND period_from >= ? AND period_to <= ?", opType, dateFrom, dateTo).
|
||||
// Удаляем старые записи этого типа, но ТОЛЬКО для конкретного сервера
|
||||
if err := tx.Where("rms_server_id = ? AND op_type = ? AND period_from >= ? AND period_to <= ?",
|
||||
serverID, opType, dateFrom, dateTo).
|
||||
Delete(&operations.StoreOperation{}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 2. Вставляем новые
|
||||
if len(ops) > 0 {
|
||||
if err := tx.CreateInBatches(ops, 500).Error; err != nil {
|
||||
return err
|
||||
|
||||
Reference in New Issue
Block a user