fix(backend): move GET /recordings/logs/<id> to main router to avoid shelf_router collision with DELETE /<id>

This commit is contained in:
Michael committed 2026-03-08 21:42:53 +01:00
1 parent 989303db77
commit d91be43f27
2 files changed
+42 -26

No files matched your search

+39 -25
View File
@@ -11,6 +11,42 @@ class RecordingsApi {
RecordingsApi(this._db, this._scheduler); RecordingsApi(this._db, this._scheduler);
/// Handler pour GET /api/recordings/logs/<id>
/// Exposé séparément car shelf_router a un conflit entre DELETE /<id> et GET /logs/<id>
Future<Response> getLogHandler(Request request, String id) async {
final recording = _db.getRecordingById(id);
if (recording == null) {
return Response.notFound(
json.encode({'error': 'Enregistrement non trouvé'}),
headers: {'Content-Type': 'application/json'},
);
}
if (recording.filePath == null) {
return Response.notFound(
json.encode({'error': 'Aucun fichier ni log associé pour le moment.'}),
headers: {'Content-Type': 'application/json'},
);
}
final logFilePath = recording.filePath!.replaceAll('.mp4', '.log');
final logFile = File(logFilePath);
if (!await logFile.exists()) {
return Response.notFound(
json.encode({'error': 'Le fichier de log est introuvable. Chemin: $logFilePath'}),
headers: {'Content-Type': 'application/json'},
);
}
final logs = await logFile.readAsString();
return Response.ok(
json.encode({'logs': logs}),
headers: {'Content-Type': 'application/json'},
);
}
Router get router { Router get router {
final router = Router(); final router = Router();
@@ -86,31 +122,9 @@ class RecordingsApi {
); );
}); });
// Consulter les logs d'un enregistrement // Note: La route GET /logs/<id> est déclarée directement dans server.dart
router.get('/logs/<id>', (Request request, String id) async { // car shelf_router a un conflit interne entre DELETE /<id> et GET /logs/<id>
final recording = _db.getRecordingById(id); // dans le même routeur.
if (recording == null) {
return Response.notFound(json.encode({'error': 'Enregistrement non trouvé'}));
}
if (recording.filePath == null) {
return Response.notFound(json.encode({'error': 'Aucun fichier ni log associé pour le moment.'}));
}
final logFilePath = recording.filePath!.replaceAll('.mp4', '.log');
final logFile = File(logFilePath);
if (!await logFile.exists()) {
return Response.notFound(json.encode({'error': 'Le fichier de log est introuvable.'}));
}
final logs = await logFile.readAsString();
return Response.ok(
json.encode({'logs': logs}),
headers: {'Content-Type': 'application/json'},
);
});
return router; return router;
} }
+3 -1
View File
@@ -116,7 +116,9 @@ void main(List<String> args) async {
.addMiddleware(authMiddleware(db)) .addMiddleware(authMiddleware(db))
.addHandler(settingsHandler.router.call), .addHandler(settingsHandler.router.call),
) )
// TV Recordings endpoints // TV Recordings - Route des logs AVANT le mount general (évite collision shelf_router avec /<id>)
..get('/api/recordings/logs/<id>', recordingsApi.getLogHandler)
// TV Recordings endpoints (GET /, POST /, DELETE /<id>)
..mount( ..mount(
'/api/recordings', '/api/recordings',
const Pipeline() const Pipeline()