https://concursosgcaba.buenosaires.gob.ar
Concursos orientados a generar oportunidades para el ingreso a GCABA y el crecimiento de los empleados de planta permanente,.
| Backend | Frontend |
|---|---|
| node +v9 | react +v16 |
| express +v4 | react-dom +v16 |
| knex +v0.15 | webpack +v3.12 |
| objection +v1.5 | style-loader +v0.16 |
| morgan +v1.9 | postcss-loader +v2.1 |
| helmet +v3 | formik +v1.5 |
| passport +v0.4.0 | |
| passport-local v1.0.0 | |
| pg +v7.0 | |
| redis +v2.8 | |
| snyk +v2.1 |
- Tener instalado Node.js v9.0 o superior.
- Tener instalado Npm
- Instalar Postgres (opcional en caso de que se quiera correr la base de datos local).
- instalar Redis (opcional, para manejar las sesiones localmente. Se puede correr el proyecto utilizando postgres localmente y no tener instalado redis, el portal se va a conectar con redis cuando le especifiquemos en la variable de entorno donde se tiene que conectar.)
- Clonar el repo.
- Ir por consola a la raíz del proyecto.
- Crear el fichero .env
- Crear las variables de entorno y agregar los valores respectivos.
- Correr el comando npm install
- Correr el comando npm run dev
- Abrir otra consola en la raíz del proyecto y correr el comando npm run devfe
-
dev
npm run dev corre el servidor en modo desarrollo. Toma como referencia el objeto de conexion a la base de datos postgres development.
-
devlocal
npm run devlocal corre el servidor en modo desarrollo. Toma como referencia el objeto de conexion a la base de datos postgres local.
-
devfe
npm run devfe llama a webpack en modo desarrollo para que empaquete los módulos escepecificados en su configuracion y quede en modo monitor escuchando.
-
start
npm run start corre los binarios ya minificados, empaquetados y transpilados. Se utiliza para correr el portal en producción.
-
build
npm run build corre dos scripts: primero corre buildbe y luego buildfe
-
buildbe
npm run buildbe llama a webpack en modo producction para que minifique y empaquete los assests del portal.
-
buildfe
npm run buildfe llama a babel para que transpile todo codigo y lo deje en el directorio /bin.
-
postinstall
script que utiliza heroku despues de instalar las dependencias.
/src/db/database.js
local: { client: 'pg', connection: { host : '127.0.0.1', // host de conexion database: "mibasededatos", // nombre de la base de datoos user: "postgres", // nombre de usuario en postgres password: "mipass" // contraseña de la base de datos }, migrations: { directory: path.join(__dirname, './migrations') // diretorio de las migraciones } }*Ejemplo del objeto de conexión a la base de datos.
Existen 4 objetos por default creados: local, development, staging, production.
https://concursosgcaba.buenosaires.gob.ar/
/auth
| Ruta | Metodo | Middleware | Detalles |
| /auth/login | GET |
|
ver |
| /auth/login | POST |
|
ver |
| /auth/register | GET |
|
ver |
| /auth/register | POST |
|
ver |
| /auth/forgot | GET |
|
ver |
| /auth/forgot | POST |
|
ver |
| /auth/validatemail | GET |
|
ver |
| /auth/validatemail | POST |
|
ver |
| /auth/validatemail/:token | GET |
|
ver |
| /auth/resetpassword/:token | GET |
|
ver |
| /auth/logout | GET |
|
ver |
/cuenta
| Ruta | Método | Middleware | Detalles |
| /cuenta | GET |
|
ver |
| /cuenta | POST |
|
ver |
| /cuenta/curriculum | GET |
|
ver |
| /cuenta/change | POST |
|
ver |
| /cuenta/change | POST |
|
ver |
| /cuenta/change/:token | POST |
|
ver |
/concursos
| Ruta | Método | Middleware | Detalles |
| /concursos | GET | ver | |
| /concursos/publicos/abiertos | GET |
|
ver |
| /concursos/cerrados/gcba | GET |
|
ver |
| /concurso/:id | GET |
|
ver |
| /concurso/:id/get | GET |
|
ver |
| /concurso/:id/postulacion | GET |
|
ver |
| /concurso/:id | POST |
|
ver |
/postulacion
| Ruta | Método | Middleware | Detalles |
| /postulacion/:id | GET | ver |
https://concursosgcaba.buenosaires.gob.ar/api
/api/postulaciones
| Ruta | Método | Middleware | Detalles |
| /api/postulaciones/:id | GET |
|
ver |
| /api/postulaciones | POST |
|
ver |
| /api/postulaciones/:id/curriculum | GET |
|
ver |
| /api/postulaciones/:id/modify | PATCH | ver | |
| /api/postulaciones/:pid/estudios/:id | DELETE |
|
ver |
| /api/postulaciones/:pid/capacitaciones/:id | DELETE |
|
ver |
| /api/postulaciones/:pid/experiencias/:id | DELETE |
|
ver |
/api/concursos
| Ruta | Método | Middleware | Detalles |
| /api/concursos | GET | ver | |
| /api/concursos/:id | GET | ver |
/api/curriculum
| Ruta | Método | Middleware | Detalles |
| /api/curriculum | GET |
|
ver |
| /api/curriculum | PATCH |
|
ver |
| /api/curriculum/estudio | POST |
|
ver |
| /api/curriculum/estudio/:id | PATCH |
|
ver |
| /api/curriculum/estudio/:id | DELETE |
|
ver |
| /api/curriculum/capacitacion | POST |
|
ver |
| /api/curriculum/capacitacion/:id | PATCH |
|
ver |
| /api/curriculum/capacitacion/:id | DELETE |
|
ver |
| /api/curriculum/experiencia | POST |
|
ver |
| /api/curriculum/experiencia/:id | PATCH |
|
ver |
| /api/curriculum/experiencia/:id | DELETE | ver |
| env | descripción |
| DOMAIN | - |
| HEROKU_POSTGRESQL_ONYX_URL | |
| MIBA_CLIENT_ID | |
| MIBA_CLIENT_SECRET | |
| MIBA_HOST | |
| NODE_ENV | |
| PAPERTRAIL_API_TOKEN | |
| RECAPTCHA_PRIVATE | |
| RECAPTCHA_PUBLIC | |
| REDIS_URL | |
| SECRET_KEY | |
| SF_CLIENT_ID | |
| SF_CLIENT_SECRET | |
| SF_DOMAIN | |
| SF_PASSWORD | |
| SF_USERNAME | |
| SMTP_PASSWORD | |
| SMTP_PORT | |
| SMTP_SERVER | |
| SMTP_USER | |
| SYNC | |
| SYNC_INTERVAL | |
| SYNC_ONLY_LAST_MODIFIED_RECORDS | |
| SYNC_URL | |
| SYNC_URL_GET_SF_TOKEN | |
| SYNC_VERSION_API | |
| TZ |
StackEdit extends the standard Markdown syntax by adding extra Markdown extensions, providing you with some nice features.
La conexión casi/total del portal con postgres se realizó a partir del momento en que se estaba exediendo el límite de api calls con sf, para realizar operaciones CRUD básicas salientes desde portal. Si bien ocurre un flujo de datos en varias direcciones desde el portal, postgres alimenta principalmente al sitio.
Para conectarnos con postgres utilizamos un query builder llamado knex asociado a otro query builder/orm llamado objection (objection esta basado en knex) con el cual desarrollamos nuestros modelos, asociaones, migraciones y seeders.
Principalmente el portal consumía datos desde Sf. Lo que ocurre aquí es que si queremos consumir datos de Sf desde una fuente externa, este tiene un límite de llamadas. En momentos que el portal tenia un flujo de datos arriba de lo normal, estas api calls que Sf nos proveeia se agotaban, por ende se debía pagar para obtener más.
Desde el portal se utiliza una librería jsforce la cual nos provee la conexión hacia Salesforce. A su vez nos entrega un objeto al estilo ORM con el cual podemos realizar consultas CRUD sql hacia nustreo entorno de Sf.
El portal inicialmente comenzo con un motor de renderizado de vistas handlebars . Con el correr del tiempo y las personas que fueron desarrollando en dicho proyecto, el renderizado de las vistas fue mutando en tecnologías. De a poco se ha ido desacoplando handlebars y mudando toda la UI a javascript react.js. Por motivos de performace, de la tecnologpia en si y diversos motivos más practicamente todo el renderizado de las vistas se tendría que pasar a react.
En el dia de hoy, la renderizacion de dichas vistas es compartida.
-
Handlebars:
- inicio
- navbar
- footer
- login
- lista de postulaciones
- recuperar contraseña
- normativa
- guia del usuario
-
React:
- lista de concursos abiertos
- lista de concursos cerrados
- detalle de un concurso
- prepostulacion
- pospostulacion
- curriculum