Skip to content

Fifth <Laboratoria> project of the DEV013 cohort. Fleet-management-api-Python started on April 10th, 2024 and ended on May 22nd, 2024

Notifications You must be signed in to change notification settings

Wendy-Alejandra/DEV013-fleet-management-api

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fleet Management Software API

Índice


1. Preámbulo

De acuerdo con Wikipedia, la internet de las cosas (IoT, por sus siglas en inglés)​ es un concepto que se refiere a una interconexión digital de objetos cotidianos con internet. Constituye un cambio radical en la calidad de vida de las personas en la sociedad, ofreciendo nuevas oportunidades en el acceso a datos, educación, seguridad, asistencia sanitaria y en el transporte, entre otros campos. Por ejemplo, en logística y manejo de flotas, se puede hacer seguimiento en todo momento de la ubicación y las condiciones de vehículos mediante sensores inalámbricos conectados a internet que envían alertas en caso de eventualidades (demoras, daños, robos, etc.).

zach-vessels-utMdPdGDc8M-unsplash

La IoT también plantea retos como el almacenamiento, análisis y visualización de la gran cantidad de información que genera. Se calcula que para el 2025 los dispositivos IoT generen 79.4 zettabytes (1 zettabyte equivale a 1 trillón de gigabytes). Como desarrolladoras debemos estar al tanto de estos retos y contribuir para su solución desde nuestra experiencia, conocimiento y ganas de aprender.

2. Resumen del proyecto

En este proyecto construirás la API REST de un Fleet Management Software para consultar las ubicaciones de los vehículos de una empresa de taxis en Beijing, China.

Te entregaremos las ubicaciones de casi 10 mil taxis. Esperamos que como desarrolladora explores nuevas alternativas y técnicas para almacenar y consultar esta información y puedas garantizar la mejor experiencia de usuaria en tu API REST.

3. Objetivos de aprendizaje

Reflexiona y luego marca los objetivos que has llegado a entender y aplicar en tu proyecto. Piensa en eso al decidir tu estrategia de trabajo.

Java

  • Modificadores de acesso (public, private, protected)

  • Variables

  • Uso de condicionales

  • Uso de bucles (Loops)

Tipos de data

  • Primitivos

  • Datos primitivos vs no primitivos

  • Cadenas

  • Arreglos

Colecciones

  • ArrayList

  • HashMap

  • HashSet

Testing

  • JUnit

  • Mockito

Spring Framework

  • Entidad

  • Repositorio

Conceptos Core (Spring Framework)
  • Beans

  • Inversión de Control

  • Anotaciones

Spring Web (Spring Framework)
  • RestController

  • RequestMapping

  • RequestParam

Testing (Spring Framework)
  • Spring Test

  • Hamcrest

Hibernate ORM

  • Configuración

  • Esquema

  • Entidad

  • Tabla

  • Columna

  • Identificadores

  • Asociaciones

  • Colecciones

  • Persistencia

  • Consultas

Python

Tipos de datos

Funciones

Iteración

Testing en Python

Modularización

Manejo de dependencias

Flask

Rutas (Flask)

Request Object (Flask)

Response Object (Flask)

Testing en Flask (Flask)

Django

Configuración (Django)

Modelos (Django)

Rest Framework (Django)

Programación Orientada a Objetos (OOP)

  • Clases

  • Objetos

  • Métodos

  • Atributos

  • Constructores

  • Encapsulamiento

  • Abstracción

  • Composición

  • Interfaces

  • Herencia (super, extends, override)

  • Lenguaje de Modelado Unificado (UML, class diagrams)

Node.js

SQL

Bases de datos

  • Modelado de datos

  • Conexión

  • Índices y limitaciones

PostgreSQL

4. Consideraciones generales

  • Este proyecto se debe "resolver" en duplas.
  • El rango de tiempo estimado para completar el proyecto es de 4 a 6 Sprints.

5. Criterios de aceptación del proyecto

Nuestra cliente ha instalado dispositivos GPS en sus taxis. Estos dispositivos utilizan señales satelitales para determinar con precisión las coordenadas geográficas del taxi.

Nuestra clienta requiere:

  1. Cargar la información de archivos SQL a una base de datos Postgresql.
  2. Desarrollar una API REST que permita consultar, mediante peticiones HTTP, la información almancenada en la base de datos.

Definición del producto

El Product Owner nos presenta este backlog que es el resultado de su trabajo con la clienta hasta hoy.


[Historia de usuario 1] Cargar información a base de datos

