# 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<br>

## 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.<br>

```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="/files/NA3QA8H2KPMTR3U4ekjg" 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,
      },
    });
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://agustin-fernandez.gitbook.io/monointegrator/primeros-pasos/modulos.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
