Spaces:
Sleeping
Sleeping
| 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"]) | |
| 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 | |
| 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 | |
| def get_current_user_info(current_user: models.User = Depends(get_current_user)): | |
| return current_user | |
| 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 | |
| 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() | |
| 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 | |