main


"/home/yossef/notes/full-stack/python-backend/fastapi/curd_sql/main.md"

path: full-stack/python-backend/fastapi/curd_sql/main.md

- **fileName**: main
- **Created on**: 2025-04-15 17:24:02

the main running server file

from typing import List

from fastapi import Depends, FastAPI, HTTPException
from sqlalchemy.orm import Session

from src import curd, models, scheme
from src.database import engine, SessionLocal

models.Base.metadata.create_all(bind=engine)

app = FastAPI()

@app.get("/")
def home():
    return {"message":"welcome from yossef"}

# dependency for open and close db every time make a request
def get_db():
    db = SessionLocal() # create a session db
    try: 
        yield db
    finally:
        db.close()

## response_model is specifi what dataType gone return from this function
@app.post("/users/", response_model=scheme.UserResponse)
def create_user(user: scheme.UserCreate, db: Session = Depends(get_db)):
    """
    adding new user to db and return it.
    """
    # check if user found with the same email  
    db_user = curd.get_user_by_email(db, user.email)
    if db_user: # check if user found 
        raise HTTPException(status_code=400, detail="there is a user with \
                this email") 
    # create a user and adding to db then return the user that added
    return curd.create_user(db, user) # create a user and return it's value

@app.get("/users/", response_model=List[scheme.UserResponse])
def get_user(skip: int =  0 , limit: int = 100, db: Session = Depends(get_db)):
    """
    get all users from db with specific limit 
    """
    ## get all users from db with specific limit
    users = curd.get_users(db, skip=skip, limit=limit)
    if users is None: # check if no value found
        raise HTTPException(status_code=404, detail="error happend")
    return users

@app.get("/users/{user_id}", response_model=scheme.UserResponse)
def read_user(user_id: int, db: Session = Depends(get_db)):
    """
    get user information from db using id
    """
    ## get information about user user id
    db_user = curd.get_user(db, user_id=user_id)
    if db_user is None: # check if not found
        raise HTTPException(status_code=404, detail="User not found")
    # return found user
    return db_user

@app.post("/users/{user_id}/items/", response_model=scheme.Item)
def create_item_for_user(user_id: int, item: scheme.ItemCreate, 
         db: Session = Depends(get_db)):
    """ create item and adding this to db """ # create a user item and return it's value (Item)
    return curd.create_user_item(db=db, item=item, user_id=user_id)


@app.get("/items/", response_model=List[scheme.Item])
def read_items(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
    """
    get all items from db
    """
    # get all items in db
    items = curd.get_items(db, skip=skip, limit=limit)
    if items is None: # check if not found
        raise HTTPException(status_code=404, detail="items not found")
    return items

continue:[[]]
before:./curd.md