You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.2 KiB
Python
42 lines
1.2 KiB
Python
from typing import List
|
|
from molten import Route, Include, HTTP_201, HTTP_202, HTTPError, HTTP_404
|
|
|
|
from casbin_api.schema import APIResponse
|
|
from casbin_api.error import EntityNotFound
|
|
from .model import User, AuthToken
|
|
from .manager import UserManager
|
|
|
|
|
|
def create_user(user: User, user_manager: UserManager) -> User:
|
|
_user = user_manager.create_user(user)
|
|
headers = {"Location": _user.href}
|
|
return HTTP_201, _user, headers
|
|
|
|
|
|
def get_user_by_id(user_id: int, user_manager: UserManager) -> User:
|
|
try:
|
|
_user = user_manager.get_user_by_id(user_id)
|
|
except EntityNotFound as err:
|
|
raise HTTPError(HTTP_404, APIResponse(status=404, message=err.message))
|
|
return _user
|
|
|
|
|
|
# Update user only if you are the user or you are admin
|
|
def update_user(user_id: int, user: User, user_manager: UserManager) -> User:
|
|
return user_manager.update_todo(user_id, user)
|
|
|
|
|
|
def login_user(user: User, user_manager: UserManager) -> AuthToken:
|
|
pass
|
|
|
|
|
|
auth_routes = Include(
|
|
"/auth",
|
|
[
|
|
Route("/login", login_user, method="POST"),
|
|
Route("/register", create_user, method="POST"),
|
|
Route("/profile/{user_id}", get_user_by_id, method="GET"),
|
|
Route("/profile/{user_id}", update_user, method="PUT"),
|
|
],
|
|
)
|