*/ protected function casts(): array { return [ 'summary' => 'array', 'metadata' => 'array', 'position' => 'integer', 'started_at' => 'datetime', 'completed_at' => 'datetime', 'failed_at' => 'datetime', 'superseded_at' => 'datetime', ]; } /** * @return BelongsTo */ public function case(): BelongsTo { return $this->belongsTo(ReviewPublicationResolutionCase::class, 'case_id'); } /** * @return BelongsTo */ public function operationRun(): BelongsTo { return $this->belongsTo(OperationRun::class); } public function statusEnum(): ReviewPublicationResolutionStepStatus { return ReviewPublicationResolutionStepStatus::tryFrom((string) $this->status) ?? ReviewPublicationResolutionStepStatus::Pending; } public function stepKeyEnum(): ?ReviewPublicationResolutionStepKey { return ReviewPublicationResolutionStepKey::tryFrom((string) $this->step_key); } /** * @return array{type:string,id:int}|null */ public function proofReference(): ?array { if (! is_string($this->proof_type) || $this->proof_type === '' || ! is_numeric($this->proof_id)) { return null; } return [ 'type' => $this->proof_type, 'id' => (int) $this->proof_id, ]; } /** * @param Builder $query * @return Builder */ public function scopeOrdered(Builder $query): Builder { return $query->orderBy('position')->orderBy('id'); } }