Se requiere implementar un proyecto serverless de registro de pagos y consulta de transacciones. A continuación se muestran los diagramas correspondientes:
Este API debe de llamar a un Step Function el cual debe:
- Validar el id de usuario comparándolo en la tabla users
- En caso el usuario exista, un lambda llamado execute-payments debe llamar a un API Mock que el postulante debe crear, el cual debe de regresar una transacción exitosa
- Si la transacción es exitosa, debe de grabarse un registro en la tabla transactions
- Al terminar todo de forma exitosa, debe dar una respuesta satisfactoria que contenga el id de la transacción
Nota: En el momento que se interactúa con la tabla transactions, un stream de DynamoDB debe activar el lambda register-activity, el cual debe de guardar un registro del suceso en la tabla activity
Este API debe de llamar a un Lambda Function la cual debe:
- Consultar por el id de transacción desde el lambda get-transaction en la tabla transactions
- En caso la transacción exista, debe de regresar el registro de la transacción
- En caso la transacción no exista, debe de regresar una respuesta con el mensaje "Usuario no encontrado"
Obligatorio :
- Respetar el arquetipo
- Construir pruebas unitarias
- Buenas Prácticas (SOLID, Clean Code, etc)
Deseable:
- Crear los componentes con IaC (Terraform, Cloudformation)
- Logs usando CloudWatch
- Formatters / Linters
Payload
{
"userId": "f529177d-0521-414e-acd9-6ac840549e97",
"amount": 30
}Respusta OK (201)
{
"message": "Payment registered successfully",
"transactionId": "8db0a6fc-ad42-4974-ac1f-36bb90730afe"
}Respuesta errada (400)
{
"message": "Something was wrong"
}Query params
transactionId: "8db0a6fc-ad42-4974-ac1f-36bb90730afe"
Respusta OK (200)
{
"transactionId": "8db0a6fc-ad42-4974-ac1f-36bb90730afe",
"userId": "f529177d-0521-414e-acd9-6ac840549e97",
"paymentAmount": 30
}Respuesta errada (404)
{
"message": "Transaction not found"
}La tabla users debe de contener datos de los usuarios que pueden realizar una transacción.
- Esquema:
- userId (string - partition key)
- name (string)
- lastName (string)
La tabla debe de tener el siguiente contenido:
| userId | name | lastName |
|---|---|---|
| f529177d-0521-414e-acd9-6ac840549e97 | Pedro | Suarez |
| 15f1c60a-2833-49b7-8660-065b58be2f89 | Andrea | Vargas |
- Esquema:
- transactionId (partition key)
- userId
- amount
- Esquema:
- activityId (partition key)
- transactionId
- date
Cuando termines el reto, luego de forkear el repositorio, debes crear un pull request to our repository indicando en la descripción de este tu nombre y correo.