La prueba consiste en crear un API REST para un único recurso, la cual será consumida desde un cliente web. La generación de todos los archivos necesarios y el manejo de una óptima estructura de archivos debe ser realizado por el/la postulante. Genere un fork de este repositorio. Utilice versiones con soporte de Python, Django y React.
- Evaluar el pensamiento computacional y el enfoque empleado al resolver problemas.
- Evaluar el conocimiento general del lenguaje Python y de React.
- Evaluar el conocimiento en arquitecturas web (MVC, REST).
- Evaluar buenas prácticas en el código.
- Evaluar el conocimiento de buenas prácticas de seguridad.
- El API REST debe ser desarrollado con Django Rest Framework.
- El cliente web debe ser desarrollado con React + Typescript.
- El cliente web debe consumir el API REST.
- Se debe utilizar el ORM de Django para el modelo de la base de datos.
- Se debe crear un archivo
requirements.txtcon las dependencias necesarias para ejecutar el proyecto. - Se debe crear un archivo
README.mden el cual se explique el funcionamiento del proyecto, así como las instrucciones para ejecutarlo. - Se debe crear un archivo
.envque contenga las variables de entorno necesarias para la ejecución del proyecto.
Generar un API para administrar un albergue de animales rescatados (perros y gatos). Se debe poder llevar un control de los animales en albergue: nombre, edad, raza, tipo (perro o gato), estado (adoptado, en adopción, en espera de adopción, etc). Se debe poder llevar un control de los voluntarios que trabajan en el albergue: nombre, apellido, correo electrónico, contraseña, estado (activo, inactivo, etc). Se debe poder llevar un control de las personas que adoptan animales: nombre, apellido, correo electrónico, contraseña, estado (activo, inactivo, etc). Se debe poder llevar un control de las adopciones, es decir, el registro de cuándo y a quién se le entregó un animal: fecha, animal, voluntario, persona que adopta, estado (finalizado, en proceso, etc).
Nota: El endpoint debe permitir realizar las siguientes operaciones:
- Listar todos los animales en albergue. [GET]
- Listar todos los voluntarios. [GET]
- Listar todos los adoptantes. [GET]
- Listar todas las adopciones. [GET]
- Crear un animal en albergue. [POST]
- Crear un voluntario. [POST]
- Crear un adoptante. [POST]
- Crear una adopción. [POST]
- Obtener un animal en albergue. [GET by ID]
- Obtener una adopción. [GET by ID]
- Actualizar un animal en albergue. [POST/PATCH]
- Actualizar un voluntario. [POST/PATCH]
- Actualizar un adoptante. [POST/PATCH]
- Actualizar una adopción. [POST/PATCH]
- Eliminar un animal en albergue. [DELETE]
- Eliminar un voluntario. [DELETE]
- Eliminar un adoptante. [DELETE]
- Eliminar una adopción. [DELETE]
El modelo de la base de datos queda a elección del postulante; sin embargo, esta debe tener todo lo necesario para plasmar lo explicado en el requerimiento anterior.
Se desea validar que los requests cumplan las restricciones establecidas en el modelo de la base de datos. Los errores deben mostrarse al usuario en el response en caso de haberlos.
Se desea que el API sea restringido mediante algún método de autenticación. Queda a elección del postulante el approach de autenticación a seguir. El nivel de seguridad será evaluado.
Se desea que el usuario se autentifique mediante json web tokens, para ello se utilizará la librería Simple JWT para Django rest framework. (ACCESS + REFRESH TOKEN)
Debe utilizar React + Typescript junto al framework Mantine UI.
Debe contar con un solo registro para los voluntarios y adoptantes. Los administradores (superusers) solo pueden ser creados desde Django admin. Para terminos prácticos puede asumir que los roles son excluyentes.
Debe contar con un Login unificado para los voluntarios, adoptantes y administradores.
Los administradores pueden acceder al CRUD de los animales en albergue, de los voluntarios, de los adoptantes y de las adopciones.
Los adoptantes solo pueden visualizar los animales disponibles para adopción y solicitar la adopción de un animal.
Los voluntarios pueden visualizar los animales del albergue, los adoptantes y las adopciones. Además, pueden cambiar el estado de un animal en albergue a "adoptado" o "en adopción".
- Deployar el cliente web y servidor backend en la capa gratuita de algún servicio cloud.
- Realizar un esquema de testing para el backend, basado en probar los endpoints, y todo lo que ello implica.