Saltar a contenido

Proyecto registro de carros.#

Imagen de un carro

API Registro de Carros#

La API Registro de Carros es una API desarrollada en Python utilizando la tecnología FastAPI. Su objetivo es gestionar un inventario de carros sin necesidad de utilizar una base de datos externa, ya que la API cuenta con su propio almacenamiento interno donde se registran los carros agregados por los usuarios.

Archivo que conforman la API#

La API está organizada en tres archivos principales: models.py, schemas.py y routes.py. Cada uno de estos archivos tiene una función específica:

routes.py: Maneja la lógica principal de la API, definiendo las rutas y los métodos HTTP que se ejecutan al recibir una solicitud.

models.py: Define las tablas internas utilizadas para almacenar los carros, especificando los campos, tipos de datos (texto, numérico, etc.) y si estos permiten valores nulos o no.

schemas.py: Contiene las clases que definen la estructura de los JSON que la API espera recibir y enviar. Esto asegura que los datos intercambiados cumplan con un formato específico.

Registro de un carro#

cuando un usuario quiere registrar un carro, solo debe llenar los campo con los datos solicitados, que serian Marca, Modelo, Año y Color, despues de insertar los datos se preciona el boton de Registrar carro y listo.

Captura de pantalla de la seccion de registro de un nuevo carro

Mostrar lista de carros#

Si un usuario quiere revisar la lista de carros que tiene registrados, solo debe ir a la seccion de Carros registrados y dar clik en el boton.

Captura de pantalla de la seccion de mostrar carros

Eliminar carros#

Si un usuario por alguna razon quiere eliminar uno de los carros existentes de la lista solo se necesita el ID correspondiente al carro que se quiere eliminar, dicho ID se obtiene en la listra de carros registrados, al poner el id en el campo y dar clik al bopton se elimina de la base de datos.

Captura de pantalla de la seccion de mostrar carros

Eliminar carros#

Si un usuario desea solo modificar algun dato de un carro registrado tiene que llenar los campós con con la nueva informacion del carro pero empezando con la ID del carro.

Captura de pantalla de la seccion de mostrar carros

Routes#

Modulo de registro de carros.

actualizar_carro(id, marca, modelo, año, color, db) async #

Actualiza un carro existente por ID.

Este endpoint permite actualizar un carro registrado en el sistema, cambiando sus atributos como marca, modelo, año y color.

Parameters:

Name Type Description Default
id int

El ID del carro que se desea actualizar.

required
marca str

La nueva marca del carro.

required
modelo str

El nuevo modelo del carro.

required
año int

El nuevo año del carro.

required
color str

El nuevo color del carro.

required
db DbSession

La sesión de base de datos para realizar la operación.

required

Returns:

Name Type Description
CarroResponse CarroResponse

Respuesta con el estado de la operación y el inventario actualizado.

Raises:

Type Description
HTTPException

Si no se encuentra el carro con el ID proporcionado.

calcular_inventario(db) async #

Calcula el inventario total sumando las cantidades de todos los registros de carros en la base de datos.

eliminar_carro(id, db) async #

Elimina un carro por ID.

Este endpoint elimina un carro registrado en el sistema por su ID.

id (int): El ID del carro que se desea eliminar.

Name Type Description Default
db DbSession

La sesión de base de datos para realizar la operación.

required

Returns: dict: Un mensaje indicando que el carro fue eliminado exitosamente.

Raises: HTTPException: Si no se encuentra el carro con el ID proporcionado.

listar_carros(db) #

Recupera la lista de todos los registros de carros en Registro de Carros.

registrar_carro(tipo, request, db, inventario) async #

Crea un nuevo registro de carro (entrada o salida) en Registro de Carros.

Este endpoint maneja la creación de un nuevo registro de carro, ya sea para una entrada o una salida de carro del inventario. Si el tipo de registro es "salida" y la cantidad de carros a eliminar excede el inventario disponible, se rechazará la operación.

Parameters:

Name Type Description Default
tipo str

El tipo de operación, "entrada" para agregar un carro o "salida" para eliminar uno.

required
request CarroCreate

Datos del carro a registrar, incluyendo marca, modelo, año, y color.

required
db DbSession

La sesión de base de datos para realizar la operación.

required
inventario int

