npm package: @siclik-demo/protocol-buffers
Description: Módulo encargado de centralizar los protos de siclik
Author: CompuSoluciones
Latest version: 1.0.1

# Librería de protos
Esta librería esta encargada de centralizar los archivos proto para la comunicación entre los diferentes micro servicios de siclik.

Cada vez que un archivo proto se modifique o se cree uno nuevo, es necesario actualizar la librería siguiendo la arquitectura de la siguiente manera:

```
.
|── helpers
| └─ proto-paths.json //paths de los protos
|── proto-files //contenedor de protos por servicio
| └─ users
|   └─ read.proto //archivos proto
|   └─ write.proto
| └─ customers
| └─ products
| └─ ....
|── .eslintrc.js
|── .gitignore
|── index.js //se carga el proto para ser usado
|── test.js //archivo de pruebas
|── package.json
|── yarn.lock
.
```

## Realizar pruebas en local

### Empaquetar el modulo
Cuando deseamos realizar cambios o ajustes en nuestro modulo y tenemos la necesidad de probar los cambios, tenemos que realizar una serie de pasos para poder empaquetarlo e instalarlo en el api u otro modulo donde sera utilizado.

1 - Empaquetamos el modulo:
``` bash
$ npm pack
```
Esto nos genera un archivo .tgz con el nombre de nuestro proyecto, (para mantener un orden en las pruebas se puede renombrar el archivo solo concatenando la versión ejem. protoBufV2.tgz)

2 - Listar contenido en el archivo .tgz:
``` bash
$ tar -tf <Nombre del archivo .tgz>
```

### Instalar el paquete
Cuando tenemos nuestro modulo terminado y empaquetado en un archivo .tgz ahora podemos proceder a instalarlo para realizar pruebas con el como un modulo de `npm`.

Para lograr esto primero tenemos que saber la ubicación del paquete en nuestra maquina, posteriormente con un simple comando podemos instalarlo en el proyecto.

``` bash
// Con el gestor de paquetes NPM
$ npm install ../<ubicación del paquete>.tgz

// Con el gestor de paquetes YARN
$ yarn add ../<ubicación del paquete>.tgz
```

### Actualizar versión
Una vez que se realizaron las modificaciones necesarias para hacer uso de los archivos protos en la librería, se debe actualizar la versión de la misma desde el archivo de configuración o `package.json` desde la raiz del proyecto siguiendo un versionado semántico.

``` json
{
  "name": "@compusoluciones/protocol-buffers",
  "version": "0.0.9", // versión del proyecto
  "description": "Módulo encargado de centralizar los protos que usaran los micro servicios de siclik.",
  "main": "index.js",
}
```

### Publicar modulo en NPM
Cuando las modificaciones a la librería se hayan realizado correctamente y se valido su correcto funcionamiento, es necesario publicar en `npm` la nueva versión para mantenerla al dia con los protos que usan l os micro servicios.

Pasos para publicar una nueva versión se debe seguir los siguientes pasos.:
- Tener una cuenta de `npm` con el correo de la empresa **@compusoluciones**
- Acceso a la organización **compusoluciones** dada por una administrador de la misma.
- Permisos para publicar en la organización.
- Tener instalado el gestor de paquetes `npm` en tu maquina.
- Asociar `npm` a tu cuenta con `npm login` (solo la primera vez).
- Publicar con `npm publish --access=public`

## Modo de uso
Una vez que la nueva versión de la librería haya sido liberada y avisado al equipo de los cambios por medio del grupo en `slack`, es necesario indicar de la nueva versión al modulo de `grpc-connections` ya que esta es la que consume directamente la librería de protos y no podremos hacer uso de ella hasta no realizar estos cambios.

Cuando `grpc-connections` haya sido actualizada desde su **package.son** y publicada en `npm` con los cambios también se debe realizar el mismo procedimiento con los micro servicios que consumirán ambos módulos desde node.