---
title: Архітектура папок
info: A detailed look into our server folder architecture
image: Неможливо перекласти
---

<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) для отримання додаткової інформації.

## Фільтри

Містить фільтри винятків для обробки винятків, які можуть виникнути в кінцевих точках GraphQL.

## Guards

See [guards](https://docs.nestjs.com/guards) for more details.

## Health

Включає загальнодоступний REST API (healthz), який повертає JSON, щоб підтвердити чи база даних працює належним чином.

## Метадані

Визначає користувацькі об'єкти і надає API GraphQL (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`.
- The type-definition.factory creates GraphQL input or output objects derived from `objectMetadata`.

#### Типи GraphQL

Містить перелічення, вхідні дані, об'єкти та скаляри, які служать будівельними блоками для конструкції схеми.

#### Інтерфейси та визначення об'єктів

Містить креслення для сутностей GraphQL і включає як попередньо визначені, так і користувацькі типи, такі як `MONEY` або `URL`.

#### Сервіси

Містить сервіс, відповідальний за пов'язання FieldMetadataType з відповідними скалярами або модифікаторами запитів GraphQL.

#### Сховище

Містить клас `TypeDefinitionsStorage`, який містить повторно використовувані визначення типів, запобігаючи дублюванню типів GraphQL.

### Будівельник вирішувачів робочого місця

Створює функції вирішувачів для запитів та мутувань схеми GraphQL.

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

### Workspace Query Runner

Виконує згенеровані запити на базі даних та аналізує результат.
