# Modulos

Los módulos, en contraste con las funciones, son entidades que involucran un desarrollo más complejo y dependen de múltiples archivos, ya sea por requerir compilación u otras complejidades inherentes.&#x20;

Un ejemplo paradigmático de esto es un kit de desarrollo de software (SDK).\
\
Estos no se autoinician si no que es un directorio que esta pensado para alojar aquellos que deben ser invocados desde las rutas o funciones.&#x20;

La ubicacion de esto esta en la raiz del proyecto \~/modules\\

## Modo de uso

Los modulos deben ser contenidos por directorios en primer nivel. Dentro de estos directorios tiene que existe un archivo llamado main.js que tiene todo lo necesario para poder inicializar el modulo. Un ejemplo de esto es el siguiente.\\

```javascript
const prismaClient = require('./src/prisma/client').PrismaClient;
const jwt = require('jsonwebtoken');

const Client = () => {

    const logLevels = ['query', 'error', 'warn'];
    const clientName = 'User Management'
    const client = new prismaClient({
        log: logLevels.map(level => ({ emit: 'event', level })),
    });

    if (process.env.TRACE === 'true') {
        client.$on('query', e => {
            log('debug', `Params: ${e.params}\n\n${e.query}`, `Prisma ${clientName}`);
        });
    }

    logLevels.forEach(level => {
        if (level !== 'query') {
            client.$on(level, e => {
                log(level, `Params: ${e.params}\n\n${e.query}`, `Prisma ${clientName}`);
            });
        }
    });

    return client;
};

module.exports = { Client };
```

La forma de distribucion de este main se basa en esta rama de directorios dentro del directorio modulo

<figure><img src="https://3618891461-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjFc7ZNm1qTsazQNdkJC4%2Fuploads%2FiXIiYUeEGnGIiJzn4Z6P%2Fimage.png?alt=media&#x26;token=1bae2c53-bcd2-4db3-89d3-97e1437f954d" alt=""><figcaption></figcaption></figure>

Este main, se invocara mediante la variable global `module` indicando el directorio del modulo y el export de la funcion.

```javascript
    const client = modules['userManagement'].Client();
    const bearer = await client.token.findUnique({
      where: {
        bearer: token,
      },
    });
```
