*/ public const VALID_STATUSES = [ self::STATUS_PENDING, self::STATUS_CONFIRMED, self::STATUS_CANCELLED ]; public const RECURRENCE_SINGLE = 'single'; public const RECURRENCE_WEEKLY = 'weekly'; /** * All valid recurrence values. * * @var list */ public const VALID_RECURRENCES = [ self::RECURRENCE_SINGLE, self::RECURRENCE_WEEKLY ]; public function __construct( public readonly int $slotId, public readonly int $studentId, public readonly int $instructorId, public readonly ?int $offeringId = null, public readonly string $recurrence = self::RECURRENCE_SINGLE, public readonly ?int $seriesId = null, public readonly string $status = self::STATUS_PENDING, public readonly ?int $paymentId = null, public readonly ?string $notes = null, public readonly ?int $id = null, ) {} public static function fromRow( object $row ): self { return new self( slotId: (int) $row->slot_id, studentId: (int) $row->student_id, instructorId: (int) $row->instructor_id, offeringId: null !== $row->offering_id ? (int) $row->offering_id : null, recurrence: $row->recurrence, seriesId: null !== $row->series_id ? (int) $row->series_id : null, status: $row->status, paymentId: null !== $row->payment_id ? (int) $row->payment_id : null, notes: $row->notes, id: (int) $row->id, ); } /** * Returns a plain array representation of the lesson. * * @return array */ public function toArray(): array { return [ 'id' => $this->id, 'slot_id' => $this->slotId, 'offering_id' => $this->offeringId, 'student_id' => $this->studentId, 'instructor_id' => $this->instructorId, 'recurrence' => $this->recurrence, 'series_id' => $this->seriesId, 'status' => $this->status, 'payment_id' => $this->paymentId, 'notes' => $this->notes, ]; } }