App para notificacion de restriccion vehicular segun patente
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
app
public
.babelrc
.eslintignore
.eslintrc
.gitignore
.nvmrc
.travis.yml
LICENSE
README.md
devEntry.js
fetchNumerosRestriccion.js
index.js
nodemon.json
notifyLatestRestrictionDayUsers.js
npm-shrinkwrap.json
package.json
server.js
usersToMailchimp.js
webpack-server.js
webpack.config.js
webpack.config.production.js

README.md

¿Tengo Restricción?

Build Status

App para notificación de restricción vehicular según patente en Santiago de Chile

http://www.tengorestriccion.cl/

Arquitectura y Diseño del Sistema

index.js (App Entrypoint):

  • Inyección de Babel Runtime para utilizar sintaxis de ES6/7 (ES2015/2016) a través del proyecto
  • Apertura de conexión a MongoDB
  • Consulta por los últimos datos de restricción guardados en mongoDB, si no existen datos previos se corre el proceso de obtención y guardado por medio de Scraping con Request y Cheerio
  • Se encola el proceso recurrente de Scraping y notificación de usuarios a través de Kue y Redis
  • Se corre el servidor http server.js con Koa

server.js (HTTP Server):

Se utiliza Koa como plataforma para el servidor; la decisión de usarlo en vez de el mas popular Express se debe a el manejo de código asíncrono por medio de promesas y co-rutinas (y próximamente Async/Await) que nos entrega Koa, ademas de lo liviano, modular y flexible de la misma librería.

  • Utilizamos Helmet como middleware de seguridad contra XSS, CSRF y para el seteo de headers CSP
  • El logging de la Aplicación se hace por medio de Bunyan
  • Establecemos las rutas/endpoints y asignamos sus handlers desde app/controllers y app/client/index.js

app/server/index.js (Server AppHome Entrypoint):

El handler para la renderizacion de la Single Page App desde el lado del servidor. El frontend de la Aplicación esta construido con React y la renderizacion se comparte entre servidor y cliente

  • Se carga la vista principal app/views/main.html y se le inserta:
    • El estado inicial de la UI con los últimos datos de restricción recolectados, cargados desde MongoDb
    • La renderizacion de los componentes de react desde la raiz app/components/App.jsx
  • El estado de los componentes se maneja con Redux

app/client/index.js (Client AppHome Entrypoint):

Punto de entrada para la renderizacion y todo el código para el lado del cliente de la Single Page App. El frontend de la Aplicación esta construido con React y la renderizacion se comparte entre servidor y cliente

  • Se carga el estado inicial inyectado por el primer render desde el servidor y se inserta en los componentes a través de Redux
  • Se renderizan los componentes de react desde la raiz app/components/App.jsx
  • El estado de los componentes se maneja con Redux

Experiencia de Desarrollo (DX)

  • Para correr el entorno de desarrollo basta con correr el script npm start
  • El entorno de desarrollo consiste del servidor principal (a través de index.js), un proceso de Bundle y Hot-loading continuo para el código del lado del cliente con Webpack y un watcher para la compilacion en demanda de los estilos SASS con node-sass
  • Webpack nos permite hacer cambios en los archivos js que utiliza el bundle del cliente y ver los cambios en vivo en el browser, y debuggear los mismos sin necesidad de refrescarlo manualmente o herramientas externas
  • Nodemon escucha cualquier cambio en los archivos del servidor y vuelve a correr el entorno cada vez que haya un cambio en estos
  • Dependencias de Sistema:

Contribución

Si tienes ganas de aportar al proyecto te invitamos a hacerlo a de las siguientes maneras:

  • Si encuentras un bug o quieres proponer una mejora por favor abre un Issue en Github
  • Si quieres ayudar con un pull request que soluciona o documenta algún Issue, bug o error puedes:
    • Agregar tests que representen el o los errores a resolver (los tests deben ir asociados en una carpeta _test_ a los módulos que testean)
    • Agregar código que haga pasar estos tests
  • Si quieres aportar con la documentación puedes enviar un pull request con tus cambios

SantiagoLab.cl