---
title: Architettura delle Cartelle
info: Uno sguardo dettagliato alla nostra architettura di cartelle del server
---

La struttura della directory del backend è la seguente:

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

## Capacità

Definisce le autorizzazioni e include gestori per ciascuna entità.

## Decoratori

Definisce decoratori personalizzati in NestJS per funzionalità aggiuntive.

Vedi [decoratori personalizzati](https://docs.nestjs.com/custom-decorators) per maggiori dettagli.

## Filtri

Include filtri di eccezione per gestire le eccezioni che potrebbero verificarsi nei punti finali GraphQL.

## Guards

Vedi [guards](https://docs.nestjs.com/guards) per ulteriori dettagli.

## Stato di salute

Include un'API REST pubblicamente disponibile (healthz) che restituisce un JSON per confermare se il database funziona correttamente.

## Metadati

Definisce oggetti personalizzati e rende disponibile un'API GraphQL (graphql/metadata).

## Workspace

Genera e serve schemi GraphQL personalizzati basati sui metadati.

### Struttura della directory dello spazio di lavoro

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

La radice della directory di lavoro include il `workspace.factory.ts`, un file contenente la funzione `createGraphQLSchema`. Questa funzione genera uno schema specifico per il workspace utilizzando i metadati per adattare uno schema per i singoli lavori. Separando la costruzione dello schema e del risolutore, utilizziamo la funzione `makeExecutableSchema`, che combina questi elementi discreti.

Questa strategia non riguarda solo l'organizzazione, ma aiuta anche con l'ottimizzazione, come la memorizzazione nella cache delle definizioni di tipo generate per migliorare le prestazioni e la scalabilità.

### Generatore dello schema dello spazio di lavoro

Genera lo schema GraphQL e include:

#### Factory:

Costruttori specializzati per generare costrutti correlati a GraphQL.

* La fabbrica type.factory traduce i metadati del campo in tipi GraphQL utilizzando `TypeMapperService`.
* La fabbrica type-definition.factory crea oggetti di input o output GraphQL derivati da `objectMetadata`.

#### Tipi GraphQL

Include enumerazioni, input, oggetti e scalari e funge da base per la costruzione dello schema.

#### Interfacce e Definizioni di Oggetti

Contiene i progetti per le entità GraphQL e include tipi predefiniti e personalizzati come `MONEY` o `URL`.

#### Servizi

Contiene il servizio responsabile dell'associazione di FieldMetadataType al relativo scalare GraphQL o ai modificatori di query.

#### Archiviazione

Include la classe `TypeDefinitionsStorage` che contiene definizioni di tipo riutilizzabili, evitando la duplicazione di tipi GraphQL.

### Generatore di resolver dello spazio di lavoro

Crea funzioni di risolutore per interrogare e modificare lo schema GraphQL.

Ogni factory in questa directory è responsabile della produzione di un tipo di resolver distinto, come `FindManyResolverFactory`, progettato per un'applicazione adattabile su varie tabelle.

### Esecutore di query dello spazio di lavoro

Esegue le query generate sul database e analizza il risultato.
