Usato per fare tutta una serie di automazioni come validazione ecc.

Quando si genera un Service, viene generato un file <nomeServ>.schema.ts con:

La <nome>Schema elenca tutti i campi del modello, sia quelli reali salvati a DB sia quelli relazionali

avatar: Type.Optional(Type.String()),
createdAt: Type.Number(), 
userId: Type.Number(), 
user: Type.Ref(userSchema)

I dati che andranno a DB vanno specificati nell’array <nome>QueryProperties

il <nome>Resolver contiene i valori computed per questo modello. Si possono effettuare calcoli e/o associare le relazioni dal DB (con la funzione virtual)

Il <nome>DataResolver contiene logiche per eseguire operazioni prima che un dato venga salvato in DB

Il <nome>QuerySchema definisce i metodi che pi posso utilizzare nelle query; di default feathers non gestisce operatori tipo $like, che dipendono dall’adapter utilizzato (SQL, mongo, ecc). Le Api query for search DB chiariscono

Il <nome>QueryResolver modifica la query per questo modello (solitamente si usa per impostare valori di default e/o limitare le query)

SQL $like

nel file srv.schema.ts alla variabile <Srv>QuerySchema alla funzionequerySyntax passare come secondo argomento la property su cui abilitare l’operatore:

const messageQuerySchema = Type.Intersect(
  [
    // This will additionally allow querying for `{ name: { $ilike: 'Dav%' } }`
    querySyntax(messageQueryProperties, {
      name: {
        $ilike: Type.String()
      }
    }),
    // Add additional query properties here
    Type.Object({})
  ],
  { additionalProperties: false }
)

Batch edits (multi patch, delete, ecc)

di default FeathersJs disabilita la modifica di batch. Per attivarla su un servizio, nel file services/service-name.class.ts alla costante getOptions aggiungere il valore multi che deve essere costituito da un array di string con i metodi che acettano le modifiche in batch. Es:

export const getOptions = (app: Application): KnexAdapterOptions => {
	return {
		paginate: app.get('paginate'),
		Model: app.get('mysqlClient'),
		name: 'music-collections',
		multi: ['delete'] // <---- add this line
	}
}