Files
ismailmasseran 59b571d944
Build Docker Image / build-backend (push) Successful in 46s
Build Docker Image / build-frontend (push) Successful in 19s
DONE: fix naming, add transaction for completion of membership application (#12)
Co-authored-by: ISMAIL MASSERAN <topaz@ISMAILs-Macbook.local>
Reviewed-on: #12
2026-07-15 11:35:45 +08:00

82 lines
1.8 KiB
PHP

<?php
namespace Modules\MembershipApplication\Entities;
use Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Modules\Auth\Entities\User;
use Modules\MembershipApplication\Enums\BoardDecision;
use Modules\MembershipApplication\Enums\ManagementDecision;
use Modules\MembershipApplication\Enums\ReviewStage;
class MembershipApplicationReview extends Model
{
use HasUuids;
protected $table = 'membership_application_reviews';
/**
* @var list<string>
*/
protected $fillable = [
'membership_application_id',
'stage',
'decision',
'remarks',
'reviewer_id',
'reviewed_at',
];
/**
* @var list<string>
*/
protected $hidden = [
];
protected function casts(): array
{
return [
'stage' => ReviewStage::class,
'reviewed_at' => 'datetime',
];
}
public function membershipApplication(): BelongsTo
{
return $this->belongsTo(MembershipApplication::class);
}
public function reviewer(): BelongsTo
{
return $this->belongsTo(User::class, 'reviewer_id');
}
public function managementDecision(): ?ManagementDecision
{
if ($this->stage !== ReviewStage::Management) {
return null;
}
return ManagementDecision::tryFrom($this->decision);
}
public function boardDecision(): ?BoardDecision
{
if ($this->stage !== ReviewStage::Board) {
return null;
}
return BoardDecision::tryFrom($this->decision);
}
public function completionDecision(): ?BoardDecision
{
if ($this->stage !== ReviewStage::Completion) {
return null;
}
return BoardDecision::tryFrom($this->decision);
}
}