101 lines
3.4 KiB
Python
101 lines
3.4 KiB
Python
from fastapi import APIRouter, Depends, status
|
|
from sqlalchemy.orm import Session
|
|
from app.config.database import get_db
|
|
from app.controllers.auth.auth_controller import AuthController
|
|
from app.schemas.auth.auth_schema import (
|
|
UserSignup,
|
|
UserSignin,
|
|
TokenResponse,
|
|
UserResponse,
|
|
UserUpdate,
|
|
ResetPassword,
|
|
RefreshTokenRequest,
|
|
ForgotPasswordRequest,
|
|
VerifyOTPRequest,
|
|
ResetPasswordWithOTP,
|
|
)
|
|
from app.middleware.auth_middleware import get_current_user
|
|
from app.middleware.tenant_middleware import get_tenant_from_header
|
|
from app.models.auth.user_model import User
|
|
import uuid
|
|
|
|
router = APIRouter()
|
|
|
|
@router.post("/signup", response_model=UserResponse, status_code=status.HTTP_201_CREATED)
|
|
def signup(
|
|
user_data: UserSignup,
|
|
db: Session = Depends(get_db),
|
|
tenant_id: uuid.UUID = Depends(get_tenant_from_header),
|
|
):
|
|
return AuthController.signup(db, user_data, tenant_id)
|
|
|
|
@router.post("/signin", response_model=TokenResponse)
|
|
def signin(signin_data: UserSignin, db: Session = Depends(get_db)):
|
|
return AuthController.signin(db, signin_data)
|
|
|
|
@router.post("/refresh", response_model=TokenResponse)
|
|
def refresh_token(token_data: RefreshTokenRequest, db: Session = Depends(get_db)):
|
|
return AuthController.refresh_token(db, token_data)
|
|
|
|
@router.get("/me", response_model=UserResponse)
|
|
def get_me(
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user),
|
|
):
|
|
return AuthController.me(db, current_user)
|
|
|
|
@router.put("/update/{user_id}", response_model=UserResponse)
|
|
def update_user(
|
|
user_id: uuid.UUID,
|
|
user_data: UserUpdate,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user),
|
|
):
|
|
return AuthController.update_user(db, user_id, user_data, current_user)
|
|
|
|
@router.patch("/update/{user_id}/language", response_model=UserResponse)
|
|
def update_language(
|
|
user_id: uuid.UUID,
|
|
language_data: dict,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user),
|
|
):
|
|
supported_languages = ["en", "ar"]
|
|
preferred_language = language_data.get("preferred_language")
|
|
|
|
if preferred_language not in supported_languages:
|
|
from fastapi import HTTPException
|
|
raise HTTPException(
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
detail=f"Unsupported language. Supported languages: {', '.join(supported_languages)}"
|
|
)
|
|
|
|
user_update = UserUpdate(preferred_language=preferred_language)
|
|
return AuthController.update_user(db, user_id, user_update, current_user)
|
|
|
|
@router.post("/reset-password")
|
|
def reset_password(
|
|
password_data: ResetPassword,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user),
|
|
):
|
|
return AuthController.reset_password(db, current_user, password_data)
|
|
|
|
@router.post("/logout")
|
|
def logout(current_user: User = Depends(get_current_user)):
|
|
return AuthController.logout(current_user)
|
|
|
|
@router.post("/forgot-password")
|
|
def forgot_password(request: ForgotPasswordRequest, db: Session = Depends(get_db)):
|
|
return AuthController.forgot_password(db, request)
|
|
|
|
@router.post("/verify-otp")
|
|
def verify_otp(request: VerifyOTPRequest, db: Session = Depends(get_db)):
|
|
return AuthController.verify_otp(db, request)
|
|
|
|
|
|
@router.post("/reset-password-otp")
|
|
def reset_password_with_otp(
|
|
request: ResetPasswordWithOTP, db: Session = Depends(get_db)
|
|
):
|
|
return AuthController.reset_password_with_otp(db, request) |