package service import ( "context" "fmt" v1 "github.com/go-nunu/nunu-layout-advanced/api/v1" "github.com/go-nunu/nunu-layout-advanced/internal/model" "github.com/go-nunu/nunu-layout-advanced/internal/repository" "strconv" ) type UdpLimitService interface { GetUdpLimit(ctx context.Context, id int64) (*model.UdpLimit, error) AddUdpLimit(ctx context.Context, req *v1.UdpLimitRequest) (string, error) UpdateUdpLimit(ctx context.Context, req *v1.UdpLimitRequest) (string, error) DeleteUdpLimit(ctx context.Context, UdpLimitId int) (string, error) } func NewUdpLimitService( service *Service, udpLimitRepository repository.UdpLimitRepository, required RequiredService, crawler CrawlerService, parser ParserService, ) UdpLimitService { return &udpLimitService{ Service: service, udpLimitRepository: udpLimitRepository, required: required, crawler: crawler, parser: parser, } } type udpLimitService struct { *Service udpLimitRepository repository.UdpLimitRepository required RequiredService crawler CrawlerService parser ParserService } func (s *udpLimitService) GetUdpLimit(ctx context.Context, id int64) (*model.UdpLimit, error) { return s.udpLimitRepository.GetUdpLimit(ctx, id) } func (s *udpLimitService) AddUdpLimit(ctx context.Context, req *v1.UdpLimitRequest) (string, error) { formData := map[string]interface{}{ "tag": req.Tag, "qos_packet_count": req.QosPacketCount, "qos_packet_duration": req.QosPacketDuration, "max_conn_count": req.MaxConnCount, "bps": req.Bps, "max_bytes_month": req.MaxBytesMonth, "expired_at": "", } respBody, err := s.required.SendForm(ctx, "admin/info/waf_udp_limit/new", "admin/new/waf_udp_limit", formData) if err != nil { return "", err } // 解析响应内容中的 alert 消息 res, err := s.parser.ParseAlert(string(respBody)) if err != nil { return "", err } if res != "" { return "", fmt.Errorf(res) } udpLimitId, err := s.parser.GetRuleId(ctx, respBody) if err != nil { return "", err } fmt.Println("=================================================", udpLimitId) return "", nil } func (s *udpLimitService) UpdateUdpLimit(ctx context.Context, req *v1.UdpLimitRequest) (string, error) { formData := map[string]interface{}{ "tag": req.Tag, "waf_udp_limit_id": req.WafUdpLimitId, "qos_packet_count": req.QosPacketCount, "qos_packet_duration": req.QosPacketDuration, "max_conn_count": req.MaxConnCount, "bps": req.Bps, "max_bytes_month": req.MaxBytesMonth, "expired_at": "", } respBody, err := s.required.SendForm(ctx, "admin/info/waf_udp_limit/edit?&__goadmin_edit_pk="+strconv.Itoa(req.WafUdpLimitId), "admin/edit/waf_udp_limit", formData) if err != nil { return "", err } // 解析响应内容中的 alert 消息 res, err := s.parser.ParseAlert(string(respBody)) if err != nil { return "", err } if res != "" { return "", fmt.Errorf(res) } return "", nil } func (s *udpLimitService) DeleteUdpLimit(ctx context.Context, WafUdpLimitId int) (string, error) { res, err := s.crawler.DeleteRule(ctx, WafUdpLimitId, "admin/delete/waf_udp_limit?page=1&__pageSize=10&__sort=waf_udp_limit_id&__sort_type=desc") if err != nil { return "", err } return res, nil }