Aplicación de prueba implementada con TypeScript, que sigue las pautas de Domain Driven Design y que fue diseñada usando como base la Arquitectura Hexagonal. La infraestructura de la aplicación cuenta de dos partes: los controladores
que fueron desarrollados con ExpressJS y los repositorios
que implementan MongoDB. Para el desarrollo de pruebas el proyecto cuenta con la configuración de Jest.
Para respetar las buenas prácticas el proyecto cuenta con una configuración de ESLint y de Prettier, con reglas bases de código y la guía de estilos de TypeScript recomendada. Ambos procesos se están ejecutando, en conjunto con los tests
, en un sistema de Integración Continua (CI) y Despliegue Continuo (CD), que fue configurado usando GitHub Actions con Railway App. El CI y CD están escuchando los eventos de Push y Pull Request en la rama Main
.
En la raíz del proyecto ejecutar el comando:
npm install
Cree un archivo llamado .env
en donde deberá agregar las variables de entorno establecidas en el archivo .env.example
.
NODE_ENV
: permite configurar el ambiente en el que correra la aplicación. Valores posibles:production
,development
.PORT
: permite configurar el puerto en el que correra la aplicación. Este valor es opcional, sino lo configura la app correra en el puerto 8900.MONGO_URL
: la conexión del servidor de mongo en el que va a correr. Este valor debe ser una SRV address, ya que debe incluir usuario y password.MONGO_DATABASE_NAME
: es el nombre de la base de datos a la que desea conectarse. Este valor es opcional, sino lo agrega por defecto serácreditsDb
.SENTRY_DSN
: es el DSN de sentry para el tracking de errores. Este valor es opcional, sino se agrega se descartará la configuración de SENTRY para tracking de errores.
Para ejecutar el proyecto en desarrollo ejecute el comando:
npm run dev
Para compilar la aplicación ejecute el comando:
npm run build
NOTA: Esto ejecutará el proceso de ESLint y los tests.
Para ejecutar el compilado de la carpeta /dist
ejecute el comando npm run start
Cuendo la aplicación está corriendo, expone una URL en el path http://localhost:<YOUR PORT>/docs
. Ahí se encuentra la especificación de la API, desarrollada con Swagger UI, desde donde puedes consultar los diferentes endpoints disponibles.
Utilice el endpoint /health-check
para verificar que la API este ejecutándose correctamente 😎.
- GET
/customer
: permite obtener todos losCustomers
. Este endpoint puede recibir un parametro de querycustomerToShow
. Los valores permitidos para el parámetro son:0 = all
: Esta el valor por defecto y retorna todos losCustomers
.1 = onlyWithCredit
: Este valor permite seleccionar todos losCustomers
que tengan crédito habilitado.2 = onlyWithoutCredit
: Este valor permite seleccionar todos losCustomers
que no tengan crédito habilitado.
La respuesta de este endpoint será lo siguiente:
{
message? string
error? string
data Array<Customer> [{
id UUID
dni string
names string
lastnames string
ageDate string
email string
phone string
income number
creditEnabled boolean
}]
}
- GET
/customer/{id}
: permite obtener unCustomer
filtrado por el parámetro{id}
. El tipo del parámetro{id}
debe ser de tipo UIID v4.
La respuesta de este endpoint será lo siguiente:
{
message? string
error? string
data Customer {
id UUID
dni string
names string
lastnames string
ageDate string
email string
phone string
icome number
creditEnabled boolean
}
}
- POST
/customer
: permite crear unCustomer
. Es requerido enviar por body los siguientes parámetros:
{
id UUID
dni string
names string
lastnames string
ageDate string
email string
phone string
income number
}
- PUT
/customer/{id}
: permite actualizar unCustomer
. Es requerido enviar por body los siguientes parámetros:
{
id UUID
dni string
names string
lastnames string
ageDate string
email string
phone string
income number
}
- DELETE
/customer/{id}
: permite eliminar unCustomer
filtrado por{id}
.
-
GET
/credit
: permite obtener todos losCredits
filtrados por un rango de fechas. Este endpoint recibe dos parámetros de fechas con formato yyyy-MM-dd:start
recibe un string con la fecha de inicio. Por ejemplo: 2022-09-25.end
recibe un string con la fecha final del filtro. Por ejemplo: 2022-09-25.
La respuesta de este endpoint será lo siguiente:
{
message? string
error? string
data Array<Credit> [{
id UUID
date string
customerId UUID
amount number
}]
}
- GET
/credit/{id}
: permite obtener unCredit
filtrado por el parámetro{id}
. El tipo del parámetro{id}
debe ser de tipo UIID v4.
La respuesta de este endpoint será lo siguiente:
{
message? string
error? string
data Array<Credit> [{
id UUID
date string
customerId UUID
amount number
}]
}
- GET
/credit/customer/{id}
: permite obtener un arreglo deCredit
filtrado por el{id}
de un cliente. El tipo del parámetro{id}
debe ser de tipo UIID v4.
La respuesta de este endpoint será lo siguiente:
{
message? string
error? string
data Array<Credit> [{
id UUID
date string
customerId UUID
amount number
}]
}
- POST
/credit
: permite crear unCredit
asociado a un customer. Es requerido enviar por body los siguientes parámetros:
{
id UUID
date string
customerId UUID
amount number
}
- PUT
/credit/{id}
: permite actualizar el monto de unCredit
asociado a un customer usando su{id}
. Es requerido enviar por body los siguientes parámetros:
{
amount number
}
- DELETE
/credit/{id}
: permite eliminar unCredit
filtrado por{id}
.
La aplicación actualmente está configurada para utilizar SENTRY como plataforma Cloud para tracking de errores. Para poder utilizarlo solo configure la variable de entorno SENTRY_DSN
y empezará a recibir notificaciones de errores de su aplicación.
Puede consultar una demo de la aplicación ejecutándose en la siguiente URL:
https://credits-app-production.up.railway.app/docs/
No olvide seleccionar el Scheme HTTPS 😅
NOTA: Actualmente los servidores han sido apagados 😵, en caso de querer probar la demo escribir un mensaje a Soymichel Dev