Skip to content

Commit 9c9a922

Browse files
committed
feat(auto rest): simple query filters
1 parent 5ea582e commit 9c9a922

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ export default defineConfig({
140140
With this configuration, moquerie will automatically create RESTful endpoints for each resource types found with:
141141

142142
- `GET /resourceType`: list all instances
143+
- You can filter the results with query parameters, for example `GET /resourceType?name=foo`
143144
- `POST /resourceType`: create a new instance
144145
- `GET /resourceType/:id`: get an instance
145146
- `PUT /resourceType/:id`: update an instance

packages/core/src/rest/server.ts

+15-3
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { pickRandom, repeat } from '../util/random.js'
1010
import { getFactoryStorage } from '../factory/storage.js'
1111
import { generateResourceInstances } from '../resource/generateInstances.js'
1212
import { createResourceInstanceReference } from '../resource/resourceReference.js'
13-
import { isPlainObject } from '../util/object.js'
13+
import { get, isPlainObject } from '../util/object.js'
1414
import { type HookBeforeSendResponseContext, hooks } from '../hooks.js'
1515
import type { UntypedQueryManagerProxy } from '../resource/queryManagerProxy.js'
1616

@@ -162,7 +162,7 @@ export async function setupRestApi(mq: MoquerieInstance, expressApp: Application
162162

163163
if (!mq.data.silent) {
164164
// eslint-disable-next-line no-console
165-
console.log(`[Auto REST] ${req.method} ${req.path}`, req.body)
165+
console.log(`[Auto REST] ${req.method} ${req.path}`, 'query:', query, 'body:', req.body)
166166
}
167167

168168
if (!resourceType) {
@@ -210,7 +210,19 @@ export async function setupRestApi(mq: MoquerieInstance, expressApp: Application
210210
}
211211
else {
212212
if (req.method === 'GET') {
213-
data = await (ctx.db as UntypedQueryManagerProxy)[resourceType.name].findMany()
213+
const predicate = (data: any) => {
214+
for (const key in query) {
215+
if (key.startsWith('__')) {
216+
continue
217+
}
218+
// eslint-disable-next-line eqeqeq
219+
if (get(data, key) != query[key]) {
220+
return false
221+
}
222+
}
223+
return true
224+
}
225+
data = await (ctx.db as UntypedQueryManagerProxy)[resourceType.name].findMany(predicate)
214226
}
215227
if (req.method === 'POST') {
216228
data = await (ctx.db as UntypedQueryManagerProxy)[resourceType.name].create(req.body)

0 commit comments

Comments
 (0)