---
title: Архитектура папок
info: A detailed look into our server folder architecture
image: /images/user-guide/fields/field.png
---

<Frame>
  <img src="/images/user-guide/fields/field.png" alt="Header" />
</Frame>

Структура серверной директории следующая:

```
server
  └───ability
  └───constants 
  └───core
  └───database
  └───decorators
  └───filters
  └───guards
  └───health
  └───integrations
  └───metadata
  └───workspace
  └───utils
```

## Ability

Определяет разрешения и включает обработчики для каждого объекта.

## Декораторы

Определяет пользовательские декораторы в NestJS для расширенной функциональности.

Смотрите [пользовательские декораторы](https://docs.nestjs.com/custom-decorators) для более подробной информации.

## Фильтры

Includes exception filters to handle exceptions that might occur in GraphQL endpoints.

## Guards

Смотрите [защиты](https://docs.nestjs.com/guards) для более подробной информации.

## Health

Включает общедоступный 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`, которая объединяет эти отдельные элементы.

This strategy is not just about organization, but also helps with optimization, such as caching generated type definitions to enhance performance and scalability.

### Workspace Schema builder

Генерирует GraphQL схему и включает:

#### Фабрики:

Специализированные конструкторы для генерации связанных с GraphQL конструкций.

- Фабрика типов переводит метаданные поля в типы GraphQL, используя `TypeMapperService`.
- Фабрика определения типов создает объекты ввода или вывода GraphQL на основе `objectMetadata`.

#### Типы GraphQL

Включает перечисления, входы, объекты и скаляры и служит строительными блоками для построения схемы.

#### Интерфейсы и определение объектов

Содержит чертежи для GraphQL сущностей и включает как предопределенные, так и пользовательские типы, такие как `MONEY` или `URL`.

#### Сервисы

Содержит сервис, ответственный за ассоциацию FieldMetadataType с соответствующим скаляром GraphQL или модификаторами запроса.

#### Хранилище

Включает класс `TypeDefinitionsStorage`, содержащий переиспользуемые определения типов, предотвращая дублирование GraphQL типов.

### Конструктор резолверов рабочей области

Создает функции резолверов для запроса и изменения схемы GraphQL.

Каждая фабрика в этом каталоге отвечает за создание отдельного типа резолвера, как, например, `FindManyResolverFactory`, предназначенной для адаптируемого применения в различных таблицах.

### Выполнители запросов рабочей области

Выполняет сгенерированные запросы в базе данных и анализирует результат.
