package business import ( "context" "kra/internal/biz/business" "kra/internal/service/dto" ) type BusinessPromoteUsecase interface { List(context.Context, business.BusinessPromoteFilter, ...business.ListOption) (*business.BusinessPromotePage, error) } type BusinessPromoteService struct{ uc BusinessPromoteUsecase } func NewBusinessPromoteService(uc *business.BusinessPromoteUsecase) *BusinessPromoteService { return &BusinessPromoteService{uc: uc} } func (s *BusinessPromoteService) List(ctx context.Context, id uint, req *dto.BusinessPromoteQuery) (*dto.BusinessPromotePage, error) { if req == nil || id == 0 { return nil, business.ErrAccountInput } filter := business.BusinessPromoteFilter{UserID: id, BusierID: req.PlatformBusierID} if req.SourceDB != "" { source, err := business.NormalizePlatform(req.SourceDB) if err != nil { return nil, err } filter.SourceDB = source } page, size := req.Page, req.PageSize if page < 1 { page = 1 } if size < 1 { size = 10 } if size > 500 { size = 500 } if page > int(^uint(0)>>1)/size { return nil, business.ErrAccountInput } result, err := s.uc.List(ctx, filter, business.ListOffset((page-1)*size), business.ListLimit(size)) if err != nil { return nil, err } out := &dto.BusinessPromotePage{Rows: make([]*dto.BusinessPromoteResponse, 0, len(result.Rows)), Total: result.Total, Available: result.Available} for _, row := range result.Rows { out.Rows = append(out.Rows, &dto.BusinessPromoteResponse{PromoteID: row.ID, PromoteName: row.Account, SourceDB: row.SourceDB, PlatformName: business.PlatformName(row.SourceDB), PlatformBusierID: row.BusierID}) } return out, nil }