Proyecto registro de carros.#
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.
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.
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.
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.
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 |
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.
CarroCreate
#
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.