'boolean', 'status' => ProductStatus::class, 'pending_action' => ProductPendingAction::class, 'was_ever_approved' => 'boolean', 'verified_at' => 'datetime', ]; } public function categories(): BelongsToMany { return $this->belongsToMany(Category::class, 'product_categories'); } public function variants(): HasMany { return $this->hasMany(ProductVariant::class); } public function verifiedBy(): BelongsTo { return $this->belongsTo(User::class, 'verified_by_id'); } public function submittedBy(): BelongsTo { return $this->belongsTo(User::class, 'submitted_by_id'); } public function canVerify(): Attribute { return Attribute::make( get: fn () => $this->status === ProductStatus::PENDING, ); } public function isEditable(): Attribute { return Attribute::make( get: fn () => in_array($this->status, [ProductStatus::PENDING, ProductStatus::REJECTED], true), ); } public function pendingActionLabel(): Attribute { return Attribute::make( get: fn () => $this->pending_action?->label(), ); } public function rejectionReason(): Attribute { return Attribute::make( get: fn () => $this->rejection?->reason, ); } public function statusLabel(): Attribute { return Attribute::make( get: fn () => $this->status?->label(), ); } }