Prueba tecnica.
El proyecto usa:
- Django.
- Django Rest Framework.
- Postgresql.
- Docker.
- Docker Compose.
El proyecto está conformado por la aplicación core
, la cual contiene los componentes principales del proyecto: modelos, serializadores, vistas, etc.
El proyecto usa docker y docker-compose para el despliegue local. Las variables de entorno se deben registrar en un archivo .env
.
Se ha creado un archivo Makefile
para automatizar tareas del proyecto.
-
make init
: Inicializa el proyecto, construye imágenesdocker
, corre migraciones y carga fixtures a la base de datos. -
make serve
: Despliega los servicios del proyecto haciendo uso dedocker-compose
. -
make bash
: Accedemos al contenedor donde se encuentra el código del proyecto. -
make test
: Corre las pruebas del proyecto. Cada requerimiento tiene un test. -
make lint
: Usa pylint para la revisión de código. -
make coverage
: Usa coverage para revisar cuanto código está cubierto por las pruebas. -
make destroy
: Destruye contenedores creados. -
make migrate
: Crea y aplica los cambios de las migraciones del proyecto.
Cada endpoint puede hacer uso de un filtro query
para obtener solo aquellos campos requeridos, ejemplo: http://localhost:8000/drivers/?query={id,name}
-
http://localhost:8000/drivers/
- Obtiene una colección de conductores.
-
http://localhost:8000/drivers/{id}/
- Obtiene un recurso conductor.
-
http://localhost:8000/drivers/?status='A'
- Obtiene una colección de conductores filtrados por estado, retornando solo aquellos que tienen estado AVAILABLE(A)
-
http://localhost:8000/drivers/?lat={lat}&lon={lon}&distance=3
- Obtiene una colección de conductores retornando solo aquellos que se encuentran a una distancia de 3km dado una punto específico (latitud, longitud).
-
http://localhost:8000/passengers/
- Obtiene una colección de pasajeros.
-
http://localhost:8000/passengers/{id}/
- Obtiene un recurso pasajero.
-
http://localhost:8000/passengers/{id}/closest_driver/
- Obtiene una colección de conductores ubicados a 3km o menos de la posición del pasajero.
-
http://localhost:8000/trips/
- Obtiene una colección de viajes.
-
http://localhost:8000/trips/
- Crea un nuevo recurso de viaje.
- Calcula la distancia y costo del viaje dado punto de destino y punto de partida.
- Actualiza estado de conductor a UNAVAILABLE(U).
// Body example.
{
"source_lat": -6.862689,
"source_lon": -79.818674,
"destination_lat": -6.862689,
"destination_lon": -79.818674,
"passenger": "c249c96c-e3c1-46d4-a28a-7344366678cb",
"driver": "33a304a5-9e62-4eff-8cb9-9ed349a617a4"
}
-
http://localhost:8000/trips/{id}/
- Obtiene un recurso viaje.
-
http://localhost:8000/trips/{id}/ending/
- Finaliza viaje, cambia su estado a END(E).
- Actualiza estado de conductor a AVAILABLE(A).
- Actualiza ubicación (latitud, longitud) de conductor.
- Actualiza ubicación (latitud, longitud) de pasajero.
- Crea una boleta.
-
http://localhost:8000/trips/?status='A'
- Obtiene una colección de viajes filtrados por estado, retornando solo aquellos que tienen estado AVAILABLE(A).