package partners import ( "context" "furtuna-be/internal/common/logger" "furtuna-be/internal/entity" "go.uber.org/zap" "gorm.io/gorm" ) type PartnerRepository struct { db *gorm.DB } func NewPartnerRepository(db *gorm.DB) *PartnerRepository { return &PartnerRepository{ db: db, } } func (b *PartnerRepository) Create(ctx context.Context, Partner *entity.PartnerDB) (*entity.PartnerDB, error) { err := b.db.Create(Partner).Error if err != nil { logger.ContextLogger(ctx).Error("error when create Partner", zap.Error(err)) return nil, err } return Partner, nil } func (b *PartnerRepository) Update(ctx context.Context, Partner *entity.PartnerDB) (*entity.PartnerDB, error) { if err := b.db.Save(Partner).Error; err != nil { logger.ContextLogger(ctx).Error("error when update Partner", zap.Error(err)) return nil, err } return Partner, nil } func (b *PartnerRepository) GetByID(ctx context.Context, id int64) (*entity.PartnerDB, error) { Partner := new(entity.PartnerDB) if err := b.db.First(Partner, id).Error; err != nil { logger.ContextLogger(ctx).Error("error when get by id Partner", zap.Error(err)) return nil, err } return Partner, nil } func (b *PartnerRepository) GetAll(ctx context.Context, req entity.PartnerSearch) (entity.PartnerList, int, error) { var Partneres []*entity.PartnerDB var total int64 query := b.db query = query.Where("deleted_at is null") if req.Search != "" { query = query.Where("name ILIKE ?", "%"+req.Search+"%") } if req.Name != "" { query = query.Where("name ILIKE ?", "%"+req.Name+"%") } if req.Limit > 0 { query = query.Limit(req.Limit) } if req.Offset > 0 { query = query.Offset(req.Offset) } if err := query.Find(&Partneres).Error; err != nil { logger.ContextLogger(ctx).Error("error when get all Partneres", zap.Error(err)) return nil, 0, err } if err := b.db.Model(&entity.PartnerDB{}).Where(query).Count(&total).Error; err != nil { logger.ContextLogger(ctx).Error("error when count Partneres", zap.Error(err)) return nil, 0, err } return Partneres, int(total), nil } func (b *PartnerRepository) Delete(ctx context.Context, id int64) error { Partner := new(entity.PartnerDB) Partner.ID = id if err := b.db.Delete(Partner).Error; err != nil { return err } return nil }