wms-be/modules/att_set/repository/att_set_repository.go

83 lines
2.7 KiB
Go

package repository
import (
"context"
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
"github.com/Caknoooo/go-gin-clean-starter/modules/att_set/query"
"gorm.io/gorm"
)
type AttSetRepository interface {
Create(ctx context.Context, tx *gorm.DB, attSet entities.TAttributSetInstanceEntity) (entities.TAttributSetInstanceEntity, error)
GetById(ctx context.Context, tx *gorm.DB, attSetId string) (entities.TAttributSetInstanceEntity, error)
GetAll(ctx context.Context, filter query.AttSetFilter) ([]entities.TAttributSetInstanceEntity, int64, error)
Update(ctx context.Context, tx *gorm.DB, attSet entities.TAttributSetInstanceEntity) (entities.TAttributSetInstanceEntity, error)
Delete(ctx context.Context, tx *gorm.DB, attSetId string) error
}
type attSetRepository struct {
db *gorm.DB
}
func NewAttSetRepository(db *gorm.DB) AttSetRepository {
return &attSetRepository{db: db}
}
func (r *attSetRepository) Create(ctx context.Context, tx *gorm.DB, attSet entities.TAttributSetInstanceEntity) (entities.TAttributSetInstanceEntity, error) {
if tx == nil {
tx = r.db
}
if err := tx.WithContext(ctx).Create(&attSet).Error; err != nil {
return attSet, err
}
return attSet, nil
}
func (r *attSetRepository) GetById(ctx context.Context, tx *gorm.DB, attSetId string) (entities.TAttributSetInstanceEntity, error) {
if tx == nil {
tx = r.db
}
var attSet entities.TAttributSetInstanceEntity
if err := tx.WithContext(ctx).
Preload("Client").
First(&attSet, "id = ?", attSetId).Error; err != nil {
return attSet, err
}
return attSet, nil
}
func (r *attSetRepository) GetAll(ctx context.Context, filter query.AttSetFilter) ([]entities.TAttributSetInstanceEntity, int64, error) {
db := query.ApplyAttSetFilters(r.db, filter)
var attSets []entities.TAttributSetInstanceEntity
var count int64
db.Model(&entities.TAttributSetInstanceEntity{}).Count(&count)
if filter.PerPage > 0 && filter.Page > 0 {
db = db.Offset((filter.Page - 1) * filter.PerPage).Limit(filter.PerPage)
}
if err := db.Preload("Client").Find(&attSets).Error; err != nil {
return nil, 0, err
}
return attSets, count, nil
}
func (r *attSetRepository) Update(ctx context.Context, tx *gorm.DB, attSet entities.TAttributSetInstanceEntity) (entities.TAttributSetInstanceEntity, error) {
if tx == nil {
tx = r.db
}
if err := tx.WithContext(ctx).Model(&entities.TAttributSetInstanceEntity{}).Select("*").Where("id = ?", attSet.ID).Updates(attSet).Error; err != nil {
return attSet, err
}
return attSet, nil
}
func (r *attSetRepository) Delete(ctx context.Context, tx *gorm.DB, attSetId string) error {
if tx == nil {
tx = r.db
}
if err := tx.WithContext(ctx).Delete(&entities.TAttributSetInstanceEntity{}, "id = ?", attSetId).Error; err != nil {
return err
}
return nil
}