Proyecto creado para la materia de web-devepment de la Universidad de Palermo
Este proyecto fue creado con Turborepo (monorepo) para administrar servicios de API, web-app y mongoDB en conjunto.
web
: a Next.js appapi
: an Express servereslint-config-custom
:eslint
configuraciones para el cliente (incluyeeslint-config-next
yeslint-config-prettier
)eslint-config-custom-server
:eslint
configuraciones para el servidor (incluyeeslint-config-next
yeslint-config-prettier
)scripts
: configuraciones de Jestlogger
: Logger isomorfico (solo para abstraer, es un wrapper de console.log)tsconfig
: tsconfig.json;s usados para el monorepo Cada package/app es 100% TypeScript.
El repo esta creado para usarse principalmente con Docker y de esta forma con el uso de un solo comando levantar todos los servicios.
# Crear una network que nos habilite a comunicarnos entre contenedores
docker network create app_network
docker network create express-mongo
# Build prod usando el BuildKit engine
COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose -f docker-compose.yml build
# Iniciar prod en detached mode
docker-compose -f docker-compose.yml up -d
Abri http://localhost:3000 para visualizar la web-app.
Para parar todos los containers:
# Parar todos los contenedores que estan corriendo
docker kill $(docker ps -q) && docker rm $(docker ps -a -q)
Solo debes ejecutar los siguientes tres comandos y ya tendras todo corriendo sin necesidad de continuar con la guia. Caso contrario, salta este paso y ve a la seccion de instalar packages y sigue la guia.
docker network create app_network
docker network create express-mongo
docker-compose -f docker-compose.yml up -d
npm install
Dentro de apps/api/src/config/index.ts
encontraras las variables requeridas a setear para que la API funcione correctamente. La mas importante, si no estas usando Docker, es colocar tu connection string de MongoDB como MONGO_DB_CONNECTION_STRING
.
npm run dev
API: localhost:3001
WEB: localhost:3000
Si utilizas Postman podras importar la collection desde ./postman-collection.json
.
Endpoints necesarios para la creacion de usuario y la autenticacion para utilizar endpoints protegidos.
# Create User
# Para crear el usuario y configurar el pin a utilizar si es tu primera vez
POST: /user
{
"name": "Lucas",
"pin": "1234"
}
# Authenticate User
# Una vez hayas creado el usuario deberas autenticarte con tu pin lo que devolvera un token que deberas utilizar en las rutas protegidas pasandolo dentro del header Authorization
POST: /user/authenticate
{
"pin": "1234"
}
# Get User Info
# Obtendras toda la info necesaria del usuario junto con todos sus caracteres e items de cada uno
GET: /user
Headers: Authorization
Endpoints protegidos, recuerda pasar el token dentro del header Authorization
, para la seleccion de personaje y seleccion de items de cada uno.
# Get Characters
#
GET: /characters
Headers: Authorization
# Select Character
# Endpoint para seleccionar character pasando el id del mismo que es obtenido a traves del endpoint de "Get Selectable Characters"
POST: /characters
Headers: Authorization
{
"id": "1"
}
# Edit Character
# Endpoint para seleccionar los items que va a vestir. Este recibe un listado de id de items que reemplazaran a los que ya estaban previamente seleccionados. Estos items se obtienen desde el endpoint "Get Selectable Items"
PATCH: /characters
Headers: Authorization
{
"items": ["upper-body-1", "lower-body-1", "boots-1"]
}
Endpoints no protegidos necesarios para seleccionar caracteres y vestir con items.
# Get Selectable Items
# Endpoint para obtener items posibles de vestir, type disponibles "upper_body", "lower_body", "boots". Solo es posible vestir uno de cada uno. El query parameter es opcional.
GET: /options/items?type=boots
# Get Selectable Characters
# Endpoint para obtener los personajes que pueden ser seleccionados
GET: /options/characters
Datos necesarios para probar la API
- upper-body-1
- upper-body-2
- lower-body-1
- lower-body-2
- boots-1
- boots-2
- 1
- 2
- 3
- 4
- 5