feat(tasks): implement atomic claims and leases
This commit is contained in:
@@ -33,38 +33,62 @@ const (
|
||||
)
|
||||
|
||||
type PurchaseTask struct {
|
||||
ID string
|
||||
CreatorSubject string
|
||||
CreatedByUserID *string
|
||||
SourceRef *string
|
||||
Title string
|
||||
Description string
|
||||
SKU string
|
||||
ImageAssetID string
|
||||
Quantity int
|
||||
MaxBudgetCents *int64
|
||||
Currency string
|
||||
Status TaskStatus
|
||||
Version int64
|
||||
CancelReason *string
|
||||
CanceledAt *time.Time
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
ID string
|
||||
CreatorSubject string
|
||||
CreatedByUserID *string
|
||||
SourceRef *string
|
||||
Title string
|
||||
Description string
|
||||
SKU string
|
||||
ImageAssetID string
|
||||
Quantity int
|
||||
MaxBudgetCents *int64
|
||||
Currency string
|
||||
Status TaskStatus
|
||||
Version int64
|
||||
ClaimedByUserID *string
|
||||
ClaimedByDeviceID *string
|
||||
ClaimGeneration int64
|
||||
ClaimTokenHash *string
|
||||
ClaimIssuedAt *time.Time
|
||||
ClaimExpiresAt *time.Time
|
||||
CancelReason *string
|
||||
CancelRequestedAt *time.Time
|
||||
CancelRequestedByUserID *string
|
||||
CanceledAt *time.Time
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
}
|
||||
|
||||
type TaskEvent struct {
|
||||
ID string
|
||||
TaskID string
|
||||
ActorUserID *string
|
||||
Type string
|
||||
Message string
|
||||
OccurredAt time.Time
|
||||
ID string
|
||||
TaskID string
|
||||
ActorUserID *string
|
||||
ActorDeviceID *string
|
||||
Type string
|
||||
Message string
|
||||
OccurredAt time.Time
|
||||
}
|
||||
|
||||
type TaskExecution struct {
|
||||
ID string
|
||||
TaskID string
|
||||
AttemptNo int64
|
||||
ClaimGeneration int64
|
||||
UserID string
|
||||
DeviceID string
|
||||
CurrentStep string
|
||||
OrderSubmitted bool
|
||||
StartedAt time.Time
|
||||
LastHeartbeatAt *time.Time
|
||||
FinishedAt *time.Time
|
||||
}
|
||||
|
||||
type TaskDetail struct {
|
||||
Task PurchaseTask
|
||||
Asset Asset
|
||||
Events []TaskEvent
|
||||
Task PurchaseTask
|
||||
Asset Asset
|
||||
Execution *TaskExecution
|
||||
Events []TaskEvent
|
||||
}
|
||||
|
||||
type TaskValidationError struct {
|
||||
@@ -192,7 +216,45 @@ func FormatOptionalCNY(cents *int64) *string {
|
||||
}
|
||||
|
||||
func CanCancel(status TaskStatus) bool {
|
||||
return status == TaskStatusPending
|
||||
return CanAdminCancelImmediately(status) || CanRequestCancel(status)
|
||||
}
|
||||
|
||||
func IsActiveTaskStatus(status TaskStatus) bool {
|
||||
switch status {
|
||||
case TaskStatusClaimed,
|
||||
TaskStatusRunning,
|
||||
TaskStatusWaitingConfirmation:
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
func CanStart(status TaskStatus) bool {
|
||||
return status == TaskStatusClaimed
|
||||
}
|
||||
|
||||
func CanHeartbeat(status TaskStatus) bool {
|
||||
return status == TaskStatusRunning ||
|
||||
status == TaskStatusWaitingConfirmation
|
||||
}
|
||||
|
||||
func CanRelease(status TaskStatus) bool {
|
||||
return status == TaskStatusClaimed
|
||||
}
|
||||
|
||||
func CanAdminCancelImmediately(status TaskStatus) bool {
|
||||
return status == TaskStatusPending ||
|
||||
status == TaskStatusClaimed
|
||||
}
|
||||
|
||||
func CanRequestCancel(status TaskStatus) bool {
|
||||
return status == TaskStatusRunning ||
|
||||
status == TaskStatusWaitingConfirmation
|
||||
}
|
||||
|
||||
func CanAcknowledgeCancel(status TaskStatus) bool {
|
||||
return CanRequestCancel(status)
|
||||
}
|
||||
|
||||
func IsValidTaskStatus(status TaskStatus) bool {
|
||||
|
||||
Reference in New Issue
Block a user