Services
Services applicatifs
Les services applicatifs vivent dans les dossiers déclarés par servicesDirs. La CLI produit la structure attendue par le scanner :
bunx nuxt-feathers-zod add service articles --database mongodb --connection primary --schema zodPour une méthode personnalisée :
bunx nuxt-feathers-zod add custom-service reports --methods find --customMethods run --schema zodLes méthodes standard Feathers et les méthodes personnalisées sont déclarées séparément. Pour un service persistant, --database est le sélecteur portable recommandé et --connection lie le manifeste au registre nommé ; --adapter mongodb|knex reste compatible.
Le générateur accepte aussi --idStrategy objectid|uuid|integer|bigint|string. Les combinaisons sont validées par adapter : MongoDB utilise objectid par défaut ; Knex et Memory utilisent integer. Le manifeste conserve cette stratégie et doctor la contrôle. Le mode bigint utilise une chaîne décimale au niveau API afin de rester compatible JSON.
Services NFZ de console
Lorsque console.enabled est actif, le module enregistre neuf services Feathers avant app.setup().
| Service | Méthodes | Rôle |
|---|---|---|
nfz/services | find | découverte des services et de leur source |
nfz/schemas | find, get, patch | lecture et synchronisation des schémas |
nfz/manifest | get, patch | manifeste NFZ courant |
nfz/builder | create | preview et apply d’un plan Builder |
nfz/status | find | état console, authentification et RBAC |
nfz/rbac | get, patch | politique RBAC |
nfz/presets | find, create | liste, preview et application de presets |
nfz/init | create | opérations d’initialisation guidée |
nfz/database-connections | find, get | diagnostics expurgés et contrôle de santé des connexions nommées |
Découverte
const builder = useBuilderClient()
const discovery = await builder.getServices<{
projectRoot: string
servicesDirs: string[]
services: Array<{
name: string
source: 'manifest' | 'scan'
}>
}>()La Console Builder utilise exactement ce résultat. Elle ne suppose pas que services est un tableau de chaînes.
Schémas
const schema = await builder.getSchema('users')Le nom du service est validé. Les noms dangereux comme __proto__, prototype et constructor sont rejetés dans les entrées Builder.
Builder
const preview = await builder.preview({
service: 'users',
fields: schema.fields,
})L’action apply est protégée par console.allowWrite :
await builder.apply({
service: 'users',
fields: schema.fields,
})Les payloads sont bornés en profondeur, nombre de nœuds et nombre de champs afin de limiter les entrées anormales.
RBAC
const current = await builder.getRbac()
await builder.saveRbac(current.file)L’écriture est refusée lorsque console.allowWrite vaut false.
Compatibilité 6.x
Les routes /api/nfz/** ne sont pas des services métier indépendants. Lorsqu’elles sont activées, elles délèguent aux services ci-dessus et ajoutent des en-têtes de dépréciation.
