feat: implement InternshipStatus enum

This commit is contained in:
2025-11-29 14:33:31 +01:00
parent 0ff193fd1e
commit e309d8ea5d
3 changed files with 54 additions and 9 deletions

View File

@@ -0,0 +1,22 @@
<?php
namespace App\Enums;
enum InternshipStatus: string
{
case SUBMITTED = 'SUBMITTED';
case CONFIRMED_BY_COMPANY = 'CONFIRMED_BY_COMPANY';
case CONFIRMED_BY_ADMIN = 'CONFIRMED_BY_ADMIN';
case DENIED_BY_COMPANY = 'DENIED_BY_COMPANY';
case DENIED_BY_ADMIN = 'DENIED_BY_ADMIN';
case DEFENDED = 'DEFENDED';
case NOT_DEFENDED = 'NOT_DEFENDED';
public static function all(): array
{
return array_map(fn($case) => $case->value, self::cases());
}
}

View File

@@ -33,6 +33,20 @@ class InternshipStatusData extends Model
'updated_at', 'updated_at',
]; ];
protected $table = 'internship_statuses';
/**
* Get the attributes that should be cast.
*
* @return array<string, string>
*/
protected function casts(): array
{
return [
'status' => '\App\Enums\InternshipStatus',
];
}
public function modifiedBy() public function modifiedBy()
{ {
return $this->belongsTo(User::class, 'modified_by'); return $this->belongsTo(User::class, 'modified_by');
@@ -43,7 +57,7 @@ class InternshipStatusData extends Model
return [ return [
'id' => $this->id, 'id' => $this->id,
'internship_id' => $this->internship_id, 'internship_id' => $this->internship_id,
'status' => $this->status, 'status' => $this->status->value,
'changed' => $this->changed, 'changed' => $this->changed,
'note' => $this->note, 'note' => $this->note,
'modified_by' => $this->modifiedBy, 'modified_by' => $this->modifiedBy,

View File

@@ -14,20 +14,29 @@ export interface NewInternshipStatusData {
export enum InternshipStatus { export enum InternshipStatus {
SUBMITTED = 'SUBMITTED', SUBMITTED = 'SUBMITTED',
CONFIRMED = 'CONFIRMED',
DENIED = 'DENIED', CONFIRMED_BY_COMPANY = 'CONFIRMED_BY_COMPANY',
CONFIRMED_BY_ADMIN = 'CONFIRMED_BY_ADMIN',
DENIED_BY_COMPANY = 'DENIED_BY_COMPANY',
DENIED_BY_ADMIN = 'DENIED_BY_ADMIN',
DEFENDED = 'DEFENDED', DEFENDED = 'DEFENDED',
NOT_DEFENDED = 'NOT_DEFENDED' NOT_DEFENDED = 'NOT_DEFENDED',
}; }
export function prettyInternshipStatus(status: InternshipStatus) { export function prettyInternshipStatus(status: InternshipStatus) {
switch (status) { switch (status) {
case InternshipStatus.SUBMITTED: case InternshipStatus.SUBMITTED:
return "Zadané"; return "Zadané";
case InternshipStatus.CONFIRMED: case InternshipStatus.CONFIRMED_BY_COMPANY:
return "Potvrdené"; return "Potvrdené firmou";
case InternshipStatus.DENIED: case InternshipStatus.CONFIRMED_BY_ADMIN:
return "Zamietnuté"; return "Potvrdené garantom";
case InternshipStatus.DENIED_BY_COMPANY:
return "Zamietnuté firmou";
case InternshipStatus.DENIED_BY_ADMIN:
return "Zamietnuté garantom";
case InternshipStatus.DEFENDED: case InternshipStatus.DEFENDED:
return "Obhájené"; return "Obhájené";
case InternshipStatus.NOT_DEFENDED: case InternshipStatus.NOT_DEFENDED: