Sakshi
nutrition
96f792c
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from typing import List
from app.database import get_db
from app import models, schemas
from app.auth import (
get_password_hash,
verify_password,
get_current_user,
)
router = APIRouter(tags=["user"])
@router.post("/auth/register", response_model=schemas.UserResponse, status_code=status.HTTP_201_CREATED)
def register(user: schemas.UserCreate, db: Session = Depends(get_db)):
db_user = db.query(models.User).filter(models.User.username == user.username).first()
if db_user:
raise HTTPException(status_code=400, detail="Username already registered")
db_email = db.query(models.User).filter(models.User.email == user.email).first()
if db_email:
raise HTTPException(status_code=400, detail="Email already registered")
hashed_password = get_password_hash(user.password)
db_user = models.User(
username=user.username,
email=user.email,
hashed_password=hashed_password,
role=models.UserRole.USER
)
db.add(db_user)
db.commit()
db.refresh(db_user)
return db_user
@router.post("/auth/login", response_model=schemas.UserResponse)
def login(credentials: schemas.UserLogin, db: Session = Depends(get_db)):
user = db.query(models.User).filter(models.User.username == credentials.username).first()
if not user:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Incorrect username or password"
)
if not verify_password(credentials.password, str(user.hashed_password)):
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Incorrect username or password"
)
return user
@router.get("/user/me", response_model=schemas.UserResponse)
def get_current_user_info(current_user: models.User = Depends(get_current_user)):
return current_user
@router.post("/user/health-issues", response_model=schemas.HealthIssueResponse, status_code=status.HTTP_201_CREATED)
def add_health_issue(
health_issue: schemas.HealthIssueCreate,
current_user: models.User = Depends(get_current_user),
db: Session = Depends(get_db)
):
db_health_issue = models.HealthIssue(
user_id=current_user.id,
**health_issue.dict()
)
db.add(db_health_issue)
db.commit()
db.refresh(db_health_issue)
return db_health_issue
@router.get("/user/health-issues", response_model=List[schemas.HealthIssueResponse])
def get_health_issues(
current_user: models.User = Depends(get_current_user),
db: Session = Depends(get_db)
):
return db.query(models.HealthIssue).filter(models.HealthIssue.user_id == current_user.id).all()
@router.delete("/user/health-issues/{issue_id}", status_code=status.HTTP_204_NO_CONTENT)
def delete_health_issue(
issue_id: int,
current_user: models.User = Depends(get_current_user),
db: Session = Depends(get_db)
):
health_issue = db.query(models.HealthIssue).filter(
models.HealthIssue.id == issue_id,
models.HealthIssue.user_id == current_user.id
).first()
if not health_issue:
raise HTTPException(status_code=404, detail="Health issue not found")
db.delete(health_issue)
db.commit()
return None