Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
完成运营商实名回调、业务事件观测序列与受控配置装配,同时恢复 UR43 已交付的 packages[].remove 字段及旧响应兼容,统一更新 OpenSpec、OpenAPI 和交付文档。 Constraint: 七月测试环境里程碑不新增或运行自动化测试 Rejected: 以必填 operation_type 替换 packages[].remove | 会破坏已交付前端契约 Confidence: high Scope-risk: broad Directive: 后续修改系列套餐管理接口必须保持 packages[].remove 和 ShopSeriesGrantResponse 兼容 Tested: go run ./cmd/gendocs;go build -buildvcs=false ./...;openspec validate complete-july-iteration-test-release --strict;git diff --check Not-tested: 按本 Change 约定未运行 go test,真实运营商与 Gateway 联调延期
46 lines
1.3 KiB
Go
46 lines
1.3 KiB
Go
package queue
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"strconv"
|
|
|
|
"github.com/hibiken/asynq"
|
|
|
|
cardapp "github.com/break/junhong_cmp_fiber/internal/application/cardobservation"
|
|
"github.com/break/junhong_cmp_fiber/pkg/constants"
|
|
pkgerrors "github.com/break/junhong_cmp_fiber/pkg/errors"
|
|
)
|
|
|
|
// CardObservationSeriesScheduler 将固定阶梯任务提交到独立队列。
|
|
type CardObservationSeriesScheduler struct {
|
|
client *Client
|
|
}
|
|
|
|
// NewCardObservationSeriesScheduler 创建卡观测序列任务调度器。
|
|
func NewCardObservationSeriesScheduler(client *Client) *CardObservationSeriesScheduler {
|
|
return &CardObservationSeriesScheduler{client: client}
|
|
}
|
|
|
|
// Enqueue 以稳定 series_id + attempt 任务 ID 零重试入队。
|
|
func (s *CardObservationSeriesScheduler) Enqueue(ctx context.Context, payload cardapp.SeriesTaskPayload) error {
|
|
if s == nil || s.client == nil {
|
|
return pkgerrors.New(pkgerrors.CodeInternalError, "卡观测序列队列客户端未配置")
|
|
}
|
|
taskID := "card-series-" + payload.SeriesID + "-" + strconv.Itoa(payload.Attempt)
|
|
err := s.client.EnqueueTask(
|
|
ctx,
|
|
constants.TaskTypeCardObservationSeries,
|
|
payload,
|
|
asynq.TaskID(taskID),
|
|
asynq.ProcessAt(payload.ScheduledAt),
|
|
asynq.MaxRetry(0),
|
|
)
|
|
if errors.Is(err, asynq.ErrTaskIDConflict) {
|
|
return nil
|
|
}
|
|
return err
|
|
}
|
|
|
|
var _ cardapp.SeriesScheduler = (*CardObservationSeriesScheduler)(nil)
|