v7.0.0-beta.1 release
This commit is contained in:
commit
6595fd0eb5
3967 files changed
+1875383
No files matched your search
@@ -0,0 +1,178 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ScheduleResource extends BaseApiResource
|
||||
{
|
||||
/**
|
||||
* 스케줄 리소스를 배열로 변환합니다.
|
||||
*
|
||||
* @param Request $request HTTP 요청 객체
|
||||
* @return array<string, mixed> 변환된 스케줄 데이터 배열
|
||||
*/
|
||||
public function toArray(Request $request): array
|
||||
{
|
||||
return [
|
||||
'id' => $this->getValue('id'),
|
||||
'name' => $this->getValue('name'),
|
||||
'description' => $this->getValue('description'),
|
||||
'type' => $this->getValue('type')?->value ?? $this->getValue('type'),
|
||||
'type_label' => $this->getTypeLabel(),
|
||||
'command' => $this->getValue('command'),
|
||||
'expression' => $this->getValue('expression'),
|
||||
'frequency' => $this->getValue('frequency')?->value ?? $this->getValue('frequency'),
|
||||
'frequency_label' => $this->getFrequencyLabel(),
|
||||
'without_overlapping' => (bool) $this->getValue('without_overlapping'),
|
||||
'run_in_maintenance' => (bool) $this->getValue('run_in_maintenance'),
|
||||
'timeout' => $this->getValue('timeout'),
|
||||
'is_active' => (bool) $this->getValue('is_active'),
|
||||
'last_result' => $this->getValue('last_result')?->value ?? $this->getValue('last_result'),
|
||||
'last_result_label' => $this->getLastResultLabel(),
|
||||
'last_run_at' => $this->when(
|
||||
$this->getValue('last_run_at'),
|
||||
fn () => $this->formatDateTimeForUser($this->getValue('last_run_at'))
|
||||
),
|
||||
'last_duration' => $this->resource->last_duration ?? null,
|
||||
'next_run_at' => $this->when(
|
||||
$this->getValue('next_run_at'),
|
||||
fn () => $this->formatDateTimeForUser($this->getValue('next_run_at'))
|
||||
),
|
||||
'extension_type' => $this->getValue('extension_type')?->value ?? $this->getValue('extension_type'),
|
||||
'extension_identifier' => $this->getValue('extension_identifier'),
|
||||
|
||||
// 관계형 데이터
|
||||
'creator' => $this->whenLoaded('creator', function () {
|
||||
$creator = $this->getValue('creator');
|
||||
|
||||
return $creator ? [
|
||||
'uuid' => $creator->uuid,
|
||||
'name' => $creator->name,
|
||||
] : null;
|
||||
}),
|
||||
|
||||
...$this->formatTimestamps(),
|
||||
...$this->resourceMeta($request),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 리소스별 권한 매핑을 반환합니다.
|
||||
*
|
||||
* @return array<string, string>
|
||||
*/
|
||||
protected function abilityMap(): array
|
||||
{
|
||||
return [
|
||||
'can_create' => 'core.schedules.create',
|
||||
'can_update' => 'core.schedules.update',
|
||||
'can_delete' => 'core.schedules.delete',
|
||||
'can_run' => 'core.schedules.run',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 목록용 간단한 형태의 배열을 반환합니다.
|
||||
*
|
||||
* @param Request|null $request HTTP 요청
|
||||
* @return array<string, mixed> 간략한 스케줄 정보
|
||||
*/
|
||||
public function toListArray(?Request $request = null): array
|
||||
{
|
||||
$request = $request ?? request();
|
||||
|
||||
return [
|
||||
'id' => $this->getValue('id'),
|
||||
'name' => $this->getValue('name'),
|
||||
'type' => $this->getValue('type')?->value ?? $this->getValue('type'),
|
||||
'type_label' => $this->getTypeLabel(),
|
||||
'command' => $this->getValue('command'),
|
||||
'expression' => $this->getValue('expression'),
|
||||
'frequency' => $this->getValue('frequency')?->value ?? $this->getValue('frequency'),
|
||||
'frequency_label' => $this->getFrequencyLabel(),
|
||||
'without_overlapping' => (bool) $this->getValue('without_overlapping'),
|
||||
'run_in_maintenance' => (bool) $this->getValue('run_in_maintenance'),
|
||||
'is_active' => (bool) $this->getValue('is_active'),
|
||||
'last_result' => $this->getValue('last_result')?->value ?? $this->getValue('last_result'),
|
||||
'last_result_label' => $this->getLastResultLabel(),
|
||||
'last_run_at' => $this->getValue('last_run_at')
|
||||
? $this->formatDateTimeForUser($this->getValue('last_run_at'))
|
||||
: null,
|
||||
'last_duration' => $this->resource->last_duration ?? null,
|
||||
'next_run_at' => $this->getValue('next_run_at')
|
||||
? $this->formatDateTimeForUser($this->getValue('next_run_at'))
|
||||
: null,
|
||||
'creator' => $this->resource->relationLoaded('creator') && $this->resource->creator
|
||||
? [
|
||||
'uuid' => $this->resource->creator->uuid,
|
||||
'name' => $this->resource->creator->name,
|
||||
]
|
||||
: null,
|
||||
'created_at' => $this->getValue('created_at')
|
||||
? $this->formatDateForUser($this->getValue('created_at'))
|
||||
: null,
|
||||
...$this->resourceMeta($request),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 작업 유형 라벨을 반환합니다.
|
||||
*
|
||||
* @return string|null 유형 라벨
|
||||
*/
|
||||
protected function getTypeLabel(): ?string
|
||||
{
|
||||
$type = $this->getValue('type');
|
||||
|
||||
if (! $type) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (is_object($type) && method_exists($type, 'label')) {
|
||||
return $type->label();
|
||||
}
|
||||
|
||||
return __('schedule.type.'.$type);
|
||||
}
|
||||
|
||||
/**
|
||||
* 실행 주기 라벨을 반환합니다.
|
||||
*
|
||||
* @return string|null 주기 라벨
|
||||
*/
|
||||
protected function getFrequencyLabel(): ?string
|
||||
{
|
||||
$frequency = $this->getValue('frequency');
|
||||
|
||||
if (! $frequency) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (is_object($frequency) && method_exists($frequency, 'label')) {
|
||||
return $frequency->label();
|
||||
}
|
||||
|
||||
return __('schedule.frequency.'.$frequency);
|
||||
}
|
||||
|
||||
/**
|
||||
* 마지막 실행 결과 라벨을 반환합니다.
|
||||
*
|
||||
* @return string|null 결과 라벨
|
||||
*/
|
||||
protected function getLastResultLabel(): ?string
|
||||
{
|
||||
$result = $this->getValue('last_result');
|
||||
|
||||
if (! $result) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (is_object($result) && method_exists($result, 'label')) {
|
||||
return $result->label();
|
||||
}
|
||||
|
||||
return __('schedule.result.'.$result);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user