El inventario actual, obtenido a través de la dependencia calcular_inventario.

required

Returns:

Name Type Description
CarroResponse CarroResponse

Respuesta que incluye el estado de la operación y el inventario actualizado.

Raises:

Type Description
HTTPException

Si se intenta realizar una salida de carros cuando no hay suficientes en inventario.


Schemas#

Esquemas y enumeraciones para el registro de carros.

Carro #

Bases: CarroCreate

Esquema que representa un carro registrado en la base de datos.

id instance-attribute #

ID del carro registrado.

Config #

orm_mode = True class-attribute instance-attribute #

Configuración para habilitar la compatibilidad con ORMs.

CarroCreate #

Bases: BaseModel

Esquema para crear un nuevo registro de carro.

año instance-attribute #

Año del carro.

color instance-attribute #

Color del carro.

marca instance-attribute #

Marca del carro.

modelo instance-attribute #

Modelo del carro.

CarroResponse #

Bases: BaseModel

Representa la respuesta después de realizar un registro de carro.

Atributos

result (CarroResult): Resultado del registro (registrado, fallido o rechazado). previous_inventory (int | None): Inventario antes del registro (opcional). inventory (int | None): Inventario después del registro (opcional).

Ejemplos JSON
  • Entrada exitosa:

    {
        "result": "registrado",
        "previous_inventory": 5,
        "inventory": 6
    }
    

  • Salida exitosa:

    {
        "result": "registrado",
        "previous_inventory": 5,
        "inventory": 4
    }
    

  • Registro rechazado por falta de inventario:

    {
        "result": "rechazado",
        "previous_inventory": 5,
        "inventory": 5
    }
    

inventory instance-attribute #

Inventario después del registro (opcional).

model_config = {'json_schema_extra': {'examples': [{'result': 'registrado', 'previous_inventory': 5, 'inventory': 6}, {'result': 'registrado', 'previous_inventory': 5, 'inventory': 4}, {'result': 'rechazado', 'previous_inventory': 5, 'inventory': 5}]}} class-attribute instance-attribute #

Configuración adicional para mostrar ejemplos JSON en la documentación de la API.

previous_inventory instance-attribute #

Inventario antes del registro (opcional).

result instance-attribute #

El resultado del registro de carro (registrado, fallido o rechazado).

CarroResult #

Bases: StrEnum

Define los posibles resultados de un registro de carro.

Resultados
  • registrado: El registro fue exitoso.
  • fallido: El registro no pudo completarse.
  • rechazado: El registro fue rechazado (por ejemplo, falta de inventario).

CarroType #

Bases: StrEnum

Define el tipo de registro de carro.

Tipos disponibles
  • entrada: Registro de entrada de un carro al inventario.
  • salida: Registro de salida de un carro del inventario.

Models#

Modelos para la base de datos de Registro de Carros.

Car #

Bases: SQLModel

Modelo que representa un carro registrado en la base de datos.

Atributos

id (int | None): Identificador único del carro. Es la clave primaria. quantity (int): Cantidad de carros en el registro. Fijado a 1 por defecto. marca (str): Marca del carro. No puede ser nulo. modelo (str): Modelo del carro. No puede ser nulo. año (int): Año de fabricación del carro. No puede ser nulo. color (str): Color del carro. No puede ser nulo.

Configuración

tablename: Nombre de la tabla en la base de datos (registro_carro). model_config: Configuración adicional para la visualización del esquema JSON, incluyendo ejemplos de registros de carros.

año = Field(title='Año', nullable=False) class-attribute instance-attribute #

Año de fabricación del carro. No puede ser nulo.

color = Field(title='Color', nullable=False) class-attribute instance-attribute #

Color del carro. No puede ser nulo.

id = Field(default=None, primary_key=True) class-attribute instance-attribute #

Identificador único del carro. Clave primaria (opcional en la creación).

marca = Field(title='Marca', nullable=False) class-attribute instance-attribute #

Marca del carro. No puede ser nulo.

modelo = Field(title='Modelo', nullable=False) class-attribute instance-attribute #

Modelo del carro. No puede ser nulo.

quantity = Field(title='Cantidad', default=1, nullable=False) class-attribute instance-attribute #

Cantidad de carros en el registro. Fijado a 1 por defecto.