[rewrite] Implemented login and register

This commit is contained in:
Thastertyn committed 2025-03-12 14:01:13 +01:00
1 parent cd8fdb9c21
commit 20ef2aa4e8
29 files changed
+183 -722

No files matched your search

+2 -2
View File
@@ -1,11 +1,11 @@
from fastapi import APIRouter
from app.api.routes import cart_routes, user_routes, utils_routes, shop
from app.api.routes import cart_routes, login_routes, shop, user_routes, utils_routes
api_router = APIRouter()
api_router.include_router(cart_routes.router)
api_router.include_router(user_routes.router)
api_router.include_router(utils_routes.router)
api_router.include_router(login_routes.router)
api_router.include_router(shop.shop_router)
+12 -10
View File
@@ -1,23 +1,18 @@
from typing import Annotated
from sqlmodel import Session
from fastapi import Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer
import jwt
from fastapi import Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer
from jwt.exceptions import InvalidTokenError
from pydantic import ValidationError
from sqlmodel import Session
from app.core.config import settings
from app.core import security
from app.core.config import settings
from app.database.manager import get_session
from app.database.models.user_model import User
from app.database.models.user_model import User, UserRole
from app.schemas.user_schemas import TokenPayload
reusable_oauth2 = OAuth2PasswordBearer(
tokenUrl="/login/access-token"
)
@@ -46,3 +41,10 @@ def get_current_user(session: SessionDep, token: TokenDep) -> User:
CurrentUser = Annotated[User, Depends(get_current_user)]
def get_owner_user(current_user: CurrentUser) -> User:
if current_user.user_role != UserRole.OWNER:
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="You must be an owner")
return current_user
CurrentOwnerUser = Annotated[User, Depends(get_owner_user)]
+4 -8
View File
@@ -1,20 +1,16 @@
from typing import Annotated
from datetime import timedelta
from typing import Annotated
from fastapi import APIRouter, HTTPException, Depends
from fastapi import APIRouter, Depends, HTTPException
from fastapi.security import OAuth2PasswordRequestForm
from app.api.dependencies import SessionDep
from app.core import security
from app.core.config import settings
from app.crud import user_crud
from app.schemas.user_schemas import Token
from app.crud import user_crud
router = APIRouter(tags=["login"])
router = APIRouter(tags=["Login"])
@router.post("/login/access-token")
@@ -1,23 +1,19 @@
from typing import Annotated
from datetime import timedelta
from typing import Annotated
from fastapi import APIRouter, HTTPException, Depends
from fastapi import APIRouter, Depends, HTTPException
from fastapi.security import OAuth2PasswordRequestForm
from app.api.dependencies import SessionDep
from app.core import security
from app.core.config import settings
from app.crud import user_crud
from app.schemas.user_schemas import Token
from app.crud import user_crud
router = APIRouter(prefix="/login", tags=["Login"])
router = APIRouter(tags=["Shop-Login"])
@router.post("/login/access-token")
@router.post("/access-token")
def login_access_token(
session: SessionDep,
form_data: Annotated[OAuth2PasswordRequestForm, Depends()]
Whitespace-only changes.
@@ -3,12 +3,13 @@ from typing import Annotated
from fastapi import APIRouter, Body, Path
from app.api.dependencies import SessionDep
from app.crud.user_crud import create_user
from app.database.models.user_model import UserRole
from app.schemas.user_schemas import UserRegister
router = APIRouter(
prefix="/user",
tags=["Shop-Users"]
prefix="/user"
)
@@ -23,8 +24,8 @@ async def logout():
@router.post("/register", summary="Register new user")
async def register(user_data: UserRegister):
raise NotImplementedError()
async def register(session: SessionDep, user_data: UserRegister, shop_uuid=Annotated[uuid.UUID, Path(title="UUID of the shop")]):
create_user(session, user_data, shop_uuid, UserRole.CUSTOMER)
@router.put("/update", summary="Update user details")
+29 -6
View File
@@ -1,9 +1,16 @@
from fastapi import APIRouter, Body
import logging
import re
from app.schemas.user_schemas import UserRegister
from fastapi import APIRouter, Body, HTTPException, status
from sqlalchemy.exc import IntegrityError
from app.api.dependencies import SessionDep
from app.crud import user_crud
from app.database.models.user_model import UserRole
from app.schemas.user_schemas import UserRegister
logger = logging.getLogger(__name__)
router = APIRouter(
prefix="/user",
@@ -24,10 +31,26 @@ async def logout():
@router.post("/register", summary="Register new user")
async def register(session: SessionDep, user_data: UserRegister):
try:
user_crud.create_user(session, user_data)
return {"message": "User registered successfully"}
except BaseException:
return {"message": "An error occurred"}
user_crud.create_user(session, user_data, None, UserRole.OWNER)
return {"detail": "Registered succeesfully"}
except IntegrityError as e:
field_mapping = {"uuid": "email"} # If a UUID is duplicate, it means email is in use
constraint = e.orig.diag.constraint_name
column_name = re.sub(r"^user_(\w+)_key$", r"\1", constraint) if constraint else None
if column_name == "uuid":
column_name = "email"
detail = f"{field_mapping.get(column_name, column_name or 'Entry').capitalize()} already in use"
raise HTTPException(
status_code=status.HTTP_409_CONFLICT,
detail=detail
)
except Exception as e:
logger.error(e)
raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Failed to register")
@router.put("/update", summary="Update user details")