--- title: Architettura delle Cartelle info: Uno sguardo dettagliato alla nostra architettura di cartelle del server --- La struttura della directory del backend è la seguente: ``` server └───ability └───constants └───core └───database └───decorators └───filters └───guards └───health └───integrations └───metadata └───workspace └───utils ``` ## Capacità Definisce le autorizzazioni e include gestori per ciascuna entità. ## Decoratori Definisce decoratori personalizzati in NestJS per funzionalità aggiuntive. Vedi [decoratori personalizzati](https://docs.nestjs.com/custom-decorators) per maggiori dettagli. ## Filtri Include filtri di eccezione per gestire le eccezioni che potrebbero verificarsi nei punti finali GraphQL. ## Guards Vedi [guards](https://docs.nestjs.com/guards) per ulteriori dettagli. ## Stato di salute Include un'API REST pubblicamente disponibile (healthz) che restituisce un JSON per confermare se il database funziona correttamente. ## Metadati Definisce oggetti personalizzati e rende disponibile un'API GraphQL (graphql/metadata). ## Workspace Genera e serve schemi GraphQL personalizzati basati sui metadati. ### Struttura della directory dello spazio di lavoro ``` workspace └───workspace-schema-builder └───factories └───graphql-types └───database └───interfaces └───object-definitions └───services └───storage └───utils └───workspace-resolver-builder └───factories └───interfaces └───workspace-query-builder └───factories └───interfaces └───workspace-query-runner └───interfaces └───utils └───workspace-datasource └───workspace-manager └───workspace-migration-runner └───utils └───workspace.module.ts └───workspace.factory.spec.ts └───workspace.factory.ts ``` La radice della directory di lavoro include il `workspace.factory.ts`, un file contenente la funzione `createGraphQLSchema`. Questa funzione genera uno schema specifico per il workspace utilizzando i metadati per adattare uno schema per i singoli lavori. Separando la costruzione dello schema e del risolutore, utilizziamo la funzione `makeExecutableSchema`, che combina questi elementi discreti. Questa strategia non riguarda solo l'organizzazione, ma aiuta anche con l'ottimizzazione, come la memorizzazione nella cache delle definizioni di tipo generate per migliorare le prestazioni e la scalabilità. ### Generatore dello schema dello spazio di lavoro Genera lo schema GraphQL e include: #### Factory: Costruttori specializzati per generare costrutti correlati a GraphQL. * La fabbrica type.factory traduce i metadati del campo in tipi GraphQL utilizzando `TypeMapperService`. * La fabbrica type-definition.factory crea oggetti di input o output GraphQL derivati da `objectMetadata`. #### Tipi GraphQL Include enumerazioni, input, oggetti e scalari e funge da base per la costruzione dello schema. #### Interfacce e Definizioni di Oggetti Contiene i progetti per le entità GraphQL e include tipi predefiniti e personalizzati come `MONEY` o `URL`. #### Servizi Contiene il servizio responsabile dell'associazione di FieldMetadataType al relativo scalare GraphQL o ai modificatori di query. #### Archiviazione Include la classe `TypeDefinitionsStorage` che contiene definizioni di tipo riutilizzabili, evitando la duplicazione di tipi GraphQL. ### Generatore di resolver dello spazio di lavoro Crea funzioni di risolutore per interrogare e modificare lo schema GraphQL. Ogni factory in questa directory è responsabile della produzione di un tipo di resolver distinto, come `FindManyResolverFactory`, progettato per un'applicazione adattabile su varie tabelle. ### Esecutore di query dello spazio di lavoro Esegue le query generate sul database e analizza il risultato.