--- title: Arhitectura Folderului info: A detailed look into our server folder architecture image: /images/user-guide/fields/field.png --- Header Structura directorului backend este următoarea: ``` server └───ability └───constants └───core └───database └───decorators └───filters └───guards └───health └───integrations └───metadata └───workspace └───utils ``` ## Abilitate Definește permisiunile și include gestionari pentru fiecare entitate. ## Decoratori Definește decoratori personalizați în NestJS pentru funcționalitate adăugată. Vezi [decoratori personalizați](https://docs.nestjs.com/custom-decorators) pentru mai multe detalii. ## Filtre Include filtre de excepție pentru a gestiona excepțiile care ar putea apărea în punctele finale GraphQL. ## Paznici Vezi [paznici](https://docs.nestjs.com/guards) pentru mai multe detalii. ## Sănătate Include o API REST disponibilă public (healthz) care returnează un JSON pentru a verifica dacă baza de date funcționează așa cum este de așteptat. ## Metadate Definește obiecte personalizate și face disponibilă o API GraphQL (graphql/metadata). ## Spațiu de lucru Generează și servește o schemă GraphQL personalizată pe baza metadatelor. ### Structura Directorului de Spațiu de Lucru ``` 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 ``` The root of the workspace directory includes the `workspace.factory.ts`, a file containing the `createGraphQLSchema` function. Această funcție generează schema specifică spațiului de lucru folosind metadatele pentru a personaliza o schemă pentru spațiile de lucru individuale. Prin separarea construcției de schema și rezolvatori, folosim funcția `makeExecutableSchema`, care combină aceste elemente discrete. Această strategie nu este doar despre organizare, ci ajută și la optimizare, cum ar fi caching-ul definițiilor de tip generate pentru a îmbunătăți performanța și scalabilitatea. ### Constructor Schema Spațiu de Lucru Generează schema GraphQL și include: #### Fabrici: Constructori specializați pentru a genera construcții legate de GraphQL. - Tipul.fabrică traduce metadatele câmpului în tipuri GraphQL folosind `TypeMapperService`. - Tipul-definiție.fabrică creează obiecte GraphQL de intrare sau ieșire derivate din `objectMetadata`. #### Tipuri GraphQL Include enumerări, inputuri, obiecte și scalari și servește ca blocuri de construcție pentru construcția schema. #### Interfețe și Definiții de Obiect Conține planurile pentru entitățile GraphQL și include atât tipuri predefinite, cât și personalizate, precum `MONEY` sau `URL`. #### Servicii Conține serviciul responsabil pentru asocierea FieldMetadataType cu scalarul GraphQL corespunzător sau modificatorii de interogare. #### Stocare Include clasa `TypeDefinitionsStorage` care conține definiții de tip reutilizabile, prevenind duplicarea tipurilor GraphQL. ### Constructor Rezolvator Spațiu de Lucru Creează funcții de rezolvare pentru interogarea și modificarea schemei GraphQL. Fiecare fabrică din acest director este responsabilă pentru producerea unui tip de rezolvator distinct, cum ar fi `FindManyResolverFactory`, proiectată pentru aplicare adaptabilă în diverse tabele. ### Executor Întrebări Spațiu de Lucru Rulează interogările generate pe baza de date și parcurge rezultatul.