From 52d58b42d240ec92d9026967461177aa7b945349 Mon Sep 17 00:00:00 2001 From: Sergio Date: Thu, 19 Mar 2026 14:50:48 +0100 Subject: [PATCH] feat: validate existing email and set 201 status on user creation --- backend/app/api/routes/private.py | 15 ++++++++++----- backend/tests/api/routes/test_private.py | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/backend/app/api/routes/private.py b/backend/app/api/routes/private.py index 9f33ef1900..1d7f2aaaaf 100644 --- a/backend/app/api/routes/private.py +++ b/backend/app/api/routes/private.py @@ -1,8 +1,7 @@ -from typing import Any - -from fastapi import APIRouter +from fastapi import APIRouter, HTTPException, status from pydantic import BaseModel +from app import crud from app.api.deps import SessionDep from app.core.security import get_password_hash from app.models import ( @@ -20,11 +19,17 @@ class PrivateUserCreate(BaseModel): is_verified: bool = False -@router.post("/users/", response_model=UserPublic) -def create_user(user_in: PrivateUserCreate, session: SessionDep) -> Any: +@router.post("/users/", response_model=UserPublic, status_code=status.HTTP_201_CREATED) +def create_user(*, user_in: PrivateUserCreate, session: SessionDep) -> User: """ Create a new user. """ + user = crud.get_user_by_email(session=session, email=user_in.email) + if user: + raise HTTPException( + status_code=400, + detail="The user with this email already exists in the system.", + ) user = User( email=user_in.email, diff --git a/backend/tests/api/routes/test_private.py b/backend/tests/api/routes/test_private.py index 1e1f985021..268b9796d0 100644 --- a/backend/tests/api/routes/test_private.py +++ b/backend/tests/api/routes/test_private.py @@ -15,7 +15,7 @@ def test_create_user(client: TestClient, db: Session) -> None: }, ) - assert r.status_code == 200 + assert r.status_code == 201 data = r.json()