diff --git a/README.md b/README.md index a325ced08..3fd004099 100644 --- a/README.md +++ b/README.md @@ -166,6 +166,15 @@ GET /posts?_page=1&_per_page=25 GET /posts?_sort=id,-views ``` +### Order + +- `_sort=f1,f2` +- `_order=desc` + +``` +GET /posts?_sort=id,-views&_order=desc +``` + ### Nested and array fields - `x.y.z...` diff --git a/src/service.test.ts b/src/service.test.ts index 818a2457b..d54b59a72 100644 --- a/src/service.test.ts +++ b/src/service.test.ts @@ -182,6 +182,12 @@ await test('find', async (t) => { params: { _sort: 'views' }, res: [post1, post2, post3], }, + { + data: { posts: [post3, post1, post2] }, + name: POSTS, + params: { _sort: 'views' , _order: 'desc'}, + res: [post3, post2, post1], + }, { data: { posts: [post3, post1, post2] }, name: POSTS, diff --git a/src/service.ts b/src/service.ts index 0c1bdd294..db48bb723 100644 --- a/src/service.ts +++ b/src/service.ts @@ -173,6 +173,7 @@ export class Service { [key: string]: unknown _embed?: string | string[] _sort?: string + _order?: string _start?: number _end?: number _limit?: number @@ -216,6 +217,7 @@ export class Service { [ '_embed', '_sort', + '_order', '_start', '_end', '_limit', @@ -317,6 +319,13 @@ export class Service { const sort = query._sort || '' const sorted = sortOn(filtered, sort.split(',')) + // Order ( handling descending order ) + if(Array.isArray(sorted) && sorted.length > 1) { + if(query._order === 'desc' || query._order === 'DESC' || query._order === 'descending') { + sorted.reverse() + } + } + // Slice const start = query._start const end = query._end