<?php declare(strict_types=1); namespace Engelsystem\Controllers\Api; use Engelsystem\Http\Request; use Engelsystem\Http\Response; use Engelsystem\Models\Room; class ShiftsController extends ApiController { public function entriesByRoom(Request $request): Response { $roomId = (int) $request->getAttribute('room_id'); /** @var Room $room */ $room = Room::findOrFail($roomId); $shifts = $room->shifts() ->with([ 'shiftEntries.angelType', 'shiftEntries.user.contact', 'shiftEntries.user.personalData', 'shiftType', ]) ->get(); $shiftEntries = []; // Blob of not-optimized mediocre pseudo-serialization foreach ($shifts as $shift) { $entries = []; foreach ($shift->shiftEntries as $entry) { $user = $entry->user; $userData = [ 'id' => $user->id, 'name' => $user->name, 'first_name' => $user->personalData->first_name, 'last_name' => $user->personalData->last_name, 'pronoun' => $user->personalData->pronoun, 'contact' => $user->contact->only(['dect', 'mobile']), ]; $entries[] = [ 'user' => $userData, 'type' => $entry->angelType->only(['id', 'name']), ]; } $shiftEntries[] = [ 'id' => $shift->id, 'title' => $shift->title, 'description' => $shift->description, 'start' => $shift->start, 'end' => $shift->end, 'entries' => $entries, 'room' => $room->only(['id', 'name']), 'shift_type' => $shift->shiftType->only(['id', 'name', 'description']), 'created_at' => $shift->created_at, 'updated_at' => $shift->updated_at, ]; } $data = ['data' => $shiftEntries]; return $this->response ->withContent(json_encode($data)); } }