Skip to content
This repository was archived by the owner on Jul 6, 2026. It is now read-only.

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Kambista Backend Developer Challenge

馃憢 隆Hola!

Somos Kambista y estamos buscando un nuevo miembro para nuestro equipo de tecnolog铆a.

Para esta etapa hemos preparado un reto t茅cnico enfocado en desarrollo backend. El objetivo es evaluar tu capacidad para dise帽ar APIs, procesar informaci贸n, validar datos y escribir c贸digo mantenible.

Objetivo

Construir un servicio backend simplificado para procesar operaciones de cambio de divisas.

Tecnolog铆as

Requeridas

  • Node.js
  • TypeScript
  • NestJS o Express

Deseables

  • MongoDB
  • Jest
  • Swagger/OpenAPI

Puedes utilizar librer铆as adicionales si consideras que aportan valor a la soluci贸n.


Caso

Kambista necesita registrar operaciones de cambio de USD a PEN.

Cada operaci贸n representa una solicitud de cambio realizada por un cliente.


Requerimientos

1. Registrar una transacci贸n

Crear el siguiente endpoint:

POST /transactions

Request

{
  "customerId": "123",
  "amountUsd": 100
}

Comportamiento esperado

  1. Validar la informaci贸n recibida.
  2. Obtener un tipo de cambio fijo de 3.75.
  3. Calcular el monto equivalente en PEN.
  4. Registrar la operaci贸n.
  5. Retornar la informaci贸n generada.

Response

{
  "transactionId": "uuid",
  "exchangeRate": 3.75,
  "amountUsd": 100,
  "amountPen": 375,
  "status": "COMPLETED"
}

2. Consultar una transacci贸n

Crear el endpoint:

GET /transactions/:id

Response

{
  "transactionId": "uuid",
  "customerId": "123",
  "exchangeRate": 3.75,
  "amountUsd": 100,
  "amountPen": 375,
  "status": "COMPLETED"
}

3. Procesamiento masivo mediante CSV

Crear el endpoint:

POST /transactions/upload

El endpoint debe aceptar un archivo CSV.

Ejemplo

customerId,amountUsd
123,100
456,250
789,50

Comportamiento esperado

Por cada fila:

  1. Validar la informaci贸n.
  2. Procesar la transacci贸n.
  3. Registrar el resultado.

Response sugerida

{   "processed": 3,   "failed": 0 } 

Validaciones

customerId

  • Obligatorio.

amountUsd

  • Obligatorio.
  • Debe ser num茅rico.
  • Debe ser mayor a cero.

Ejemplo de error

{
  "success": false,
  "error": {
    "code": "INVALID_AMOUNT",
    "message": "Amount must be greater than zero"
  }
}

Persistencia

Las transacciones deben almacenarse para poder ser consultadas posteriormente.

Puedes elegir la estrategia de persistencia que consideres adecuada.


Testing

Implementar al menos:

  • 1 prueba unitaria.
  • 1 prueba de integraci贸n o e2e.

README

Incluir en la documentaci贸n:

  • Instrucciones de instalaci贸n.
  • Instrucciones de ejecuci贸n.
  • Decisiones t茅cnicas relevantes.
  • Supuestos realizados durante el desarrollo.

Criterios de evaluaci贸n

Evaluaremos principalmente:

  • Calidad de c贸digo.
  • Organizaci贸n del proyecto.
  • Manejo de errores.
  • Validaciones.
  • Testing.
  • Legibilidad.
  • Buenas pr谩cticas.
  • Mantenibilidad.

Bonus (Opcional)

  • Swagger/OpenAPI.
  • Logging.
  • Docker.
  • Cobertura adicional de pruebas.

Entrega

  1. Crear un fork del repositorio.
  2. Crear una rama con el siguiente formato:
git checkout -b nombre-apellido
  1. Implementar la soluci贸n.
  2. Crear un Pull Request con los cambios realizados.
  3. Compartir el enlace del Pull Request para su revisi贸n.

Tiempo estimado

Entre 4 y 6 horas.

No es necesario implementar funcionalidades adicionales fuera de los requerimientos indicados.

隆Muchos 茅xitos! 馃殌

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors