Add helper functions for Dog
This commit is contained in:
parent
4e2a072069
commit
13c4d9317d
116
helpers/dog_helpers.py
Normal file
116
helpers/dog_helpers.py
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
from typing import List, Optional
|
||||||
|
from pydantic import BaseModel, validator
|
||||||
|
from sqlalchemy.orm import Session
|
||||||
|
from models import Dog, User
|
||||||
|
|
||||||
|
class DogCreate(BaseModel):
|
||||||
|
name: str
|
||||||
|
breed: str
|
||||||
|
age: int
|
||||||
|
owner_id: str
|
||||||
|
|
||||||
|
@validator('name')
|
||||||
|
def validate_name(cls, name):
|
||||||
|
if not name.isalpha():
|
||||||
|
raise ValueError('Name should only contain alphabetic characters')
|
||||||
|
return name
|
||||||
|
|
||||||
|
@validator('breed')
|
||||||
|
def validate_breed(cls, breed):
|
||||||
|
if not breed.isalpha():
|
||||||
|
raise ValueError('Breed should only contain alphabetic characters')
|
||||||
|
return breed
|
||||||
|
|
||||||
|
@validator('age')
|
||||||
|
def validate_age(cls, age):
|
||||||
|
if age < 0:
|
||||||
|
raise ValueError('Age cannot be negative')
|
||||||
|
return age
|
||||||
|
|
||||||
|
def get_dogs(db: Session, owner_id: Optional[str] = None) -> List[Dog]:
|
||||||
|
"""
|
||||||
|
Get a list of dogs from the database.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
db (Session): SQLAlchemy database session
|
||||||
|
owner_id (str, optional): Filter dogs by owner ID
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
List[Dog]: List of Dog objects
|
||||||
|
"""
|
||||||
|
query = db.query(Dog)
|
||||||
|
if owner_id:
|
||||||
|
query = query.filter(Dog.owner_id == owner_id)
|
||||||
|
return query.all()
|
||||||
|
|
||||||
|
def create_dog(db: Session, dog_data: DogCreate) -> Dog:
|
||||||
|
"""
|
||||||
|
Create a new dog in the database.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
db (Session): SQLAlchemy database session
|
||||||
|
dog_data (DogCreate): Pydantic model with dog data
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Dog: The newly created Dog object
|
||||||
|
"""
|
||||||
|
owner = db.query(User).filter(User.id == dog_data.owner_id).first()
|
||||||
|
if not owner:
|
||||||
|
raise ValueError(f"Owner with ID {dog_data.owner_id} not found")
|
||||||
|
|
||||||
|
dog = Dog(
|
||||||
|
name=dog_data.name,
|
||||||
|
breed=dog_data.breed,
|
||||||
|
age=dog_data.age,
|
||||||
|
owner_id=dog_data.owner_id
|
||||||
|
)
|
||||||
|
db.add(dog)
|
||||||
|
db.commit()
|
||||||
|
db.refresh(dog)
|
||||||
|
return dog
|
||||||
|
|
||||||
|
def update_dog(db: Session, dog_id: int, dog_data: DogCreate) -> Dog:
|
||||||
|
"""
|
||||||
|
Update an existing dog in the database.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
db (Session): SQLAlchemy database session
|
||||||
|
dog_id (int): ID of the dog to update
|
||||||
|
dog_data (DogCreate): Pydantic model with updated dog data
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Dog: The updated Dog object
|
||||||
|
"""
|
||||||
|
dog = db.query(Dog).filter(Dog.id == dog_id).first()
|
||||||
|
if not dog:
|
||||||
|
raise ValueError(f"Dog with ID {dog_id} not found")
|
||||||
|
|
||||||
|
owner = db.query(User).filter(User.id == dog_data.owner_id).first()
|
||||||
|
if not owner:
|
||||||
|
raise ValueError(f"Owner with ID {dog_data.owner_id} not found")
|
||||||
|
|
||||||
|
dog.name = dog_data.name
|
||||||
|
dog.breed = dog_data.breed
|
||||||
|
dog.age = dog_data.age
|
||||||
|
dog.owner_id = dog_data.owner_id
|
||||||
|
db.commit()
|
||||||
|
db.refresh(dog)
|
||||||
|
return dog
|
||||||
|
|
||||||
|
def delete_dog(db: Session, dog_id: int) -> None:
|
||||||
|
"""
|
||||||
|
Delete a dog from the database.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
db (Session): SQLAlchemy database session
|
||||||
|
dog_id (int): ID of the dog to delete
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
None
|
||||||
|
"""
|
||||||
|
dog = db.query(Dog).filter(Dog.id == dog_id).first()
|
||||||
|
if not dog:
|
||||||
|
raise ValueError(f"Dog with ID {dog_id} not found")
|
||||||
|
|
||||||
|
db.delete(dog)
|
||||||
|
db.commit()
|
Loading…
x
Reference in New Issue
Block a user