--- title: Arquitetura de Pastas info: Um olhar detalhado sobre a arquitetura de pastas do nosso servidor image: /images/user-guide/fields/field.png --- Header 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.