--- title: Architektura folderów info: Szczegółowe spojrzenie na naszą architekturę folderów serwera image: /images/user-guide/fields/field.png --- Header Struktura katalogów zaplecza wygląda następująco: ``` server └───ability └───constants └───core └───database └───decorators └───filters └───guards └───health └───integrations └───metadata └───workspace └───utils ``` ## Ability Definiuje uprawnienia i zawiera obsługę dla każdej encji. ## Dekoratory Definiuje niestandardowe dekoratory w NestJS dla dodatkowej funkcjonalności. Zobacz [dekoratory niestandardowe](https://docs.nestjs.com/custom-decorators) po więcej szczegółów. ## Filtry Zawiera filtry wyjątków do obsługi wyjątków, które mogą wystąpić na końcówkach GraphQL. ## Guards Zobacz [ochrony](https://docs.nestjs.com/guards) po więcej szczegółów. ## Zdrowie Zawiera publicznie dostępne REST API (healthz), które zwraca JSON w celu potwierdzenia, czy baza danych działa zgodnie z oczekiwaniami. ## Metadane Definiuje niestandardowe obiekty i udostępnia API GraphQL (graphql/metadata). ## Przestrzeń robocza Generuje i obsługuje niestandardowy schemat GraphQL oparty na metadanych. ### Struktura katalogów przestrzeni roboczej ``` 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 ``` W korzeniu katalogu przestrzeni roboczej znajduje się `workspace.factory.ts`, plik zawierający funkcję `createGraphQLSchema`. Ta funkcja generuje specyficzny schemat dla przestrzeni roboczej, dostosowując schemat na podstawie metadanych dla indywidualnych przestrzeni roboczych. Dzięki oddzieleniu konstrukcji schematu i resolverów używamy funkcji `makeExecutableSchema`, która łączy te dyskretne elementy. Ta strategia dotyczy nie tylko organizacji, ale także optymalizacji, takich jak buforowanie generowanych definicji typów w celu poprawy wydajności i skalowalności. ### Budowniczy schematów przestrzeni roboczej Generuje schemat GraphQL i zawiera: #### Fabryki: Specjalizowane konstruktory do generowania struktur związanych z GraphQL. - type.factory tłumaczy metadane pola na typy GraphQL używając `TypeMapperService`. - type-definition.factory tworzy obiekty wejściowe lub wyjściowe GraphQL pochodzące z `objectMetadata`. #### Typy GraphQL Zawiera enumeracje, wejścia, obiekty i skalary, i służą jako elementy konstrukcyjne dla budowy schematu. #### Interfejsy i Definicje Obiektów Zawiera plany dla jednostek GraphQL oraz obejmuje zarówno predefiniowane, jak i niestandardowe typy, takie jak `MONEY` lub `URL`. #### Usługi Zawiera usługę odpowiedzialną za skojarzenie FieldMetadataType z odpowiednim skalarem GraphQL lub modyfikatorami zapytań. #### Magazyn Zawiera klasę `TypeDefinitionsStorage`, która zawiera wielokrotnego użytku definicje typów, zapobiegając duplikacji typów GraphQL. ### Budowniczy Resolverów Przestrzeni Roboczej Tworzy funkcje resolverów do zapytywania i modyfikowania schematu GraphQL. Każda fabryka w tym katalogu jest odpowiedzialna za produkcję odmiennego typu resolvera, takiego jak `FindManyResolverFactory`, zaprojektowanego do elastycznego zastosowania w różnych tabelach. ### Uruchamiacz Zapytania Przestrzeni Roboczej Uruchamia wygenerowane zapytania do bazy danych i analizuje wynik.