package repository import ( "context" "github.com/Caknoooo/go-gin-clean-starter/database/entities" "github.com/Caknoooo/go-gin-clean-starter/modules/aisle/query" "gorm.io/gorm" ) type AisleRepository interface { Create(ctx context.Context, tx *gorm.DB, aisle entities.MAisleEntity) (entities.MAisleEntity, error) GetById(ctx context.Context, tx *gorm.DB, aisleId string) (entities.MAisleEntity, error) GetAll(ctx context.Context, filter query.AisleFilter) ([]entities.MAisleEntity, int64, error) Update(ctx context.Context, tx *gorm.DB, aisle entities.MAisleEntity) (entities.MAisleEntity, error) Delete(ctx context.Context, tx *gorm.DB, aisleId string) error } type aisleRepository struct { db *gorm.DB } func NewAisleRepository(db *gorm.DB) AisleRepository { return &aisleRepository{db: db} } func (r *aisleRepository) Create(ctx context.Context, tx *gorm.DB, aisle entities.MAisleEntity) (entities.MAisleEntity, error) { if tx == nil { tx = r.db } if err := tx.WithContext(ctx).Create(&aisle).Error; err != nil { return aisle, err } return aisle, nil } func (r *aisleRepository) GetById(ctx context.Context, tx *gorm.DB, aisleId string) (entities.MAisleEntity, error) { if tx == nil { tx = r.db } var aisle entities.MAisleEntity if err := tx.WithContext(ctx).Preload("Zona").Preload("DimUom").Preload("WeightUom").Preload("Client").First(&aisle, "id = ?", aisleId).Error; err != nil { return aisle, err } return aisle, nil } func (r *aisleRepository) GetAll(ctx context.Context, filter query.AisleFilter) ([]entities.MAisleEntity, int64, error) { var aisles []entities.MAisleEntity var total int64 db := query.ApplyAisleFilters(r.db, filter) db.Find(&aisles).Count(&total) return aisles, total, nil } func (r *aisleRepository) Update(ctx context.Context, tx *gorm.DB, aisle entities.MAisleEntity) (entities.MAisleEntity, error) { if tx == nil { tx = r.db } if err := tx.WithContext(ctx).Save(&aisle).Error; err != nil { return aisle, err } return aisle, nil } func (r *aisleRepository) Delete(ctx context.Context, tx *gorm.DB, aisleId string) error { if tx == nil { tx = r.db } if err := tx.WithContext(ctx).Delete(&entities.MAisleEntity{}, "id = ?", aisleId).Error; err != nil { return err } return nil }