Yo, como desarrolladora, quiero cargar la información almacenada hasta ahora en archivos sql en una base de datos PostgreSQL, para facilitar su consulta y análisis.

Criterios de aceptación
  • Se debe tener en cuenta el siguiente diagrama para la implementación de las relaciones entre las tablas

mer

  • La tabla de trajectories se debe crear con el "id" que se incremente automáticamente (SERIAL) para poder insertar los valores sin necesidad de especificar un identificador
Definición de terminado
  • La base de datos tiene creada la tabla de taxis
  • La tabla de taxis tiene cargada la data de taxis
  • La base de datos tiene creada la tabla de trayectorias
  • La tabla de taxis tiene cargada la data de trayectorias

[Historia de usuario 2] Endpoint listado de taxis

Yo como clienta de la API REST requiero un endpoint para listar todos los taxis.

Criterios de aceptación
  • El endpoint responde para cada taxi: id y placa.
  • El endpoint paginamos los resultados para asegurar que las respuestas sean más fáciles de manejar.
Definición de terminado
  • Se cuenta con una documentación en Swagger para el endpoint desarrollado especificando método HTTP, url, parámetros, encabezados, códigos HTTP de respuesta y cuerpo.
  • El código del endpoint debe recibir code review de al menos una compañera.
  • El código endpoint debe estar cargado en un repositorio de Github.
  • El código endpoint debe contar con test unitarios y e2e.

[Historia de usuario 3] Endpoint historial de ubicaciones

Yo como clienta de la API REST requiero un endpoint para consultar todas las ubicaciones de un taxi dado el id y una fecha.

Criterios de aceptación
  • El endpoint responde con el id del taxi y una fecha mostrando la siguiente información: latitud, longitud y timestamp (fecha y hora).
  • El endpoint paginamos los resultados para asegurar que las respuestas sean más fáciles de manejar.
Definición de terminado
  • Se cuenta con una documentación en Swagger para el endpoint desarrollado especificando método HTTP, url, parámetros, encabezados, códigos HTTP de respuesta y cuerpo.
  • El código del endpoint debe recibir code review de al menos una compañera.
  • El código endpoint debe estar cargado en un repositorio de Github.
  • El código endpoint debe contar con test unitarios y e2e.

[Historia de usuario 4] Endpoint última ubicación

Yo como clienta de la API REST requiero un endpoint para consultar la última ubicación reportada por cada taxi.

Criterios de aceptación
  • El endpoint responde para cada taxi la siguiente información: id, placa, latitud, longitud y timestamp (fecha y hora).
  • El endpoint paginamos los resultados para asegurar que las respuestas sean más fáciles de manejar.
Definición de terminado
  • Se cuenta con una documentación en Swagger para el endpoint desarrollado especificando método HTTP, url, parámetros, encabezados, códigos HTTP de respuesta y cuerpo.
  • El código del endpoint debe recibir code review de al menos una compañera.
  • El código endpoint debe estar cargado en un repositorio de Github.
  • El código endpoint debe contar con test unitarios y e2e.

6. Stack de tecnologías

Puedes implementar este proyecto en JavaScript, Python o Java.

7. Pistas, tips y lecturas complementarias

Modelamiento de datos

La base de datos recomendada para tu aplicación es PostgreSQL. Te recomendamos usar vercel Postgresql para que no tengas que instalar PostgreSQL en tu computadora.

Una vez tengas acceso a una instancia de PostgreSQL, deberás crear tablas en tu base de datos para almacenar la información entregada. Te recomendamos entonces crear dos tablas, una para almacenar la información de taxis y otra para almacenar la información de ubicaciones. Deberás definir las columnas de cada tabla de acuerdo a la información entregada.

Puedes crear una tabla en PostgreSQL usando SQL.

Definir endpoints de API

Deberás definir y documentar los endpoints de tu API. Debes usar Swagger para esto.

Para una API REST debes definir para cada endpoint entre otras cosas el método HTTP, url, parámetros, encabezados, códigos HTTP de respuesta y cuerpo.

Por ejemplo, en la siguiente figura se define un endpoint para consultar la información de los taxis en la aplicación. El método del endpoint es GET, la url es /taxis. Recibe un parámetro query, retorna la información con código HTTP 200 en formato json gracias al header Content-type con valor application/json.

Ejemplo Endpoint API Rest

8. Funcionalidades opcionales

Si completaste todas las funcionalidades del proyecto te invitamos a trabajar en las funcionalides opcionales