Slim API deployment - composer install + full CRUD endpoints

This commit is contained in:
Hermes Agent
2026-05-20 14:36:05 +02:00
parent 48bf9c7088
commit 8ab4e532fd
1727 changed files with 7746 additions and 7 deletions

View File

@@ -0,0 +1,53 @@
<?php
declare(strict_types=1);
namespace App\Repositories;
final class WorkTimesheetRepository extends BaseRepository
{
/**
* Hole alle Appointments eines Fahrlehrers im Zeitraum mit lesson_type Info.
* Alle Categories zählen als Arbeitszeit.
*/
public function getAppointmentsForInstructor(int $tenantId, int $instructorId, string $from, string $to): array
{
$sql = 'SELECT
a.id,
a.start_at,
a.end_at,
a.units,
lt.name AS lesson_type_name,
lt.category AS lesson_type_category,
lt.default_duration
FROM appointments a
JOIN lesson_types lt ON lt.id = a.lesson_type_id
WHERE a.tenant_id = :tenant_id
AND a.instructor_id = :instructor_id
AND a.start_at >= :from
AND a.start_at < :to
AND a.status != \'cancelled\'
AND lt.category != \'private\'
ORDER BY a.start_at ASC';
$statement = $this->db->prepare($sql);
$statement->execute([
'tenant_id' => $tenantId,
'instructor_id' => $instructorId,
'from' => $from . ' 00:00:00',
'to' => $to . ' 23:59:59',
]);
return $statement->fetchAll();
}
public function getInstructor(int $tenantId, int $instructorId): ?array
{
$statement = $this->db->prepare(
'SELECT id, first_name, last_name FROM instructors WHERE tenant_id = :tenant_id AND id = :id'
);
$statement->execute(['tenant_id' => $tenantId, 'id' => $instructorId]);
return $statement->fetch() ?: null;
}
}