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