Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 22 additions & 3 deletions app/schema.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,30 @@
from pydantic import BaseModel
from pydantic import BaseModel, EmailStr, validator


class UserCreate(BaseModel):
name: str
email: str
email: EmailStr
password: str

@validator("name")
def name_must_not_be_empty(cls, v):
if not v.strip():
raise ValueError("Name must not be empty")
return v.strip()

@validator("password")
def password_min_length(cls, v):
if len(v) < 6:
raise ValueError("Password must be at least 6 characters")
return v


class UserUpdate(BaseModel):
name: str
email: str
email: EmailStr

@validator("name")
def name_must_not_be_empty(cls, v):
if not v.strip():
raise ValueError("Name must not be empty")
return v.strip()
27 changes: 21 additions & 6 deletions main.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from fastapi import FastAPI, HTTPException, Depends
from sqlalchemy.orm import Session
from sqlalchemy.exc import IntegrityError
from app.database import get_db
from app.models import User
from app.schema import UserCreate, UserUpdate
Expand All @@ -14,33 +15,47 @@ def get_all_users(db: Session = Depends(get_db)):
return db.query(User).all()

@app.get("/users/{user_id}")
def get_user_by_email(user_id: int, db: Session = Depends(get_db)):
def get_user(user_id: int, db: Session = Depends(get_db)):
user = db.query(User).filter(User.id == user_id).first()
if user:
return user
raise HTTPException(status_code=404, detail="User not found")


@app.post("/users/")
@app.post("/users/", status_code=201)
def create_user(user: UserCreate, db: Session = Depends(get_db)):
existing_user = db.query(User).filter(User.email == user.email).first()
if existing_user:
raise HTTPException(status_code=409, detail="Email already registered")
db_user = User(name=user.name, email=user.email, password=user.password)
db.add(db_user)
db.commit()
try:
db.commit()
except IntegrityError:
db.rollback()
raise HTTPException(status_code=409, detail="Email already registered")
db.refresh(db_user)
return db_user

@app.put("/users/{user_id}")
def update_user_by_email(user_id: int, user: UserUpdate, db: Session = Depends(get_db)):
def update_user(user_id: int, user: UserUpdate, db: Session = Depends(get_db)):
db_user = db.query(User).filter(User.id == user_id).first()
if not db_user:
raise HTTPException(status_code=404, detail="User not found")
existing_user = db.query(User).filter(User.email == user.email, User.id != user_id).first()
if existing_user:
raise HTTPException(status_code=409, detail="Email already registered")
db_user.name = user.name
db_user.email = user.email
db.commit()
try:
db.commit()
except IntegrityError:
db.rollback()
raise HTTPException(status_code=409, detail="Email already registered")
return {"message": "User updated successfully"}

@app.delete("/users/{user_id}")
def delete_user_by_email(user_id: int, db: Session = Depends(get_db)):
def delete_user(user_id: int, db: Session = Depends(get_db)):
db_user = db.query(User).filter(User.id == user_id).first()
if not db_user:
raise HTTPException(status_code=404, detail="User not found")
Expand Down