Automated Action 77865dae90 Setup complete FastAPI backend with user authentication, client management, and invoice generation
Features:
- User authentication with JWT
- Client management with CRUD operations
- Invoice generation and management
- SQLite database with Alembic migrations
- Detailed project documentation
2025-05-26 17:41:47 +00:00

79 lines
1.8 KiB
Python

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