Files
Reservair/includes/Models/RsvTimetableReservation.php
T

49 lines
1.6 KiB
PHP
Raw Normal View History

2026-06-11 19:03:29 +02:00
<?php
class RsvTimetableReservation {
public int|null $id;
public int $timetable_id;
public DateTime $start_utc; // UTC, 'Y-m-d H:i:s'
public DateTime $end_utc; // UTC, 'Y-m-d H:i:s'
2026-06-17 11:15:09 +02:00
public ?int $is_confirmed = null;
2026-06-11 19:03:29 +02:00
public static function schema(): array {
return [
'type' => 'object',
'properties' => [
'id' => ['type' => 'integer', 'readonly' => true],
'timetable_id' => ['type' => 'integer', 'required' => true],
'start_utc' => ['type' => 'string', 'required' => true, 'format' => 'date-time'],
'end_utc' => ['type' => 'string', 'required' => true, 'format' => 'date-time'],
],
];
}
public function __construct(int|null $id, int $timetable_id, DateTime $start_utc, DateTime $end_utc) {
$this->id = $id;
$this->timetable_id = $timetable_id;
$this->start_utc = $start_utc;
$this->end_utc = $end_utc;
}
public static function from_array(array $data): self {
$utc = new DateTimeZone('UTC');
return new self(
$data['id'] ?? null,
(int) $data['timetable_id'],
new DateTime($data['start_utc'], $utc),
new DateTime($data['end_utc'], $utc),
);
}
public function to_array(): array {
return [
'id' => $this->id,
'timetable_id' => $this->timetable_id,
'start_utc' => $this->start_utc->format('Y-m-d H:i:s'),
'end_utc' => $this->end_utc->format('Y-m-d H:i:s'),
];
}
}