Files
lucent-laravel/src/Core/Record/RecordModule.php
T

115 lines
3.8 KiB
PHP
Raw Normal View History

2026-01-08 23:23:48 +02:00
<?php namespace Lucent\Core\Record;
use Carbon\Carbon;
use Lucent\Core\Data\Record;
2026-01-10 02:09:50 +02:00
use Lucent\Core\Data\RecordPreview;
2026-01-09 19:08:00 +02:00
use Lucent\Core\Data\RecordStatus;
2026-01-10 13:40:33 +02:00
use Lucent\Core\Data\EdgeRecordPreview;
use Lucent\Core\Edge\EdgeModule;
2026-01-08 23:23:48 +02:00
use stdClass;
class RecordModule
{
2026-01-09 19:08:00 +02:00
public static function getStatus(Record $record): RecordStatus
{
if ($record->trashedBy) {
return RecordStatus::TRASHED;
} elseif ($record->publishedBy && $record->scheduledAt) {
return RecordStatus::SCHEDULED_AND_PUBLISHED;
} elseif ($record->publishedBy) {
return RecordStatus::PUBLISHED;
} elseif ($record->scheduledAt) {
return RecordStatus::SCHEDULED;
}
return RecordStatus::DRAFT;
2026-01-09 16:54:42 +02:00
}
2026-01-08 23:23:48 +02:00
public static function toDb(Record $record): array
{
return [
"id" => $record->id,
"schema_id" => $record->schemaId,
2026-01-10 02:09:50 +02:00
"title_field_id" => $record->titleFieldId,
2026-01-08 23:23:48 +02:00
"created_at" => $record->createdAt->toJSON(),
"created_by" => $record->createdBy,
"published_at" => empty($record->publishedAt)
? null
2026-01-09 19:08:00 +02:00
: $record->publishedAt->toJSON(),
2026-01-08 23:23:48 +02:00
"published_by" => $record->publishedBy,
2026-01-09 19:08:00 +02:00
"scheduled_at" => empty($record->scheduledAt)
? null
: $record->scheduledAt->toJSON(),
"scheduled_by" => $record->scheduledBy,
2026-01-08 23:23:48 +02:00
"trashed_at" => empty($record->trashedAt)
? null
2026-01-09 19:08:00 +02:00
: $record->trashedAt->toJSON(),
2026-01-08 23:23:48 +02:00
"trashed_by" => $record->trashedBy,
];
}
public static function fromDb(stdClass $data): Record
{
return new Record(
id: data_get($data, "id"),
schemaId: data_get($data, "schema_id"),
2026-01-10 02:09:50 +02:00
titleFieldId: data_get($data, "title_field_id"),
2026-01-08 23:23:48 +02:00
createdAt: Carbon::parse(data_get($data, "created_at")),
createdBy: data_get($data, "created_by"),
publishedAt: empty(data_get($data, "published_at"))
? null
: Carbon::parse(data_get($data, "published_at")),
publishedBy: data_get($data, "published_by"),
2026-01-09 19:08:00 +02:00
scheduledAt: empty(data_get($data, "scheduled_at"))
? null
: Carbon::parse(data_get($data, "scheduled_at")),
scheduledBy: data_get($data, "scheduled_by"),
2026-01-08 23:23:48 +02:00
trashedAt: empty(data_get($data, "trashed_at"))
? null
: Carbon::parse(data_get($data, "trashed_at")),
trashedBy: data_get($data, "trashed_by"),
);
}
2026-01-10 02:09:50 +02:00
2026-01-10 13:40:33 +02:00
/**
* @param Schema[] $schemas
* @param stdClass $data
* @return RecordPreview
*/
public static function recordPreviewFromDb(
array $schemas,
stdClass $data,
): RecordPreview {
2026-01-10 02:09:50 +02:00
return new RecordPreview(
id: data_get($data, "id"),
schemaId: data_get($data, "schema_id"),
2026-01-10 13:40:33 +02:00
schemaName: collect($schemas)
->where("id", data_get($data, "schema_id"))
->first()->name,
2026-01-10 02:09:50 +02:00
title: data_get($data, "title"),
);
}
2026-01-10 13:40:33 +02:00
/**
* @param Schema[] $schemas
* @param stdClass $data
* @return EdgeRecordPreview
*/
public static function edgeRecordPreviewFromDb(
array $schemas,
stdClass $data,
): EdgeRecordPreview {
return new EdgeRecordPreview(
edge: EdgeModule::fromDb($data),
recordPreview: new RecordPreview(
id: data_get($data, "record_id"),
schemaId: data_get($data, "record_schema_id"),
schemaName: collect($schemas)
->where("id", data_get($data, "record_schema_id"))
->first()->name,
title: data_get($data, "record_title"),
),
);
}
2026-01-08 23:23:48 +02:00
}