--- title: Архитектура папок info: Подробное рассмотрение нашей архитектуры папок сервера --- Структура серверной директории следующая: ``` server └───ability └───constants └───core └───database └───decorators └───filters └───guards └───health └───integrations └───metadata └───workspace └───utils ``` ## Правила доступа Определяет разрешения и включает обработчики для каждого объекта. ## Декораторы Определяет пользовательские декораторы в NestJS для расширенной функциональности. Смотрите [пользовательские декораторы](https://docs.nestjs.com/custom-decorators) для более подробной информации. ## Фильтры Включает фильтры исключений для обработки исключений, которые могут возникать в конечных точках GraphQL. ## Гарды Смотрите [защиты](https://docs.nestjs.com/guards) для более подробной информации. ## Работоспособность Включает общедоступный REST API (healthz), который возвращает JSON, чтобы подтвердить, что база данных работает должным образом. ## Метаданные Определяет пользовательские объекты и предоставляет GraphQL API (graphql/metadata). ## Рабочее пространство Генерирует и обслуживает пользовательскую GraphQL схему на основе метаданных. ### Структура каталога рабочей области ``` 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 ``` Корень каталога рабочей области включает `workspace.factory.ts`, файл, содержащий функцию `createGraphQLSchema`. Эта функция генерирует схему, специфичную для рабочей области, используя метаданные для адаптации схемы для индивидуальных рабочих областей. Разделением построения схемы и резолвера, мы используем функцию `makeExecutableSchema`, которая объединяет эти отдельные элементы. Эта стратегия касается не только организации, но и помогает в оптимизации, например в кэшировании сгенерированных определений типов для повышения производительности и масштабируемости. ### Конструктор схем рабочей области Генерирует GraphQL схему и включает: #### Фабрики: Специализированные конструкторы для генерации связанных с GraphQL конструкций. * Фабрика типов переводит метаданные поля в типы GraphQL, используя `TypeMapperService`. * Фабрика определения типов создает объекты ввода или вывода GraphQL на основе `objectMetadata`. #### Типы GraphQL Включает перечисления, входы, объекты и скаляры и служит строительными блоками для построения схемы. #### Интерфейсы и определение объектов Содержит чертежи для GraphQL сущностей и включает как предопределенные, так и пользовательские типы, такие как `MONEY` или `URL`. #### Сервисы Содержит сервис, ответственный за ассоциацию FieldMetadataType с соответствующим скаляром GraphQL или модификаторами запроса. #### Хранилище Включает класс `TypeDefinitionsStorage`, содержащий переиспользуемые определения типов, предотвращая дублирование GraphQL типов. ### Конструктор резолверов рабочей области Создает функции резолверов для запроса и изменения схемы GraphQL. Каждая фабрика в этом каталоге отвечает за создание отдельного типа резолвера, как, например, `FindManyResolverFactory`, предназначенной для адаптируемого применения в различных таблицах. ### Выполнители запросов рабочей области Выполняет сгенерированные запросы в базе данных и анализирует результат.