---
title: Arquitectura de Directoris
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>

L'estructura del directori del backend és la següent:

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

## Ability

Defineix permisos i inclou manejadors per a cada entitat.

## Decoradors

Defineix decoradors personalitzats en NestJS per a funcionalitat afegida.

See [custom decorators](https://docs.nestjs.com/custom-decorators) for more details.

## Filtres

Inclou filtres d'excepcions per gestionar les excepcions que poden ocórrer en els punts finals de GraphQL.

## Guards

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

## Salut

Inclou una API REST pública (healthz) que retorna un JSON per confirmar si la base de dades funciona correctament.

## Metadades

Defineix objectes personalitzats i fa disponible una API GraphQL (graphql/metadata).

## Espai de treball

Genera i serveix esquemes GraphQL personalitzats basats en les metadades.

### Estructura del Directori de l'Espai de Treball

```
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 l'arrel del directori de l'espai de treball s'inclou l'arxiu `workspace.factory.ts`, que conté la funció `createGraphQLSchema`. Aquesta funció genera un esquema específic d'espai de treball utilitzant les metadades per adaptar un esquema per als espais de treball individuals. Separant la construcció de l'esquema i el resolvent, utilitzem la funció `makeExecutableSchema`, que combina aquests elements discrets.

Aquesta estratègia no es tracta només d'organització, sinó que també ajuda en l'optimització, com ara en l'emmagatzematge a la memòria cau de definicions de tipus generades per millorar el rendiment i l'escalabilitat.

### Constructor de l'Esquema de l'Espai de Treball

Genera l'esquema de GraphQL, i inclou:

#### Fàbriques:

Constructors especialitzats per generar construccions relacionades amb GraphQL.

- La fàbrica de tipus tradueix les metadades de camp a tipus GraphQL utilitzant `TypeMapperService`.
- La fàbrica de definició de tipus crea objectes d'entrada o sortida GraphQL derivats de `objectMetadata`.

#### Tipus de GraphQL

Inclou enumeracions, entrades, objectes i escalares, i serveix com a blocs de construcció per a la construcció de l'esquema.

#### Interfícies i Definicions d'Objectes

Conté els plànols per a les entitats GraphQL, i inclou tant tipus predefinits com personalitzats com `DINERS` o `URL`.

#### Serveis

Conté el servei responsable d'associar FieldMetadataType amb el seu escalar GraphQL apropiat o modificadors de consultes.

#### Emmagatzematge

Inclou la classe `TypeDefinitionsStorage` que conté definicions de tipus reutilitzables, prevenint la duplicació de tipus GraphQL.

### Constructor de Resolvent de l'Espai de Treball

Crea funcions de resolvent per consultar i modificar l'esquema GraphQL.

Each factory in this directory is responsible for producing a distinct resolver type, such as the `FindManyResolverFactory`, designed for adaptable application across various tables.

### Workspace Query Runner

Executa les consultes generades sobre la base de dades i interpreta el resultat.
