Skip to content

Commit

Permalink
refactor(content): bq api - codigo necesario por mongoDB setup, mover…
Browse files Browse the repository at this point in the history
… docker reqs, fix spawn en Windows (#1353)

* trabajo necesario por mongoDB setup y spawn en Windows

* cambios a README

* ideas para adiciones GETTING_STARTED

* comentando config y e2e tests mejor

* mdlint fixes

* separating docker and mongo guides

* remove mongo deps from package.json

* clean mongoDB references de proyecto

* patch for Mongo

* Update projects/04-burger-queen-api/README.md

* cambios al readme y guia

* mdlint fixes

* readd jsonwebtoken dep

* remove ws from patch

* patch in the wrong place

* patch mongoDB created from project not from bootcamp

* actualizar table of contents

* update guia and remove mongoose refs

* minor corrections

* rehacer el patch

* corrections

* remove redundant checklist, node driver resource

* Update TODO projects/04-burger-queen-api/controller/users.js

Co-authored-by: Alfredo González <12631491+mfdebian@users.noreply.github.com>

* mas detalle en TODO comentarios

* quitar mysql postgres de readme inicial, hacker edition docker

* apply and remove patch for e2e tests

* linter and section for hacker edition

* Apply grammar and spelling suggestions from code review

Co-authored-by: Mariano Crowe <merunga@gmail.com>

* remove MySQL and add code link for snippet

* mas correciones de spelling, con uso de extension

* Update auth.js

* Apply suggestions from code review

* update pt README

* translations in pt, editions of docker readme

* borra parte 1 de docker, es redundante

* mdlint fixes

* cambios de connect y TODOs

* agregamos status de resp en globalSetup errors

* Update projects/04-burger-queen-api/guides/GETTING-STARTED-MONGODB.md

Co-authored-by: Alfredo González <12631491+mfdebian@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Alfredo González <12631491+mfdebian@users.noreply.github.com>

* espanol no pt, error response

* Update README.md guides url

* Update README.pt.md url guides y texto duplicado

---------

Co-authored-by: Alfredo González <12631491+mfdebian@users.noreply.github.com>
Co-authored-by: Mariano Crowe <merunga@gmail.com>
  • Loading branch information
3 people authored May 17, 2023
1 parent 6de8e2f commit e918faf
Show file tree
Hide file tree
Showing 15 changed files with 1,073 additions and 363 deletions.
132 changes: 47 additions & 85 deletions projects/04-burger-queen-api/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
* [3. Objetivos de aprendizaje](#3-objetivos-de-aprendizaje)
* [4. Consideraciones generales](#4-consideraciones-generales)
* [5. Criterios de aceptación mínimos del proyecto](#5-criterios-de-aceptaci%C3%B3n-m%C3%ADnimos-del-proyecto)
* [6. Pistas, tips y lecturas complementarias](#6-pistas-tips-y-lecturas-complementarias)
* [7 HTTP API Checklist](#7-http-api-checklist)
* [6. Hacker (Devops) Edition con Docker](#6-hacker-%28devops%29-edition-con-docker)
* [7. Pistas, tips y lecturas complementarias](#6-pistas-tips-y-lecturas-complementarias)

## 1. Preámbulo

Expand Down Expand Up @@ -44,8 +44,8 @@ _endpoints_ (puntos de conexión o URLs) y nos piden completar la aplicación.
Esto implica que tendremos que partir por leer la implementación existente, y
familiarizarnos con el _stack_ elegido ([Node.js](https://nodejs.org/) y
[Express](https://expressjs.com/)) y complementarlo con un motor de bases de
datos, el cual tu deberás elegir entre [MongoDB](https://www.mongodb.com/),
[PostgreSQL](https://www.postgresql.org/) y [MySQL](https://www.mysql.com/).
datos. Recomendamos el uso de [MongoDB](https://www.mongodb.com/) y tenemos una
[guía para empezar con MongoDB](./guides/GETTING-STARTED-MONGO-DB.md).

La clienta nos ha dado un [link a la documentación](https://app.swaggerhub.com/apis-docs/ssinuco/BurgerQueenAPI/2.0.0)
que especifica el comportamiento esperado de la API que expondremos por
Expand All @@ -55,21 +55,20 @@ implementar la aplicación, qué parámetros esperan, qué deben responder, etc.
El objetivo principal de aprendizaje es adquirir experiencia con **Node.js**
como herramienta para desarrollar _aplicaciones de servidor_, junto con una
serie de herramientas comunes usadas en este tipo de contexto (Express como
framework, MongoDB, PostgreSQL o MySQL como base datos, contenedores de docker,
etc).
framework, MongoDB como base datos, etc).

En este proyecto tendrás que construir un servidor web que debe _servir_ `JSON`
sobre `HTTP`, y desplegarlo en un servidor en la nube.

Para completar el proyecto tendrás que familiarizarte con conceptos como
**rutas** (_routes_), **URLs**, **HTTP** y **REST** (verbs, request, response,
headers, body, status codes...), **JSON**, **JWT** (_JSON Web Tokens_),
**conexión con una base datos** (`MongoDB`, `PostgreSQL`, o `MySQL`),
**variables de entorno**, **deployment**, **contenedores de `docker`**, etc.
**conexión con una base datos** (`MongoDB`),
**variables de entorno**, **deployment**, etc.

## 3. Objetivos de aprendizaje

> ℹ️ Esta sección será auomáticamente generada en el idioma pertinente, a partir
> ℹ️ Esta sección será automáticamente generada en el idioma pertinente, a partir
> de los objetivos de aprendizaje declarados en [`project.yml`](./project.yml),
> al crear el repo del proyecto para un cohort en particular usando
> [`./scripts/create-cohort-project.js`](../../scripts#create-cohort-project-coaches).
Expand Down Expand Up @@ -182,10 +181,10 @@ npm start 8888

Nuestra aplicación usa las siguientes variables de entorno:

* `PORT`: Si no se ha especificado un puerto como argumento de lína de comando,
* `PORT`: Si no se ha especificado un puerto como argumento de línea de comando,
podemos usar la variable de entorno `PORT` para especificar el puerto. Valor
por defecto `8080`.
* `DB_URL`: El _string_ de conexión de _MongoDB_ o _MySQL_. Cuando ejecutemos la
* `DB_URL`: El _string_ de conexión de _MongoDB_. Cuando ejecutemos la
aplicación en nuestra computadora (en entorno de desarrollo), podemos usar el
una base de datos local, pero en producción deberemos utilizar las instancias
configuradas con `docker-compose` (mas sobre esto en la siguiente sección de
Expand All @@ -204,107 +203,70 @@ Nuestra aplicación usa las siguientes variables de entorno:

### 5.3 Despliegue (Deployment)

Puedes elegir el proveedor (o proveedores) que prefieras junto
con el mecanismo de despliegue y estrategia de alojamiento. Te recomendamos
explorar las siguientes opciones:

* [Vercel](https://vercel.com/) es una opción enfocada
a aplicaciones web estáticas (como las que se construyen con React). Sin embargo,
Vercel también nos permite desplegar aplicaciones node usando [Serverless
Functions](https://vercel.com/docs/serverless-functions/introduction).
* [MongoDB Atlas](https://www.mongodb.com/cloud/atlas)
es una muy buena opción para alojar nuestra base datos de producción, la cuál
podemos usar en conjunción con cualquiera de las opciones mencionadas arriba.

Si tienes dudas sobre las diferentes (y múltiples) opciones de despliegue no
dudes en consultar con tus pares y tus coaches.

### 6. Hacker (Devops) Edition con Docker

Nuestra clienta nos ha manifestado que su equipo de _devops_ está siempre con
muchas tareas, por por lo que nos pide como requerimiento que la aplicación esté
muchas tareas, por lo que nos pide como requerimiento que la aplicación esté
configurada con `docker-compose` para que pueda ser desplegada sin dificultades
en cualquier entorno.

El _boilerplate_ ya cuenta con una configuración incial de `docker-compose` para
la aplicación de node, tu tarea será extender esa configuración para incluir la
configuración de base de datos que hayas elegido. Ten en cuenta que como vas a
tener dos servidores corriendo sobre una misma configuración, deberás exponer
El _boilerplate_ ya cuenta con una configuración inicial de `docker-compose` para
la aplicación de node, tu tarea será extender esa configuración para incluir
la configuración de base de datos. Ten en cuenta que como vas a tener dos
servidores corriendo sobre una misma configuración, deberás exponer
los servicios en diferentes puertos.

Para este proyecto te recomendamos usar `docker-compose` localmente (en tu
computadora) para ejecutar la aplicación junto con la base de datos
seleccionada. Por otro lado, con respecto al despliegue, no es obligatorio usar
`docker-compose`, puedes elegir el proveedor (o proveedores) que prefieras junto
con el mecanismo de despligue y estrategia de alojamiento. Te recomendamos
explorar las siguientes opciones:
Lee la [**guía para docker**] (./guides/GETTING-STARTED-DOCKER.md)
incluido en el proyecto para mas información.

Para probar tu configuración de docker, te recomendamos usar `docker-compose`
localmente (en tu computadora) para ejecutar la aplicación junto
con la base de datos.

Con respecto al despliegue, puedes elegir el proveedor (o proveedores)
que prefieras junto con el mecanismo de despliegue y estrategia de alojamiento.
Te recomendamos explorar las siguientes opciones:

* [Glitch](https://glitch.com) es
probablemente la opción más _sencilla_ (la que requiere menos configuración) y
nos permite alojar el servidor web Express
importando nuestro repositorio desde GitHub.
* [Vercel](https://vercel.com/) es una opción similar a Glitch, pero enfocada
a aplicaciones web estáticas (como las que se construyen con React). Sin embargo,
Vercel también nos permite desplegar aplicaciones node usando [Serverless
Functions](https://vercel.com/docs/serverless-functions/introduction).
* Si quieres explorar opciones más personalizadas y ver docker del lado del
servidor puedes cosiderar proveedores como
servidor puedes considerar proveedores como
[AWS (Amazon Web Services)](https://aws.amazon.com/) o
[GCP (Google Cloud Platform)](https://cloud.google.com/), ambos tienen algún
tipo de _free tier_ así como tanto _instancias_ de _servidores virtuales_
(VPS) donde configurar nuestro propio Docker o servicios para desplegar
aplicaciones en contenedores (por ejemplo [Compute Engine](https://cloud.google.com/compute/docs/containers)
de GCP o [Elastic Container Service](https://aws.amazon.com/ecs/) de AWS).
* Si quieres trabajar con MongoDB, [MongoDB Atlas](https://www.mongodb.com/cloud/atlas)
es una muy buena opción para alojar nuestra base datos de producción, la cuál
podemos usar en conjunción con cualquiera de las opciones mencionadas arriba.
* Si quieres trabajar con PostgreSql, [ElephantSQL](https://www.elephantsql.com/plans.html)
es una muy buena opción para alojar nuestra base datos de producción, la cuál
podemos usar en conjunción con cualquiera de las opciones mencionadas arriba.
* Si quieres trabajar con MySQL, [ClearDB](https://www.cleardb.com/) es una
muy buena opción para alojar nuestra base datos de producción, la cuál podemos
usar en conjunción con cualquiera de las opciones mencionadas arriba.

Si tienes dudas sobre las diferentes (y múltiples) opciones de despliegue no
dudes en consultar con tus pares y tus coaches.

## 6. Pistas, tips y lecturas complementarias
## 7. Pistas, tips y lecturas complementarias

### Primeros pasos

> :information_source: Antes de comenzar a programar te recomendamos leer y
> seguir con detenimiento la [**guía de _primeros pasos_**](./GETTING-STARTED.md)
> para ayudarte a elegir tu stack (base de datos, módulo para conectar a la base
> de datos desde Node.js, etc) y configurar tu entorno de desarrollo.
> seguir con detenimiento la [**guía de _primeros pasos_**](./GETTING-STARTED-MONGODB.md)
> para ayudarte con el stack recomendado y configurar tu entorno de desarrollo.
### Otros recursos

* [Express](https://expressjs.com/)
* [MongoDB](https://www.mongodb.com/)
* [PostgreSQL](https://www.postgresql.org/)
* [MySQL](https://www.mysql.com/)
* [MongoDB Node Driver](https://www.mongodb.com/docs/drivers/node/current/)
* [docker](https://docs.docker.com/)
* [docker compose](https://docs.docker.com/compose/)
* [¿Qué es Docker? | Curso de Docker | Platzi Cursos](https://youtu.be/hQgvt-s-AHQ)
* [Postman](https://www.getpostman.com)
* [Variable de entorno - Wikipedia](https://es.wikipedia.org/wiki/Variable_de_entorno)
* [`process.env` - Node.js docs](https://nodejs.org/api/process.html#process_process_env)

---

## 7 HTTP API Checklist

### 7.1 `/`

* [ ] `GET /`

### 7.2 `/auth`

* [ ] `POST /auth`

### 7.3 `/users`

* [ ] `GET /users`
* [ ] `GET /users/:uid`
* [ ] `POST /users`
* [ ] `PATCH /users/:uid`
* [ ] `DELETE /users/:uid`

### 7.4 `/products`

* [ ] `GET /products`
* [ ] `GET /products/:productid`
* [ ] `POST /products`
* [ ] `PATCH /products/:productid`
* [ ] `DELETE /products/:productid`

### 7.5 `/orders`

* [ ] `GET /orders`
* [ ] `GET /orders/:orderId`
* [ ] `POST /orders`
* [ ] `PATCH /orders/:orderId`
* [ ] `DELETE /orders/:orderId`
134 changes: 52 additions & 82 deletions projects/04-burger-queen-api/README.pt.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
* [3. Objetivos de aprendizagem](#3-objetivos-de-aprendizagem)
* [4. Considerações gerais](#4-considerações-gerais)
* [5. Critérios de aceitação mínimos do projeto](#5-critérios-de-aceitação-mínimos-do-projeto)
* [6. Pistas, tips e leituras complementares](#6-pistas-tips-e-leituras-complementares)
* [7 HTTP API Checklist](#7-http-api-checklist)
* [6. Hacker (Devops) Edition con Docker](#6-edição-hacker-devops-com-docker)
* [7. Pistas, tips e leituras complementares](#7-pistas-tips-e-leituras-complementares)

## 1. Prefácio

Expand Down Expand Up @@ -41,10 +41,13 @@ de maneira relativamente simples, tudo isso usando JavaScript!

Neste projeto partimos de um _boilerplate_ que já contém uma série de
_endpoints_ (pontos de conexão ou URLs) e nos pedem para completar a aplicação.
Isto implica que teremos que começar a ler a implementação existente, e
familiarizar-nos com a _stack_ escolhida ([Node.js](https://nodejs.org/) e
[Express](https://expressjs.com/)) e complementá-la com um motor de banco de dados,
no qual você deverá escolher entre [MongoDB](https://www.mongodb.com/),
Isso implica que teremos que começar lendo a implementação existente e nos
familiarizar com o _stack_ escolhido ([Node.js](https://nodejs.org/) e
[Express](https://expressjs.com/)), além de complementá-lo com um motor de
banco de dados. Recomendamos o uso do [MongoDB](https://www.mongodb.com/)
e temos [um guia para começar com o MongoDB.](./guides/GETTING-STARTED-MONGO-DB.pt.md)

[MongoDB](https://www.mongodb.com/),
[PostgreSQL](https://www.postgresql.org/) e [MySQL](https://www.mysql.com/).

O cliente nos deu um
Expand All @@ -56,17 +59,16 @@ implementar na aplicação, que parâmetros esperam, o que devem responder, etc.

O objetivo de aprendizagem principal é adquirir experiência com o **Node.js**
como ferramenta para desenvolvimento de _aplicações de servidor_, junto com uma série
de outras ferramentas comumente utilizadas nesse contexto (Express como framework,
MongoDB, PostgreSQL ou MySQL como base de dados, containers de docker, etc).
de outras ferramentas comumente utilizadas nesse contexto (Express como
framework, MongoDB como base de dados, etc.).

Neste projeto, você desenvolverá um servidor web que deverá _servir_ `JSON`
através de uma conexão `HTTP`, e implantá-lo em um servidor na nuvem.

Ao final do projeto, você deverá estar familiarizada com conceitos como **rotas**
(_routes_), **URLs**, **HTTP** (verbos, request, response, headers, body, status
codes, etc), **JSON**, **JWT** (_JSON Web Tokens_), **conexão com uma base de dados**
(`MongoDB`, `PostgreSQL` ou `MySQL`), **variables de ambiente**, **deployment**,
**containers de `docker`**, etc.
(`MongoDB`), **variables de ambiente**, **deployment**, etc.

## 3. Objetivos de aprendizagem

Expand Down Expand Up @@ -205,31 +207,45 @@ Nossa aplicação usa as seguintes variáveis de ambiente:

### 5.3 Implantação (Deployment)

Nosso cliente nos informou que a sua equipe de _devops_ está sempre com muitas
tarefas, portanto, pediu como requesito que a aplicação esteja configurada
com `docker-compose` para que possa ser implantada sem dificuldades em qualquer
ambiente.

O _boilerplate_ já conta com uma configuração incial de `docker-compose` para
a aplicação de node, sua tarefa será estender essa configuração para incluir a
configuração do banco de dados escolhido.
Leve em consideração que como terá dois servidores rodando sobre uma mesma
configuração, deverá colocar os serviços em diferentes portas.

Para este projeto te recomendamos a usar `docker-compose` localmente (em seu
computador) para executar a aplicação junto com a base de dados
selecionada. Por outro lado, em relação a implantação, não é obrigatório usar
`docker-compose`, você pode escolher o provedor (ou provedores) que preferir junto
com o mecanismo de implantação e estratégia de hospedagem. Te recomendamos
explorar as seguintes opcões:

* [Glitch](https://glitch.com) é provavelmente a opção mais _simples_
(requer menos configuração) e nos permite hospedar o servidor web Express
importando nosso repositório do GitHub.
* [Vercel](https://vercel.com/) é uma opção semelhante ao Glitch, mas
focada em aplicativos web estáticos (como os construídos com React).
No entanto, o Vercel também nos permite implantar aplicativos node usando
Você pode escolher o provedor (ou provedores) que preferir,
juntamente com o mecanismo de implantação e estratégia de hospedagem.
Recomendamos que você explore as seguintes opções:

* [Vercel](https://vercel.com/) é uma opção focada em aplicativos
da web estáticos (como os construídos com React). No entanto,
o Vercel também nos permite implantar aplicativos node usando
[Serverless Functions](https://vercel.com/docs/serverless-functions/introduction)
[MongoDB Atlas](https://www.mongodb.com/cloud/atlas)
é uma ótima opção para hospedar nosso banco de dados de produção,
que pode ser usado em conjunto com qualquer uma das opções mencionadas acima.

Se tiver dúvidas sobre as diferentes opções de implantação (que são várias),
não hesite em consultar seus colegas e seus coaches.

## 6. Edição Hacker (DevOps) com Docker

Nossa cliente nos informou que sua equipe de DevOps está sempre
ocupada com muitas tarefas, portanto, ela nos pede como requisito que
o aplicativo seja configurado com `docker-compose` para que possa ser
implantado facilmente em qualquer ambiente.

O boilerplate já possui uma configuração inicial de `docker-compose`
para o aplicativo Node.js, sua tarefa será estender essa configuração para
incluir a configuração do banco de dados. Tenha em mente que,
como você terá dois servidores sendo executados na mesma configuração,
você precisará expor os serviços em portas diferentes.

Leia o [guia para docker](./guides/GETTING-STARTED-DOCKER.pt.md) incluído
no projeto para mais informações.

Para testar sua configuração do Docker, recomendamos que você use o
`docker-compose` localmente (em seu computador) para executar o
aplicativo junto com o banco de dados.

Quanto à implantação, você pode escolher o provedor (ou provedores)
que preferir, juntamente com o mecanismo de implantação e estratégia
de hospedagem. Recomendamos que você explore as seguintes opções:

* Se quiser explorar opções mais personalizadas e ver o docker do lado do
servidor, pode considerar provedores como
[AWS (Amazon Web Services)](https://aws.amazon.com/) ou
Expand All @@ -238,60 +254,14 @@ de serviço experimental gratuito (_free tier_) assim como instâncias de servid
virtuais (VPS), onde configuramos nosso próprio Docker ou serviços para implantar
aplicações em contêineres (por exemplo [Compute Engine](https://cloud.google.com/compute/docs/containers)
de GCP ou [Elastic Container Service](https://aws.amazon.com/ecs/) de AWS).
* Se quiser trabalhar com MongoDB, [MongoDB Atlas](https://www.mongodb.com/cloud/atlas)
é uma opção muito boa para hospedar a base dados de produção, que
podemos usar em conjunto com qualquer uma das opções mencionadas acima.
* Se quiser trabalhar com MySQL, [ClearDB](https://www.cleardb.com/) é uma
boa opção para hospedar a base de dados de produção, que podemos usar em
conjunto com qualquer uma das opções mencionadas acima.

Se tiver dúvidas sobre as diferentes (e múltiplas) opções de implantação,
não hesite em consultar seus colegas e mentores.

## 6. Pistas, tips e leituras complementares
## 7. Pistas, tips e leituras complementares

* [Express](https://expressjs.com/)
* [MongoDB](https://www.mongodb.com/)
* [PostgreSQL](https://www.postgresql.org/)
* [MySQL](https://www.mysql.com/)
* [MongoDB Node Driver](https://www.mongodb.com/docs/drivers/node/current/)
* [docker](https://docs.docker.com/)
* [docker compose](https://docs.docker.com/compose/)
* [Postman](https://www.getpostman.com)
* [Variável de ambiente - Wikipedia](https://pt.wikipedia.org/wiki/Variável_de_ambiente)
* [`process.env` - Node.js docs](https://nodejs.org/api/process.html#process_process_env)

***

## 7 HTTP API Checklist

### 7.1 `/`

* [ ] `GET /`

### 7.2 `/auth`

* [ ] `POST /auth`

### 7.3 `/users`

* [ ] `GET /users`
* [ ] `GET /users/:uid`
* [ ] `POST /users`
* [ ] `PATCH /users/:uid`
* [ ] `DELETE /users/:uid`

### 7.4 `/products`

* [ ] `GET /products`
* [ ] `GET /products/:productid`
* [ ] `POST /products`
* [ ] `PATCH /products/:productid`
* [ ] `DELETE /products/:productid`

### 7.5 `/orders`

* [ ] `GET /orders`
* [ ] `GET /orders/:orderId`
* [ ] `POST /orders`
* [ ] `PATCH /orders/:orderId`
* [ ] `DELETE /orders/:orderId`
2 changes: 1 addition & 1 deletion projects/04-burger-queen-api/config.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
exports.port = process.argv[2] || process.env.PORT || 8080;
exports.dbUrl = process.env.DB_URL || 'mongodb://localhost:27017/test';
exports.dbUrl = process.env.MONGO_URL || process.env.DB_URL || 'mongodb://127.0.0.1:27017/test';
exports.secret = process.env.JWT_SECRET || 'esta-es-la-api-burger-queen';
exports.adminEmail = process.env.ADMIN_EMAIL || 'admin@localhost';
exports.adminPassword = process.env.ADMIN_PASSWORD || 'changeme';
Loading

0 comments on commit e918faf

Please sign in to comment.