mirror of
https://github.com/HolgerHatGarKeineNode/einundzwanzig-app.git
synced 2026-06-30 08:30:22 +00:00
✨ Add next_event to Lecturer API responses and tests
- ➕ Extend `withDetails` flag in Lecturer API to include `next_event` (date of the next course event or null). - 🧪 Update feature tests to assert presence and validity of `next_event` in responses.
This commit is contained in:
@@ -28,11 +28,11 @@ class LecturerController extends Controller
|
|||||||
/**
|
/**
|
||||||
* Referenten auflisten und durchsuchen
|
* Referenten auflisten und durchsuchen
|
||||||
*
|
*
|
||||||
* Öffentlicher Endpunkt; liefert id und name, alphabetisch sortiert. Ohne den Parameter 'selected' wird die Liste auf 10 Einträge begrenzt. Jeder Referent enthält zusätzlich ein 'image' (Avatar-Thumbnail-URL). Mit 'withDetails' entfällt das Limit und jeder Referent enthält zusätzlich subtitle und future_events_count (Anzahl kommender Kurs-Events).
|
* Öffentlicher Endpunkt; liefert id und name, alphabetisch sortiert. Ohne den Parameter 'selected' wird die Liste auf 10 Einträge begrenzt. Jeder Referent enthält zusätzlich ein 'image' (Avatar-Thumbnail-URL). Mit 'withDetails' entfällt das Limit und jeder Referent enthält zusätzlich subtitle, future_events_count (Anzahl kommender Kurs-Events) und next_event (Datum des nächsten kommenden Kurs-Events, oder null).
|
||||||
*/
|
*/
|
||||||
#[QueryParameter(name: 'search', description: 'Teilstring-Suche im Namen.', required: false, type: 'string')]
|
#[QueryParameter(name: 'search', description: 'Teilstring-Suche im Namen.', required: false, type: 'string')]
|
||||||
#[QueryParameter(name: 'selected', description: 'Lädt gezielt die angegebenen IDs.', required: false, type: 'array')]
|
#[QueryParameter(name: 'selected', description: 'Lädt gezielt die angegebenen IDs.', required: false, type: 'array')]
|
||||||
#[QueryParameter(name: 'withDetails', description: 'Presence-Flag: liefert subtitle und future_events_count mit und hebt das 10-Einträge-Limit auf.', required: false, type: 'string')]
|
#[QueryParameter(name: 'withDetails', description: 'Presence-Flag: liefert subtitle, future_events_count und next_event mit und hebt das 10-Einträge-Limit auf.', required: false, type: 'string')]
|
||||||
public function index(Request $request)
|
public function index(Request $request)
|
||||||
{
|
{
|
||||||
$withDetails = $request->exists('withDetails');
|
$withDetails = $request->exists('withDetails');
|
||||||
@@ -42,7 +42,8 @@ class LecturerController extends Controller
|
|||||||
->with('media')
|
->with('media')
|
||||||
->orderBy('name')
|
->orderBy('name')
|
||||||
->when($withDetails, fn (Builder $query) => $query
|
->when($withDetails, fn (Builder $query) => $query
|
||||||
->withCount(['coursesEvents as future_events_count' => fn (Builder $events) => $events->where('from', '>=', now())]))
|
->withCount(['coursesEvents as future_events_count' => fn (Builder $events) => $events->where('from', '>=', now())])
|
||||||
|
->withMin(['coursesEvents as next_event' => fn (Builder $events) => $events->where('from', '>=', now())], 'from'))
|
||||||
->when(
|
->when(
|
||||||
$request->search,
|
$request->search,
|
||||||
fn (Builder $query) => $query
|
fn (Builder $query) => $query
|
||||||
|
|||||||
@@ -93,8 +93,9 @@ it('returns all lecturers with details on GET /api/lecturers?withDetails', funct
|
|||||||
$first = collect($response->json())->firstWhere('id', $lecturers->first()->id);
|
$first = collect($response->json())->firstWhere('id', $lecturers->first()->id);
|
||||||
|
|
||||||
expect($first)
|
expect($first)
|
||||||
->toHaveKeys(['id', 'name', 'subtitle', 'image', 'future_events_count'])
|
->toHaveKeys(['id', 'name', 'subtitle', 'image', 'future_events_count', 'next_event'])
|
||||||
->and($first['future_events_count'])->toBe(2);
|
->and($first['future_events_count'])->toBe(2)
|
||||||
|
->and($first['next_event'])->not->toBeNull();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('shows a lecturer profile with courses on GET /api/lecturers/{lecturer}', function () {
|
it('shows a lecturer profile with courses on GET /api/lecturers/{lecturer}', function () {
|
||||||
|
|||||||
Reference in New Issue
Block a user