From 27c1b13c58191dfda258fad43f9ebef02f68343f Mon Sep 17 00:00:00 2001 From: Backend IM Bot Date: Mon, 14 Apr 2025 21:18:18 +0000 Subject: [PATCH] feat: Generated endpoint endpoints/cars.post.py via AI for Car --- .../20250414_211801_ecc1252f_update_car.py | 32 ++++++++++++++ endpoints/cars.post.py | 16 +++++++ helpers/car_helpers.py | 42 +++++++++++++++++++ models/car.py | 13 ++++++ schemas/car.py | 21 ++++++++++ 5 files changed, 124 insertions(+) create mode 100644 alembic/versions/20250414_211801_ecc1252f_update_car.py create mode 100644 helpers/car_helpers.py create mode 100644 models/car.py create mode 100644 schemas/car.py diff --git a/alembic/versions/20250414_211801_ecc1252f_update_car.py b/alembic/versions/20250414_211801_ecc1252f_update_car.py new file mode 100644 index 0000000..d68f564 --- /dev/null +++ b/alembic/versions/20250414_211801_ecc1252f_update_car.py @@ -0,0 +1,32 @@ +"""create table for cars + +Revision ID: 2f6a3c5d1e88 +Revises: 6ab3ef7c9fbc +Create Date: 2023-05-25 11:21:43.628525 + +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.sql import func +import uuid + +# revision identifiers, used by Alembic. +revision = '2f6a3c5d1e88' +down_revision = '6ab3ef7c9fbc' +branch_labels = None +depends_on = None + + +def upgrade(): + op.create_table( + 'cars', + sa.Column('id', sa.String(36), primary_key=True, default=lambda: str(uuid.uuid4())), + sa.Column('name', sa.String(), nullable=False, unique=True), + sa.Column('created_at', sa.DateTime(), server_default=func.now()), + sa.Column('updated_at', sa.DateTime(), server_default=func.now(), onupdate=func.now()), + sa.Index('ix_cars_name', 'name', unique=True) + ) + + +def downgrade(): + op.drop_table('cars') \ No newline at end of file diff --git a/endpoints/cars.post.py b/endpoints/cars.post.py index e69de29..f7bbf4a 100644 --- a/endpoints/cars.post.py +++ b/endpoints/cars.post.py @@ -0,0 +1,16 @@ +from fastapi import APIRouter, status +from schemas.car import CarCreate, CarSchema +from helpers.car_helpers import create_car +from sqlalchemy.orm import Session +from fastapi import Depends +from core.database import get_db + +router = APIRouter() + +@router.post("/cars", status_code=status.HTTP_201_CREATED, response_model=CarSchema) +async def create_new_car( + car_data: CarCreate, + db: Session = Depends(get_db) +): + new_car = create_car(db=db, car_data=car_data) + return new_car \ No newline at end of file diff --git a/helpers/car_helpers.py b/helpers/car_helpers.py new file mode 100644 index 0000000..82bea6c --- /dev/null +++ b/helpers/car_helpers.py @@ -0,0 +1,42 @@ +from typing import Optional +from sqlalchemy.orm import Session +from sqlalchemy import exc +from models.car import Car +from schemas.car import CarCreate, CarSchema + +def create_car(db: Session, car_data: CarCreate) -> Car: + """ + Creates a new car in the database. + + Args: + db (Session): The database session. + car_data (CarCreate): The data for the car to create. + + Returns: + Car: The newly created car object. + """ + try: + db_car = Car(**car_data.dict()) + db.add(db_car) + db.commit() + db.refresh(db_car) + return db_car + except exc.IntegrityError: + db.rollback() + raise ValueError("Car name already exists") + +def get_car_by_name(db: Session, name: str) -> Optional[CarSchema]: + """ + Retrieves a car by its name. + + Args: + db (Session): The database session. + name (str): The name of the car to retrieve. + + Returns: + Optional[CarSchema]: The car schema object if found, otherwise None. + """ + car = db.query(Car).filter(Car.name == name).first() + if car: + return CarSchema.from_orm(car) + return None \ No newline at end of file diff --git a/models/car.py b/models/car.py new file mode 100644 index 0000000..a6970ac --- /dev/null +++ b/models/car.py @@ -0,0 +1,13 @@ +from sqlalchemy import Column, String +from sqlalchemy.dialects.postgresql import UUID +from sqlalchemy.sql import func +from core.database import Base +import uuid + +class Car(Base): + __tablename__ = "cars" + + id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) + name = Column(String, nullable=False, unique=True, index=True) + created_at = Column(func.now()) + updated_at = Column(func.now(), onupdate=func.now()) \ No newline at end of file diff --git a/schemas/car.py b/schemas/car.py new file mode 100644 index 0000000..e6e5a4f --- /dev/null +++ b/schemas/car.py @@ -0,0 +1,21 @@ +from pydantic import BaseModel, Field +from typing import Optional +from datetime import datetime +import uuid + +class CarBase(BaseModel): + name: str = Field(..., description="Name of the car") + +class CarCreate(CarBase): + pass + +class CarUpdate(CarBase): + name: Optional[str] = Field(None, description="Name of the car") + +class CarSchema(CarBase): + id: uuid.UUID + created_at: datetime + updated_at: datetime + + class Config: + orm_mode = True \ No newline at end of file