gatewaygroup.go 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package repository
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. "github.com/go-nunu/nunu-layout-advanced/internal/model"
  7. "gorm.io/gorm"
  8. )
  9. type GatewayGroupRepository interface {
  10. GetGatewayGroup(ctx context.Context, id int64) (*model.GatewayGroup, error)
  11. AddGatewayGroup(ctx context.Context, req *model.GatewayGroup) error
  12. EditGatewayGroup(ctx context.Context, req *model.GatewayGroup) error
  13. DeleteGatewayGroup(ctx context.Context, req *model.GatewayGroup) error
  14. GetGatewayGroupWhereHostIdNull(ctx context.Context,operator int, count int) (int, error)
  15. GetGatewayGroupByHostId(ctx context.Context, hostId int64) (*[]model.GatewayGroup, error)
  16. }
  17. func NewGatewayGroupRepository(
  18. repository *Repository,
  19. ) GatewayGroupRepository {
  20. return &gatewayGroupRepository{
  21. Repository: repository,
  22. }
  23. }
  24. type gatewayGroupRepository struct {
  25. *Repository
  26. }
  27. func (r *gatewayGroupRepository) GetGatewayGroup(ctx context.Context, id int64) (*model.GatewayGroup, error) {
  28. var gatewayGroup model.GatewayGroup
  29. return &gatewayGroup, nil
  30. }
  31. func (r *gatewayGroupRepository) AddGatewayGroup(ctx context.Context, req *model.GatewayGroup) error {
  32. if err := r.DB(ctx).Create(req).Error; err != nil {
  33. return err
  34. }
  35. return nil
  36. }
  37. func (r *gatewayGroupRepository) EditGatewayGroup(ctx context.Context, req *model.GatewayGroup) error {
  38. if err := r.DB(ctx).Model(&model.GatewayGroup{}).Where("rule_id = ?", req.RuleId).Updates(req).Error; err != nil {
  39. return err
  40. }
  41. return nil
  42. }
  43. func (r *gatewayGroupRepository) DeleteGatewayGroup(ctx context.Context, req *model.GatewayGroup) error {
  44. if err := r.DB(ctx).Model(&model.GatewayGroup{}).Where("id = ?", req.Id).Delete(req).Error; err != nil {
  45. return err
  46. }
  47. return nil
  48. }
  49. func (r *gatewayGroupRepository) GetGatewayGroupWhereHostIdNull(ctx context.Context,operator int, count int) (int, error) {
  50. var id int
  51. subQuery := r.DB(ctx).Model(&model.GateWayGroupIp{}).
  52. Select("gateway_group_id").
  53. Group("gateway_group_id").
  54. Having("COUNT(*) = ?", count)
  55. err := r.DB(ctx).Model(&model.GatewayGroup{}).
  56. Where("operator = ?", operator).
  57. Where("id IN (?)", subQuery).
  58. Where("host_id = ?", 0).
  59. Select("rule_id").First(&id).Error
  60. if err != nil {
  61. if errors.Is(err, gorm.ErrRecordNotFound){
  62. return 0, fmt.Errorf("库存不足,请联系客服补充网关组库存")
  63. }
  64. return 0, err
  65. }
  66. return id, nil
  67. }
  68. func (r *gatewayGroupRepository) GetGatewayGroupByHostId(ctx context.Context, hostId int64) (*[]model.GatewayGroup, error) {
  69. res := []model.GatewayGroup{}
  70. if err := r.DB(ctx).Where("host_id = ?", hostId).Find(&res).Error; err != nil {
  71. return nil, err
  72. }
  73. return &res, nil
  74. }