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 }