@@ -50,7 +50,8 @@ First we need to update the `src/services/users/users.schema.js` file with the s
5050
5151<DatabaseBlock global-id =" sql " >
5252
53- ``` ts{1,16-17,32,42-52,56,63-67}
53+ ``` ts{2,17-18,33,43-53,81-85}
54+ // For more information about this file see https://dove.feathersjs.com/guides/cli/service.schemas.html
5455import crypto from 'crypto'
5556import { resolve } from '@feathersjs/schema'
5657import { Type, getDataValidator, getValidator, querySyntax } from '@feathersjs/typebox'
@@ -79,7 +80,7 @@ export const userExternalResolver = resolve<User, HookContext>({
7980 password: async () => undefined
8081})
8182
82- // Schema for the basic data model (e.g. creating new entries)
83+ // Schema for creating new users
8384export const userDataSchema = Type.Pick(
8485 userSchema,
8586 ['email', 'password', 'githubId', 'avatar'],
@@ -105,9 +106,26 @@ export const userDataResolver = resolve<User, HookContext>({
105106 }
106107})
107108
109+ // Schema for updating existing users
110+ export const userPatchSchema = Type.Partial(userSchema, {
111+ $id: 'UserPatch'
112+ })
113+ export type UserPatch = Static<typeof userPatchSchema>
114+ export const userPatchValidator = getDataValidator(userPatchSchema, dataValidator)
115+ export const userPatchResolver = resolve<User, HookContext>({
116+ password: passwordHash({ strategy: 'local' })
117+ })
118+
108119// Schema for allowed query properties
109120export const userQueryProperties = Type.Pick(userSchema, ['id', 'email', 'githubId'])
110- export const userQuerySchema = querySyntax(userQueryProperties)
121+ export const userQuerySchema = Type.Intersect(
122+ [
123+ querySyntax(userQueryProperties),
124+ // Add additional query properties here
125+ Type.Object({}, { additionalProperties: false })
126+ ],
127+ { additionalProperties: false }
128+ )
111129export type UserQuery = Static<typeof userQuerySchema>
112130export const userQueryValidator = getValidator(userQuerySchema, queryValidator)
113131export const userQueryResolver = resolve<UserQuery, HookContext>({
@@ -128,7 +146,8 @@ export const userQueryResolver = resolve<UserQuery, HookContext>({
128146
129147<DatabaseBlock global-id =" mongodb " >
130148
131- ``` ts{1,16-17,32,42-52,56,63-67}
149+ ``` ts{2,17-18,33,43-53,81-85}
150+ // For more information about this file see https://dove.feathersjs.com/guides/cli/service.schemas.html
132151import crypto from 'crypto'
133152import { resolve } from '@feathersjs/schema'
134153import { Type, getDataValidator, getValidator, querySyntax } from '@feathersjs/typebox'
@@ -157,11 +176,15 @@ export const userExternalResolver = resolve<User, HookContext>({
157176 password: async () => undefined
158177})
159178
160- // Schema for the basic data model (e.g. creating new entries)
161- export const userDataSchema = Type.Pick(userSchema, ['email', 'password', 'githubId', 'avatar'], {
162- $id: 'UserData',
163- additionalProperties: false
164- })
179+ // Schema for creating new users
180+ export const userDataSchema = Type.Pick(
181+ userSchema,
182+ ['email', 'password', 'githubId', 'avatar'],
183+ {
184+ $id: 'UserData',
185+ additionalProperties: false
186+ }
187+ )
165188export type UserData = Static<typeof userDataSchema>
166189export const userDataValidator = getDataValidator(userDataSchema, dataValidator)
167190export const userDataResolver = resolve<User, HookContext>({
@@ -179,9 +202,26 @@ export const userDataResolver = resolve<User, HookContext>({
179202 }
180203})
181204
205+ // Schema for updating existing users
206+ export const userPatchSchema = Type.Partial(userSchema, {
207+ $id: 'UserPatch'
208+ })
209+ export type UserPatch = Static<typeof userPatchSchema>
210+ export const userPatchValidator = getDataValidator(userPatchSchema, dataValidator)
211+ export const userPatchResolver = resolve<User, HookContext>({
212+ password: passwordHash({ strategy: 'local' })
213+ })
214+
182215// Schema for allowed query properties
183- export const userQueryProperties = Type.Pick(userSchema, ['_id', 'email', 'githubId'])
184- export const userQuerySchema = querySyntax(userQueryProperties)
216+ export const userQueryProperties = Type.Pick(userSchema, ['id', 'email', 'githubId'])
217+ export const userQuerySchema = Type.Intersect(
218+ [
219+ querySyntax(userQueryProperties),
220+ // Add additional query properties here
221+ Type.Object({}, { additionalProperties: false })
222+ ],
223+ { additionalProperties: false }
224+ )
185225export type UserQuery = Static<typeof userQuerySchema>
186226export const userQueryValidator = getValidator(userQuerySchema, queryValidator)
187227export const userQueryResolver = resolve<UserQuery, HookContext>({
@@ -217,7 +257,8 @@ Update the `src/services/messages/messages.schema.js` file like this:
217257
218258<DatabaseBlock global-id =" sql " >
219259
220- ``` ts{1, 7,14-16,22-25,38-44,50,60-64}
260+ ``` ts{2,8,15-17,23-26,38-44,57-60}
261+ // For more information about this file see https://dove.feathersjs.com/guides/cli/service.schemas.html
221262import { resolve, virtual } from '@feathersjs/schema'
222263import { Type, getDataValidator, getValidator, querySyntax } from '@feathersjs/typebox'
223264import type { Static } from '@feathersjs/typebox'
@@ -232,7 +273,7 @@ export const messageSchema = Type.Object(
232273 id: Type.Number(),
233274 text: Type.String(),
234275 createdAt: Type.Number(),
235- userId: Type.Number (),
276+ userId: Type.String (),
236277 user: Type.Ref(userSchema)
237278 },
238279 { $id: 'Message', additionalProperties: false }
@@ -249,8 +290,7 @@ export const messageExternalResolver = resolve<Message, HookContext>({})
249290
250291// Schema for creating new entries
251292export const messageDataSchema = Type.Pick(messageSchema, ['text'], {
252- $id: 'MessageData',
253- additionalProperties: false
293+ $id: 'MessageData'
254294})
255295export type MessageData = Static<typeof messageDataSchema>
256296export const messageDataValidator = getDataValidator(messageDataSchema, dataValidator)
@@ -264,35 +304,40 @@ export const messageDataResolver = resolve<Message, HookContext>({
264304 }
265305})
266306
307+ // Schema for updating existing entries
308+ export const messagePatchSchema = Type.Partial(messageSchema, {
309+ $id: 'MessagePatch'
310+ })
311+ export type MessagePatch = Static<typeof messagePatchSchema>
312+ export const messagePatchValidator = getDataValidator(messagePatchSchema, dataValidator)
313+ export const messagePatchResolver = resolve<Message, HookContext>({})
314+
267315// Schema for allowed query properties
268- export const messageQueryProperties = Type.Pick(
269- messageSchema,
270- ['id', 'text', 'createdAt', 'userId'],
271- {
272- additionalProperties: false
273- }
316+ export const messageQueryProperties = Type.Pick(messageSchema,[
317+ 'id',
318+ 'text',
319+ 'createdAt',
320+ 'userId'
321+ ])
322+ export const messageQuerySchema = Type.Intersect(
323+ [
324+ querySyntax(messageQueryProperties),
325+ // Add additional query properties here
326+ Type.Object({}, { additionalProperties: false })
327+ ],
328+ { additionalProperties: false }
274329)
275- export const messageQuerySchema = querySyntax(messageQueryProperties)
276330export type MessageQuery = Static<typeof messageQuerySchema>
277331export const messageQueryValidator = getValidator(messageQuerySchema, queryValidator)
278- export const messageQueryResolver = resolve<MessageQuery, HookContext>({
279- userId: async (value, user, context) => {
280- // We want to be able to get a list of all messages but
281- // only let a user access their own messages otherwise
282- if (context.params.user && context.method !== 'find') {
283- return context.params.user.id
284- }
285-
286- return value
287- }
288- })
332+ export const messageQueryResolver = resolve<MessageQuery, HookContext>({})
289333```
290334
291335</DatabaseBlock >
292336
293337<DatabaseBlock global-id =" mongodb " >
294338
295- ``` ts{1,7,14-16,22-25,38-44,50,60-64}
339+ ``` ts{2,8,15-17,23-26,38-44,57-60}
340+ // For more information about this file see https://dove.feathersjs.com/guides/cli/service.schemas.html
296341import { resolve, virtual } from '@feathersjs/schema'
297342import { Type, getDataValidator, getValidator, querySyntax } from '@feathersjs/typebox'
298343import type { Static } from '@feathersjs/typebox'
@@ -324,8 +369,7 @@ export const messageExternalResolver = resolve<Message, HookContext>({})
324369
325370// Schema for creating new entries
326371export const messageDataSchema = Type.Pick(messageSchema, ['text'], {
327- $id: 'MessageData',
328- additionalProperties: false
372+ $id: 'MessageData'
329373})
330374export type MessageData = Static<typeof messageDataSchema>
331375export const messageDataValidator = getDataValidator(messageDataSchema, dataValidator)
@@ -339,24 +383,29 @@ export const messageDataResolver = resolve<Message, HookContext>({
339383 }
340384})
341385
342- // Schema for allowed query properties
343- export const messageQueryProperties = Type.Pick (messageSchema, ['_id', 'text', 'createdAt', 'userId'] , {
344- additionalProperties: false
386+ // Schema for updating existing entries
387+ export const messagePatchSchema = Type.Partial (messageSchema, {
388+ $id: 'MessagePatch'
345389})
346- export const messageQuerySchema = querySyntax(messageQueryProperties)
390+ export type MessagePatch = Static<typeof messagePatchSchema>
391+ export const messagePatchValidator = getDataValidator(messagePatchSchema, dataValidator)
392+ export const messagePatchResolver = resolve<Message, HookContext>({})
393+
394+ // Schema for allowed query properties
395+ export const messageQueryProperties = Type.Pick(messageSchema,
396+ ['_id', 'text', 'createdAt', 'userId']
397+ )
398+ export const messageQuerySchema = Type.Intersect(
399+ [
400+ querySyntax(messageQueryProperties),
401+ // Add additional query properties here
402+ Type.Object({}, { additionalProperties: false })
403+ ],
404+ { additionalProperties: false }
405+ )
347406export type MessageQuery = Static<typeof messageQuerySchema>
348407export const messageQueryValidator = getValidator(messageQuerySchema, queryValidator)
349- export const messageQueryResolver = resolve<MessageQuery, HookContext>({
350- userId: async (value, user, context) => {
351- // We want to be able to get a list of all messages but
352- // only let a user access their own messages otherwise
353- if (context.params.user && context.method !== 'find') {
354- return context.params.user._id
355- }
356-
357- return value
358- }
359- })
408+ export const messageQueryResolver = resolve<MessageQuery, HookContext>({})
360409```
361410
362411</DatabaseBlock >
0 commit comments