EthicApp-Development / ethicapp-main

EthicApp's main repository containing backend and frontend applications
MIT License
1 stars 1 forks source link

[ethicapp-v2/api-v2] Recreación del esquema de base de datos con sequelize #296

Closed claudio-alvarez closed 5 months ago

claudio-alvarez commented 8 months ago

Descripción general

Vamos a recrear el schema de base de datos utilizando sequelize. Haremos ciertas modificaciones al schema, de manera que las tablas que guardan contenido como preguntas y respuestas sean una sola, y éstas contengan una columna de tipo json/jsonb para almacenar estos contenidos como objetos, en vez de tener tablas separadas como ocurre en el schema en ethicapp-v2.

Para esto sería adecuado:

¿Cuándo se usaría?

La reimplementación de la base de datos utilizando sequelize permite utilizar migraciones para controlar la evolución de la base de datos, y brinda una serie de herramientas que facilitan la mantenibilidad de ella. Además, sequelize provee una interfaz de consulta que serviría para flexibilizar la implementación de endpoints de API y hacerla en forma segura y compatible con el último módulo de node-postgres (pg).

benjamin-gonzalez-diaz commented 8 months ago

lista de las tablas antiguas de la base de datos. (archivo de texto)

ethicapp-v2-dbtables.txt

lista de las tablas Nuevas de la base de datos

ethicapp-v2-api-v2-dbtables.txt

imagenes de las base de datos

Antigua: old data base Nueva: new database parte de alumno: base de datos 2 0  estudiantes

claudio-alvarez commented 8 months ago

En la lista depurada (tablas eliminadas), falta listar tablas que efectivamente se propone borrar. Dentro de las tablas a eliminar:

benjamin-gonzalez-diaz commented 7 months ago

ethicapp-v2-api-v2-dbtables-final.txt

claudio-alvarez commented 7 months ago

Queda aprobada la propuesta de modificación al diseño de schema, puedes continuar la implementación de las migraciones con Sequelize.

claudio-alvarez commented 7 months ago

@benjamin-gonzalez-diaz, puedes crear un PR para ir avanzando en esto, dado que desde un issue no podemos hacer review del código. Observo un par de detalles:

  1. Tenemos que analizar si sequelize permite distintos seeds diferenciados por ambiente. Si has creado seeders, por ejemplo, para la tabla stage, éstos tendrían que quedar para ambiente de desarrollo de acuerdo a lo que vemos en los commits. Tenemos una variable de entorno en EthicApp (mira el .env) que define esto; tendríamos que ver si compatibiliza con la forma de trabajar en sequelize.
  2. Evitemos replicar la práctica de ponerle nombre create_xx a las migraciones; más bien, procuremos ponerles nombres semánticos como se hace con otros frameworks (ActiveRecord). Si vas a agregar una tabla Stages, la clase debería llamarse CreateStagesTable probablemente, o si vas a agregar una columna, AddColumnToTable, etc.
benjamin-gonzalez-diaz commented 7 months ago

ethicapp_sequelize

claudio-alvarez commented 7 months ago

Podríamos adoptar un par de convenciones de nombres para mayor consistencia:

Incluso, hay algunas tablas cuyos nombres podríamos perfeccionar, por ejemplo:

También podríamos perfeccionar los nombres de las claves foráneas, adoptemos la convención de nombrar la FK con el nombre de la tabla a la que hace referencia, en singular, con sufijo id, por ejemplo, si la FK referencia "users", la FK tendría que llamarse user_id.

claudio-alvarez commented 6 months ago

Ojo con los atributos de modelName y tableName cuando creamos modelos! Si no somos consistentes, tendremos problemas después al utilizar la interfaz de consultas de sequelize. Aquí hay una descripción sobre los dos campos anteriores, con un ejemplo:

https://chat.openai.com/share/44478ecb-bc08-4730-9567-3032592efe44

claudio-alvarez commented 5 months ago

Implementado y revisado en PR #301.