/pictures und /audio endpoints moved under /poi

This commit is contained in:
Florian Zumpe
2026-06-17 01:14:19 +02:00
parent 833b5ad3a4
commit 5c85a0194b
9 changed files with 225 additions and 267 deletions
+20 -18
View File
@@ -26,16 +26,15 @@ test('complete REST API documentation is kept outside the README', async () => {
'POST /api/routes/:id/append',
'POST /api/routes/:id/pois',
'PUT /api/pois/:id',
'GET /api/routes/:id/pictures',
'GET /api/routes/:id/pictures/:pictureId',
'POST /api/routes/:id/pictures',
'PUT /api/routes/:id/pictures/:pictureId',
'DELETE /api/routes/:id/pictures/:pictureId',
'GET /api/routes/:id/audio',
'GET /api/routes/:id/audio/:poiId',
'POST /api/routes/:id/audio',
'PUT /api/routes/:id/audio/:poiId',
'DELETE /api/routes/:id/audio/:poiId',
'GET /api/routes/:routeId/pois/:poiId/pictures',
'GET /api/routes/:routeId/pois/:poiId/pictures/:pictureId',
'POST /api/routes/:routeId/pois/:poiId/pictures',
'PUT /api/routes/:routeId/pois/:poiId/pictures/:pictureId',
'DELETE /api/routes/:routeId/pois/:poiId/pictures/:pictureId',
'GET /api/routes/:routeId/pois/:poiId/audio',
'POST /api/routes/:routeId/pois/:poiId/audio',
'PUT /api/routes/:routeId/pois/:poiId/audio',
'DELETE /api/routes/:routeId/pois/:poiId/audio',
'DELETE /api/routes/:id',
'POST /api/routes/:id/restore'
]) {
@@ -51,21 +50,24 @@ test('complete REST API documentation is kept outside the README', async () => {
}
});
test('POI media uploads use dedicated single-resource endpoints', async () => {
test('POI media uploads use POI-scoped single-resource endpoints', async () => {
const router = await read('src/routes/api.js');
const routesService = await read('src/services/routes-service.js');
const mediaService = await read('src/services/media-service.js');
assert.match(router, /post\('\/routes\/:id\/pictures', upload\.single\('picture'\)/);
assert.match(router, /put\('\/routes\/:id\/pictures\/:pictureId', upload\.single\('picture'\)/);
assert.match(router, /delete\('\/routes\/:id\/pictures\/:pictureId'/);
assert.match(router, /post\('\/routes\/:id\/audio', upload\.single\('audio'\)/);
assert.match(router, /put\('\/routes\/:id\/audio\/:poiId', upload\.single\('audio'\)/);
assert.match(router, /delete\('\/routes\/:id\/audio\/:poiId'/);
assert.match(router, /post\('\/routes\/:id\/pois', upload\.none\(\)/);
assert.match(router, /post\('\/routes\/:routeId\/pois\/:poiId\/pictures', upload\.single\('picture'\)/);
assert.match(router, /put\('\/routes\/:routeId\/pois\/:poiId\/pictures\/:pictureId', upload\.single\('picture'\)/);
assert.match(router, /delete\('\/routes\/:routeId\/pois\/:poiId\/pictures\/:pictureId'/);
assert.match(router, /get\('\/routes\/:routeId\/pois\/:poiId\/audio'/);
assert.match(router, /post\('\/routes\/:routeId\/pois\/:poiId\/audio', upload\.single\('audio'\)/);
assert.match(router, /put\('\/routes\/:routeId\/pois\/:poiId\/audio', upload\.single\('audio'\)/);
assert.match(router, /delete\('\/routes\/:routeId\/pois\/:poiId\/audio'/);
assert.doesNotMatch(router, /\/routes\/:id\/(?:pictures|audio)/);
assert.match(router, /post\('\/routes\/:id\/pois', upload\.none\(\),/);
assert.doesNotMatch(routesService, /files\.images|files\.audio/);
assert.match(mediaService, /caption/);
assert.match(mediaService, /removeStoredFile/);
assert.doesNotMatch(mediaService, /fields\.poiId/);
assert.match(router, /get\('\/routes\/:id\/gpx'/);
assert.match(router, /req\.query\.metadata === 'true'/);
assert.doesNotMatch(router, /['"`]\/media\//);