package repository import ( "context" "github.com/Caknoooo/go-gin-clean-starter/database/entities" "github.com/Caknoooo/go-gin-clean-starter/modules/uom/query" "gorm.io/gorm" ) type UomRepository interface { Create(ctx context.Context, tx *gorm.DB, uom entities.MUomEntity) (entities.MUomEntity, error) GetById(ctx context.Context, tx *gorm.DB, uomId string) (entities.MUomEntity, error) GetAll(ctx context.Context, filter query.UomFilter) ([]entities.MUomEntity, int64, error) Update(ctx context.Context, tx *gorm.DB, uom entities.MUomEntity) (entities.MUomEntity, error) Delete(ctx context.Context, tx *gorm.DB, uomId string) error } type uomRepository struct { db *gorm.DB } func NewUomRepository(db *gorm.DB) UomRepository { return &uomRepository{db: db} } func (r *uomRepository) Create(ctx context.Context, tx *gorm.DB, uom entities.MUomEntity) (entities.MUomEntity, error) { if tx == nil { tx = r.db } if err := tx.WithContext(ctx).Create(&uom).Error; err != nil { return uom, err } return uom, nil } func (r *uomRepository) GetById(ctx context.Context, tx *gorm.DB, uomId string) (entities.MUomEntity, error) { if tx == nil { tx = r.db } var uom entities.MUomEntity if err := tx.WithContext(ctx).Preload("Client").First(&uom, "id = ?", uomId).Error; err != nil { return uom, err } return uom, nil } func (r *uomRepository) GetAll(ctx context.Context, filter query.UomFilter) ([]entities.MUomEntity, int64, error) { var uoms []entities.MUomEntity var total int64 db := r.db.Model(&entities.MUomEntity{}) db = query.ApplyUomFilters(db, filter) if err := db.Count(&total).Error; err != nil { return nil, 0, err } err := db.Limit(filter.PerPage).Offset(filter.Page).Preload("Client").Find(&uoms).Error return uoms, total, err } func (r *uomRepository) Update(ctx context.Context, tx *gorm.DB, uom entities.MUomEntity) (entities.MUomEntity, error) { if tx == nil { tx = r.db } if err := tx.WithContext(ctx). Model(&entities.MUomEntity{}). Where("id = ?", uom.ID). Select("*"). Updates(uom).Error; err != nil { return uom, err } return uom, nil } func (r *uomRepository) Delete(ctx context.Context, tx *gorm.DB, uomId string) error { if tx == nil { tx = r.db } if err := tx.WithContext(ctx).Delete(&entities.MUomEntity{}, "id = ?", uomId).Error; err != nil { return err } return nil }