90 lines
3.3 KiB
Go
90 lines
3.3 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type QuarantineLineRepository interface {
|
|
Create(ctx context.Context, tx *gorm.DB, line entities.TInventoryQuarantineLineEntity) (entities.TInventoryQuarantineLineEntity, error)
|
|
GetById(ctx context.Context, tx *gorm.DB, id string) (entities.TInventoryQuarantineLineEntity, error)
|
|
GetAllByQuarantineId(ctx context.Context, quarantineId string) ([]entities.TInventoryQuarantineLineEntity, error)
|
|
Update(ctx context.Context, tx *gorm.DB, line entities.TInventoryQuarantineLineEntity) (entities.TInventoryQuarantineLineEntity, error)
|
|
Delete(ctx context.Context, tx *gorm.DB, id string) error
|
|
BulkCreate(ctx context.Context, tx *gorm.DB, lines []entities.TInventoryQuarantineLineEntity) error
|
|
DeleteByQuarantineId(ctx context.Context, tx *gorm.DB, quarantineId string) error
|
|
}
|
|
|
|
type quarantineLineRepository struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
func NewQuarantineLineRepository(db *gorm.DB) QuarantineLineRepository {
|
|
return &quarantineLineRepository{db: db}
|
|
}
|
|
|
|
func (r *quarantineLineRepository) Create(ctx context.Context, tx *gorm.DB, line entities.TInventoryQuarantineLineEntity) (entities.TInventoryQuarantineLineEntity, error) {
|
|
if tx == nil {
|
|
tx = r.db
|
|
}
|
|
if err := tx.WithContext(ctx).Create(&line).Error; err != nil {
|
|
return line, err
|
|
}
|
|
return line, nil
|
|
}
|
|
|
|
func (r *quarantineLineRepository) GetById(ctx context.Context, tx *gorm.DB, id string) (entities.TInventoryQuarantineLineEntity, error) {
|
|
if tx == nil {
|
|
tx = r.db
|
|
}
|
|
var line entities.TInventoryQuarantineLineEntity
|
|
if err := tx.WithContext(ctx).Preload("Product").Preload("Storage").Preload("Quarantine").Preload("Client").First(&line, "id = ?", id).Error; err != nil {
|
|
return line, err
|
|
}
|
|
return line, nil
|
|
}
|
|
|
|
func (r *quarantineLineRepository) GetAllByQuarantineId(ctx context.Context, quarantineId string) ([]entities.TInventoryQuarantineLineEntity, error) {
|
|
var lines []entities.TInventoryQuarantineLineEntity
|
|
if err := r.db.WithContext(ctx).Where("quarantine_id = ?", quarantineId).Preload("Product").Preload("Storage").Preload("Quarantine").Preload("Client").Find(&lines).Error; err != nil {
|
|
return lines, err
|
|
}
|
|
return lines, nil
|
|
}
|
|
|
|
func (r *quarantineLineRepository) Update(ctx context.Context, tx *gorm.DB, line entities.TInventoryQuarantineLineEntity) (entities.TInventoryQuarantineLineEntity, error) {
|
|
if tx == nil {
|
|
tx = r.db
|
|
}
|
|
if err := tx.WithContext(ctx).Model(&entities.TInventoryQuarantineLineEntity{}).Where("id = ?", line.ID).Select("*").Updates(&line).Error; err != nil {
|
|
return line, err
|
|
}
|
|
return line, nil
|
|
}
|
|
|
|
func (r *quarantineLineRepository) Delete(ctx context.Context, tx *gorm.DB, id string) error {
|
|
if tx == nil {
|
|
tx = r.db
|
|
}
|
|
if err := tx.WithContext(ctx).Delete(&entities.TInventoryQuarantineLineEntity{}, "id = ?", id).Error; err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (r *quarantineLineRepository) BulkCreate(ctx context.Context, tx *gorm.DB, lines []entities.TInventoryQuarantineLineEntity) error {
|
|
if tx == nil {
|
|
tx = r.db
|
|
}
|
|
return tx.WithContext(ctx).Create(&lines).Error
|
|
}
|
|
|
|
func (r *quarantineLineRepository) DeleteByQuarantineId(ctx context.Context, tx *gorm.DB, quarantineId string) error {
|
|
if tx == nil {
|
|
tx = r.db
|
|
}
|
|
return tx.WithContext(ctx).Where("quarantine_id = ?", quarantineId).Delete(&entities.TInventoryQuarantineLineEntity{}).Error
|
|
}
|