validate([ 'song_id' => ['required', 'integer', 'exists:songs,id'], ]); $serviceSong = ServiceSong::findOrFail($serviceSongId); $song = Song::findOrFail($validated['song_id']); $this->songMatchingService->manualAssign($serviceSong, $song); return response()->json([ 'message' => 'Song erfolgreich zugeordnet', 'service_song' => $serviceSong->fresh(), ]); } /** * E-Mail-Anfrage für fehlenden Song senden. */ public function requestSong(int $serviceSongId): JsonResponse { $serviceSong = ServiceSong::findOrFail($serviceSongId); $this->songMatchingService->requestCreation($serviceSong); return response()->json([ 'message' => 'Anfrage wurde gesendet', 'service_song' => $serviceSong->fresh(), ]); } /** * Song-Zuordnung entfernen. */ public function unassign(int $serviceSongId): JsonResponse { $serviceSong = ServiceSong::findOrFail($serviceSongId); $this->songMatchingService->unassign($serviceSong); return response()->json([ 'message' => 'Zuordnung entfernt', 'service_song' => $serviceSong->fresh(), ]); } public function update(int $serviceSongId, Request $request): JsonResponse { $validated = $request->validate([ 'song_arrangement_id' => ['nullable', 'integer', 'exists:song_arrangements,id'], 'use_translation' => ['sometimes', 'boolean'], ]); $serviceSong = ServiceSong::with('song')->findOrFail($serviceSongId); if (array_key_exists('song_arrangement_id', $validated) && $validated['song_arrangement_id'] !== null) { if ($serviceSong->song_id === null || $serviceSong->song === null) { return response()->json([ 'message' => 'Arrangement kann ohne zugeordneten Song nicht gespeichert werden.', ], 422); } $isValidArrangement = $serviceSong->song ->arrangements() ->whereKey($validated['song_arrangement_id']) ->exists(); if (! $isValidArrangement) { return response()->json([ 'message' => 'Das Arrangement gehoert nicht zu diesem Song.', ], 422); } } $serviceSong->update($validated); return response()->json([ 'message' => 'Service-Song wurde aktualisiert.', 'service_song' => $serviceSong->fresh(), ]); } }