Files
PaskaJoululeffa2024-backend/src/routes/user.py
T
2024-11-09 16:25:05 +02:00

54 lines
1.4 KiB
Python

from fastapi import APIRouter, Response
import bcrypt
from models.user import UserIn, UserOut, UserCredentials
from models.general import Message
from lib.database import get_all_users, get_user_by_username
router = APIRouter(
prefix="/user",
tags=["user"],
responses={404: {"description": "Not found"}},
)
@router.get("/", response_model=list[UserOut])
async def get_users() -> list[UserOut]:
"""Get all users"""
return get_all_users()
@router.post(
"/login",
responses={
200: {"model": UserOut, "description": "Login successful"},
400: {"model": Message},
404: {"model": Message},
},
)
async def login(user: UserCredentials):
"""Login a user"""
user_from_db: UserIn = get_user_by_username(user.username)
if user_from_db is None:
return Response(
status_code=404,
media_type="application/json",
content=Message(
message="User not found", message_type="error"
).model_dump_json(),
)
password = user.password.encode("utf-8")
if bcrypt.checkpw(password, user_from_db.password.encode("utf-8")):
return UserOut(**user_from_db.model_dump())
return Response(
status_code=400,
media_type="application/json",
content=Message(
message="Invalid password", message_type="error"
).model_dump_json(),
)