doctor-appointment-system/app/Models/AppointmentPreviewModel.php
2026-05-08 12:22:08 +05:30

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