---
title: Arquitetura de Pastas
info: Um olhar detalhado sobre a arquitetura de pastas do nosso servidor
image: /images/user-guide/fields/field.png
---

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

A estrutura do diretório do backend é a seguinte:

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

## Ability

Define permissões e inclui manipuladores para cada entidade.

## Decoradores

Define decoradores personalizados no NestJS para funcionalidade adicional.

Veja [decoradores personalizados](https://docs.nestjs.com/custom-decorators) para mais detalhes.

## Filtros

Inclui filtros de exceção para lidar com exceções que podem ocorrer em endpoints GraphQL.

## Guards

Veja [guardiões](https://docs.nestjs.com/guards) para mais detalhes.

## Saúde

Inclui uma API REST publicamente disponível (healthz) que retorna um JSON para confirmar se o banco de dados está funcionando como esperado.

## Metadados

Define objetos personalizados e disponibiliza uma API GraphQL (graphql/metadata).

## Workspace

Gera e fornece um esquema GraphQL personalizado baseado nos metadados.

### Estrutura de Diretórios do Workspace

```
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      
```

A raiz do diretório do workspace inclui o `workspace.factory.ts`, um arquivo contendo a função `createGraphQLSchema`. Esta função gera um esquema específico do workspace usando os metadados para adaptar um esquema para workspaces individuais. Ao separar a construção do esquema e do solucionador, utilizamos a função `makeExecutableSchema`, que combina esses elementos discretos.

Esta estratégia não é apenas sobre organização, mas também ajuda na otimização, como o armazenamento em cache das definições de tipo geradas para melhorar o desempenho e a escalabilidade.

### Construtor do Esquema do Workspace

Gera o esquema GraphQL e inclui:

#### Fábricas:

Construtores especializados para gerar construções relacionadas ao GraphQL.

- A type.factory traduz metadados de campo em tipos GraphQL usando o `TypeMapperService`.
- A type-definition.factory cria objetos de entrada ou saída GraphQL derivados de `objectMetadata`.

#### Tipos GraphQL

Inclui enumerações, entradas, objetos e escalas, e serve como blocos de construção para a construção do esquema.

#### Interfaces e Definições de Objetos

Contém os modelos para entidades GraphQL e inclui tipos predefinidos e personalizados como `MONEY` ou `URL`.

#### Serviços

Contém o serviço responsável por associar FieldMetadataType ao seu adequado escalar GraphQL ou modificadores de consulta.

#### Armazenamento

Inclui a classe `TypeDefinitionsStorage` que contém definições de tipo reutilizáveis, prevenindo a duplicação de tipos GraphQL.

### Construtor de Solucionadores do Workspace

Cria funções de solucionadores para consultas e mutações do esquema GraphQL.

Cada fábrica neste diretório é responsável por produzir um tipo de solucionador distinto, como o `FindManyResolverFactory`, projetado para aplicação adaptável em várias tabelas.

### Executor de Consultas do Workspace

Executa as consultas geradas no banco de dados e analisa o resultado.
