--- title: Архітектура папок info: A detailed look into our server folder architecture image: Неможливо перекласти --- Header Структура каталогу бекенда виглядає так: ``` 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 Виконує згенеровані запити на базі даних та аналізує результат.