123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- package admin
- import (
- "context"
- "fmt"
- v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
- adminApi "github.com/go-nunu/nunu-layout-advanced/api/v1/admin"
- "github.com/go-nunu/nunu-layout-advanced/internal/repository"
- "github.com/go-nunu/nunu-layout-advanced/internal/repository/admin"
- wafRep "github.com/go-nunu/nunu-layout-advanced/internal/repository/api/waf"
- "github.com/go-nunu/nunu-layout-advanced/internal/service"
- "slices"
- "time"
- )
- type WafManageService interface {
- GetWafManageList(ctx context.Context,req adminApi.WafManageList) (*v1.PaginatedResponse[adminApi.WafManageListRes], error)
- RecoverWaf(ctx context.Context,req adminApi.RecoverWafRequest) error
- SyncExecuteRenewalActions(ctx context.Context,req adminApi.RecoverWafRequest) error
- }
- func NewWafManageService(
- service *service.Service,
- wafManageRepository admin.WafManageRepository,
- globalLimitRep wafRep.GlobalLimitRepository,
- wafOperations WafOperationsService,
- hostRep repository.HostRepository,
- ) WafManageService {
- return &wafManageService{
- Service: service,
- wafManageRepository: wafManageRepository,
- globalLimitRep: globalLimitRep,
- wafOperations: wafOperations,
- hostRep: hostRep,
- }
- }
- type wafManageService struct {
- *service.Service
- wafManageRepository admin.WafManageRepository
- globalLimitRep wafRep.GlobalLimitRepository
- wafOperations WafOperationsService
- hostRep repository.HostRepository
- }
- func (s *wafManageService) GetWafManageList(ctx context.Context,req adminApi.WafManageList) (*v1.PaginatedResponse[adminApi.WafManageListRes], error) {
- return s.wafManageRepository.GetWafManageList(ctx, req)
- }
- func (s *wafManageService) RecoverWaf(ctx context.Context,req adminApi.RecoverWafRequest) error {
- wafModels, err := s.globalLimitRep.GetGlobalLimitsByHostIds(ctx, req.HostIds)
- if err != nil {
- return err
- }
- err = s.wafOperations.RecoverPlans(ctx, *wafModels, "closed")
- if err != nil {
- return err
- }
- return nil
- }
- func (s *wafManageService) SyncExecuteRenewalActions(ctx context.Context,req adminApi.RecoverWafRequest) error {
- wafData, err := s.hostRep.GetExpireTimeByHostId(ctx, req.HostIds)
- if err != nil {
- return err
- }
- wafExpireTime, err := s.globalLimitRep.GetGlobalLimitsByHostIds(ctx, req.HostIds)
- if err != nil {
- return err
- }
- var notExpiredHostIds []int
- for _, limit := range *wafExpireTime {
- if limit.ExpiredAt >= time.Now().Unix() - 1 * 60 * 60 {
- notExpiredHostIds = append(notExpiredHostIds, limit.HostId)
- }
- }
- var renewalRequest []RenewalRequest
- for i := range wafData {
- if slices.Contains(notExpiredHostIds, wafData[i].HostId) {
- continue
- }
- renewalRequest = append(renewalRequest, RenewalRequest{
- HostId: wafData[i].HostId,
- ExpiredAt: wafData[i].ExpiredAt,
- })
- }
- err = s.wafOperations.ExecuteRenewalActions(ctx, renewalRequest)
- if err != nil {
- return err
- }
- if len(notExpiredHostIds) != 0 {
- return fmt.Errorf("续费失败,套餐距离到期时间不能小于一小时,实例ID:%v", notExpiredHostIds)
- }
- return nil
- }
|