Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JCN-230-PACKAGE-SOLR #1

Merged
merged 17 commits into from
Feb 18, 2020
Merged

JCN-230-PACKAGE-SOLR #1

merged 17 commits into from
Feb 18, 2020

Conversation

Nataniel4
Copy link
Contributor

@Nataniel4 Nataniel4 commented Feb 7, 2020

JTR-230-PACKAGE-SOLR
JTR-230 Crear package Solr

LINK AL TICKET
https://fizzmod.atlassian.net/browse/JTR-230

DESCRIPCIÓN DEL REQUERIMIENTO
Se requiere crear u nuevo package Solr, el package se usará como Driver de base de datos.

El Driver debe poder realizar las siguientes acciones:

  • constructor(config): Recibirá la configuración en un object, la misma se debe validar con las siguientes reglas:

    • url: URL base para usar en las requests.
    • core: String con el nombre del core, similar a "database" para mongodb y mysql.
  • multiInsert(model, items): Recibirá el modelo y un array de objects a insertar.

  • get(model, params = {}): Obtener documentos de la base de datos, se deben cubrir las funcionalidades comunes de los drivers:

    • params.filters: Object para poder filtrar los resultados:
// para filtrar por un campo como "identico"
await solrDriverInstance.get(myModel, {
  filters: { name: 'juan' }
});

// para buscar aplicando multiples filtros en un campo...
await solrDriverInstance.get(myModel, {
  filters: {
    entity: 'product',
    entityId: ['5e1c79b0a9de9c0007e9830d', '5e1c7999a9de9c0007e9830c']
  }
});

// Para cambiar el tipo de filtro
await solrDriverInstance.get(myModel, {
  filters: { dateCreated: { type: 'greater', value: '2020-01-27T14:07:57.265Z' } }
});
  • Se debe poder aplicar los siguientes tipos de filtros
    • equal (Default)
    • notEqual
    • greater
    • greaterOrEqual
    • lesser
    • lesserOrEqual
  • params.order: Object para pode ordernar los resultados. Se espera el siguiente formato:
{
  dateCreated: 'asc',
  otherField: 'desc'
}
// se debe ordenar por ambos parámetros.
// en caso de que no sea valida la estructura o la dirección de ordenamiento se debe arrojar un error
  • params.page: Number para aplicar a una página

  • params.limit: Number para aplicar un limite de registros devueltos, en caso de no ser enviado, se debe aplicar por default el valor 500.

  • getTotals(model): Misma funcionalidad que otros drivers, debe devolver un object como el siguiente, para mostrar los “totales” de la ultima query realizada:

DESCRIPCIÓN DE LA SOLUCIÓN
Se desarrollaron los requerimientos solicitados, pero se cambio la estructura de la configuración ya que los cores de Solr ahora actuan como las colecciones/tablas y las urls como las databases, por lo que el core debe estar en en el model y la config de la instancia solo recibe la url.

CÓMO SE PUEDE PROBAR
Se puede probar utilizando un docker de Solr local, para ello se necesita el siguiente docker-compose.yml

version: "3.3"

services:
  solr:
    container_name: dev-solr
    image: solr:8.3
    volumes:
      - ~/.solr/dev-data:/var/solr
    ports:
      - "8983:8983"

Antes de iniciar el docker hay que aplicar los permisos en las carpetas que se van a montar e iniciar el docker:

# Crear el directorio si no existe
# mkdir -p ~/.solr/dev-data

sudo chmod 777 ~/.solr/dev-data

Crear un core

Copiar la carpeta de configs al directorio de Solr:

docker exec -it dev-solr bash

cp -r server/solr/configsets /var/solr/data/configsets

exit

Se puede crear un core usando el metodo createCore() del package.

Con el core creado ya se puede probar el resto de los metodos del package.

CHANGELOG.md Show resolved Hide resolved
lib/helpers/filters.js Show resolved Hide resolved
lib/helpers/filters.js Outdated Show resolved Hide resolved
lib/helpers/query.js Show resolved Hide resolved
lib/helpers/response.js Show resolved Hide resolved
tests/solr-test.js Outdated Show resolved Hide resolved
tests/solr-test.js Show resolved Hide resolved
lib/solr.js Outdated Show resolved Hide resolved
tests/solr-test.js Outdated Show resolved Hide resolved

const res = await Request.post(endpoint, { delete: { id: item.id } }, this._auth);

Response.validate(res);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Creo que debería devolver algo, como el de mongo que devuelve true o false si logra borrar el objeto o no.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Si te parece mejor puedo devolver un true, pero solr no me da ninguna respuesta para poder devolver true o false, basicamente o devuelve 500 y explota o solo devuelve un objeto generico que devuelve en todas las apis

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Si estoy de acuerdo, debemos devolver un Boolean

lib/config-validator.js Show resolved Hide resolved

const res = await Request.post(endpoint, { delete: { id: item.id } }, this._auth);

Response.validate(res);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Si estoy de acuerdo, debemos devolver un Boolean

lib/solr.js Show resolved Hide resolved
@Nataniel4 Nataniel4 removed the request for review from fedeatanasoff February 17, 2020 13:53
README.md Outdated Show resolved Hide resolved
README.md Outdated Show resolved Hide resolved
README.md Outdated Show resolved Hide resolved
README.md Outdated
Removes a document in a solr core

- model: `Model`: A model instance
- item: `Object`: The item to be removed

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No debería decir que es el Item ya que el driver espera una ID para poder borrar

lib/solr.js Outdated Show resolved Hide resolved
lib/solr.js Outdated Show resolved Hide resolved
Copy link

@gastonpereyra gastonpereyra left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deje unos comentarios, nada grave

@juanhapes juanhapes merged commit 8e11b42 into master Feb 18, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants