Skip to content

Commit 52d58b4

Browse files
committed
feat: validate existing email and set 201 status on user creation
1 parent 8bf0025 commit 52d58b4

2 files changed

Lines changed: 11 additions & 6 deletions

File tree

backend/app/api/routes/private.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
from typing import Any
2-
3-
from fastapi import APIRouter
1+
from fastapi import APIRouter, HTTPException, status
42
from pydantic import BaseModel
53

4+
from app import crud
65
from app.api.deps import SessionDep
76
from app.core.security import get_password_hash
87
from app.models import (
@@ -20,11 +19,17 @@ class PrivateUserCreate(BaseModel):
2019
is_verified: bool = False
2120

2221

23-
@router.post("/users/", response_model=UserPublic)
24-
def create_user(user_in: PrivateUserCreate, session: SessionDep) -> Any:
22+
@router.post("/users/", response_model=UserPublic, status_code=status.HTTP_201_CREATED)
23+
def create_user(*, user_in: PrivateUserCreate, session: SessionDep) -> User:
2524
"""
2625
Create a new user.
2726
"""
27+
user = crud.get_user_by_email(session=session, email=user_in.email)
28+
if user:
29+
raise HTTPException(
30+
status_code=400,
31+
detail="The user with this email already exists in the system.",
32+
)
2833

2934
user = User(
3035
email=user_in.email,

backend/tests/api/routes/test_private.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def test_create_user(client: TestClient, db: Session) -> None:
1515
},
1616
)
1717

18-
assert r.status_code == 200
18+
assert r.status_code == 201
1919

2020
data = r.json()
2121

0 commit comments

Comments
 (0)