from typing import List, Optional, Union, Dict, Any from sqlalchemy.orm import Session from app.models.client import Client from app.schemas.client import ClientCreate, ClientUpdate def get_client(db: Session, client_id: int) -> Optional[Client]: """ Get client by ID """ return db.query(Client).filter(Client.id == client_id).first() def get_clients_by_user( db: Session, user_id: int, skip: int = 0, limit: int = 100 ) -> List[Client]: """ Get all clients for a user """ return ( db.query(Client) .filter(Client.user_id == user_id) .offset(skip) .limit(limit) .all() ) def create_client(db: Session, obj_in: ClientCreate, user_id: int) -> Client: """ Create new client for a user """ db_obj = Client( user_id=user_id, name=obj_in.name, email=obj_in.email, company_name=obj_in.company_name, address=obj_in.address, phone=obj_in.phone, notes=obj_in.notes, ) db.add(db_obj) db.commit() db.refresh(db_obj) return db_obj def update_client( db: Session, *, db_obj: Client, obj_in: Union[ClientUpdate, Dict[str, Any]] ) -> Client: """ Update client """ if isinstance(obj_in, dict): update_data = obj_in else: update_data = obj_in.dict(exclude_unset=True) for field in update_data: if hasattr(db_obj, field): setattr(db_obj, field, update_data[field]) db.add(db_obj) db.commit() db.refresh(db_obj) return db_obj def delete_client(db: Session, *, client_id: int) -> Client: """ Delete client """ client = db.query(Client).filter(Client.id == client_id).first() if client: db.delete(client) db.commit() return client