From 97afe5447a63c2171c856a85063406aeb9f63957 Mon Sep 17 00:00:00 2001 From: Hannah dagemark Date: Wed, 2 Sep 2026 20:51:47 +0200 Subject: [PATCH] Add user creation --- app/logic/user_logic.py | 14 ++++++++++++-- app/models/user.py | 4 ++++ app/routers/user_route.py | 14 +++++++++++++- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/app/logic/user_logic.py b/app/logic/user_logic.py index ecd3e06..206c0da 100644 --- a/app/logic/user_logic.py +++ b/app/logic/user_logic.py @@ -7,9 +7,9 @@ from fastapi.security import OAuth2PasswordBearer from pwdlib import PasswordHash from app.config import Settings -from app.database import get_from_database_where +from app.database import add_to_database, get_from_database_where from app.models.token import TokenData -from app.models.user import User, UserInDB +from app.models.user import User, UserIn, UserInDB oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") @@ -37,6 +37,16 @@ def get_user(username: str): return UserInDB.model_validate(user[0]) +def save_user(user: UserIn): + user_in_db = UserInDB( + username=user.username, + authority=user.authority, + hashed_password=get_password_hash(user.password), + ) + add_to_database(user_in_db) + return user_in_db + + def authenticate_user(username: str, password: str): user = get_user(username) if not user: diff --git a/app/models/user.py b/app/models/user.py index c953516..234ba61 100644 --- a/app/models/user.py +++ b/app/models/user.py @@ -9,5 +9,9 @@ class User(SQLModel, table=True): authority: int +class UserIn(User): + password: str + + class UserInDB(User): hashed_password: str diff --git a/app/routers/user_route.py b/app/routers/user_route.py index 371ff0f..1f37c38 100644 --- a/app/routers/user_route.py +++ b/app/routers/user_route.py @@ -9,9 +9,10 @@ from app.logic.user_logic import ( authenticate_user, create_access_token, get_current_user, + save_user, ) from app.models.token import Token -from app.models.user import User +from app.models.user import User, UserIn router = APIRouter(prefix="/users", tags=["users"]) @@ -21,6 +22,17 @@ def get_default(): return {"message": "Root for Users API"} +@router.post("/") +async def create_user(user_in: UserIn): + user = save_user(user_in) + access_token_expires = timedelta(minutes=Settings.access_token_expire_minutes) + access_token = create_access_token( + data={"sub": user.username}, + expires_delta=access_token_expires, + ) + return Token(access_token=access_token, token_type="bearer") + + @router.get("/me") async def read_me(current_user: Annotated[User, Depends(get_current_user)]): return current_user