diff --git a/src/plugins/cologne-cave/router.ts b/src/plugins/cologne-cave/router.ts index 6e9d94c..1f7f225 100644 --- a/src/plugins/cologne-cave/router.ts +++ b/src/plugins/cologne-cave/router.ts @@ -11,13 +11,17 @@ const cologneCaveRouter = new Elysia() .group('/cologne-cave-api', app => app.get( '/all-entities', - async ({ query: { limit, offset } }) => { + async ({ query: { limit, offset, format } }) => { + const formats = (format ?? 'glb') + .split(',') + .map(f => f.trim().toLowerCase()) + .filter(f => /^[a-z0-9]+$/.test(f)); + const regex = formats.length ? new RegExp(`\\.(${formats.join('|')})$`, 'i') : /\.glb$/i; const entities = await entityCollection .find({ 'online': true, 'finished': true, - // Does raw filename end with '.glb'? - 'processed.raw': { $regex: /\.glb$/i }, + 'processed.raw': { $regex: regex }, }) .skip(offset ?? 0) .limit(limit ?? Number.MAX_SAFE_INTEGER) @@ -43,6 +47,13 @@ const cologneCaveRouter = new Elysia() description: 'Offset for pagination', }), ), + format: t.Optional( + t.String({ + type: 'string', + description: + 'Comma-separated list of file formats to filter by (e.g. "obj,glb"). Defaults to "glb".', + }), + ), }), response: { 200: t.Any({