package repository import ( "context" "errors" "fmt" "github.com/go-nunu/nunu-layout-advanced/internal/model" "gorm.io/gorm" ) type GatewayGroupRepository interface { GetGatewayGroup(ctx context.Context, id int64) (*model.GatewayGroup, error) AddGatewayGroup(ctx context.Context, req *model.GatewayGroup) error EditGatewayGroup(ctx context.Context, req *model.GatewayGroup) error DeleteGatewayGroup(ctx context.Context, req *model.GatewayGroup) error GetGatewayGroupWhereHostIdNull(ctx context.Context,operator int, count int) (int, error) GetGatewayGroupByHostId(ctx context.Context, hostId int64) (*[]model.GatewayGroup, error) } func NewGatewayGroupRepository( repository *Repository, ) GatewayGroupRepository { return &gatewayGroupRepository{ Repository: repository, } } type gatewayGroupRepository struct { *Repository } func (r *gatewayGroupRepository) GetGatewayGroup(ctx context.Context, id int64) (*model.GatewayGroup, error) { var gatewayGroup model.GatewayGroup return &gatewayGroup, nil } func (r *gatewayGroupRepository) AddGatewayGroup(ctx context.Context, req *model.GatewayGroup) error { if err := r.DB(ctx).Create(req).Error; err != nil { return err } return nil } func (r *gatewayGroupRepository) EditGatewayGroup(ctx context.Context, req *model.GatewayGroup) error { if err := r.DB(ctx).Model(&model.GatewayGroup{}).Where("rule_id = ?", req.RuleId).Updates(req).Error; err != nil { return err } return nil } func (r *gatewayGroupRepository) DeleteGatewayGroup(ctx context.Context, req *model.GatewayGroup) error { if err := r.DB(ctx).Model(&model.GatewayGroup{}).Where("id = ?", req.Id).Delete(req).Error; err != nil { return err } return nil } func (r *gatewayGroupRepository) GetGatewayGroupWhereHostIdNull(ctx context.Context,operator int, count int) (int, error) { var id int subQuery := r.DB(ctx).Model(&model.GateWayGroupIp{}). Select("gateway_group_id"). Group("gateway_group_id"). Having("COUNT(*) = ?", count) err := r.DB(ctx).Model(&model.GatewayGroup{}). Where("operator = ?", operator). Where("id IN (?)", subQuery). Where("host_id = ?", 0). Select("rule_id").First(&id).Error if err != nil { if errors.Is(err, gorm.ErrRecordNotFound){ return 0, fmt.Errorf("库存不足,请联系客服补充网关组库存") } return 0, err } return id, nil } func (r *gatewayGroupRepository) GetGatewayGroupByHostId(ctx context.Context, hostId int64) (*[]model.GatewayGroup, error) { res := []model.GatewayGroup{} if err := r.DB(ctx).Where("host_id = ?", hostId).Find(&res).Error; err != nil { return nil, err } return &res, nil }