79 lines
2.5 KiB
PHP
79 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use CodeIgniter\Model;
|
|
|
|
class AppointmentPreviewModel extends Model
|
|
{
|
|
protected $table = 'appointment_previews';
|
|
protected $primaryKey = 'id';
|
|
protected $useAutoIncrement = true;
|
|
protected $returnType = 'array';
|
|
protected $useSoftDeletes = false;
|
|
protected $protectFields = true;
|
|
|
|
protected $allowedFields = [
|
|
'patient_id',
|
|
'patient_formatted_user_id',
|
|
'services',
|
|
'requested_date',
|
|
'requested_time',
|
|
'assigned_doctor_id',
|
|
'assigned_doctor_formatted_id',
|
|
'available_days_snapshot',
|
|
'available_slots_snapshot',
|
|
'status',
|
|
'preview_token',
|
|
'created_by',
|
|
'expires_at',
|
|
];
|
|
|
|
protected bool $allowEmptyInserts = false;
|
|
protected bool $updateOnlyChanged = true;
|
|
|
|
protected $useTimestamps = true;
|
|
protected $dateFormat = 'datetime';
|
|
protected $createdField = 'created_at';
|
|
protected $updatedField = 'updated_at';
|
|
|
|
protected $validationRules = [
|
|
'patient_id' => 'required|integer',
|
|
'requested_date' => 'required|valid_date[Y-m-d]',
|
|
'requested_time' => 'required',
|
|
'status' => 'permit_empty|in_list[draft,viewed,selected,booked,expired,cancelled]',
|
|
'preview_token' => 'permit_empty|max_length[64]',
|
|
];
|
|
|
|
protected $validationMessages = [];
|
|
protected $skipValidation = false;
|
|
protected $cleanValidationRules = true;
|
|
|
|
protected $allowCallbacks = true;
|
|
protected $beforeInsert = ['preparePreview'];
|
|
protected $beforeUpdate = ['normalizeJsonFields'];
|
|
|
|
protected function preparePreview(array $eventData): array
|
|
{
|
|
$eventData = $this->normalizeJsonFields($eventData);
|
|
|
|
if (empty($eventData['data']['preview_token'])) {
|
|
$eventData['data']['preview_token'] = bin2hex(random_bytes(32));
|
|
}
|
|
|
|
if (empty($eventData['data']['status'])) {
|
|
$eventData['data']['status'] = 'draft';
|
|
}
|
|
|
|
return $eventData;
|
|
}
|
|
|
|
protected function normalizeJsonFields(array $eventData): array
|
|
{
|
|
foreach (['services', 'available_days_snapshot', 'available_slots_snapshot'] as $field) {
|
|
if (isset($eventData['data'][$field]) && is_array($eventData['data'][$field])) {
|
|
$eventData['data'][$field] = json_encode($eventData['data'][$field]);
|
|
// Removed AppointmentPreviewModel as appointment_previews table is dropped
|
|
// Removed the entire class definition as it is no longer needed
|
|
|