mirror of
https://github.com/serty2005/rmser.git
synced 2026-02-04 19:02:33 -06:00
38 lines
936 B
Go
38 lines
936 B
Go
package operations
|
|
|
|
import (
|
|
"time"
|
|
|
|
"rmser/internal/domain/operations"
|
|
|
|
"github.com/google/uuid"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type pgRepository struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
func NewRepository(db *gorm.DB) operations.Repository {
|
|
return &pgRepository{db: db}
|
|
}
|
|
|
|
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 {
|
|
// Удаляем старые записи этого типа, но ТОЛЬКО для конкретного сервера
|
|
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
|
|
}
|
|
|
|
if len(ops) > 0 {
|
|
if err := tx.CreateInBatches(ops, 500).Error; err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
})
|
|
}
|