Files
saas_backend/app/controllers/auth/user_controller.py
T

80 lines
3.2 KiB
Python
Raw Normal View History

2026-01-17 14:18:00 +05:30
from sqlalchemy.orm import Session
from fastapi import HTTPException, status, BackgroundTasks
2026-01-17 14:18:00 +05:30
from typing import List, Optional
import uuid
from app.models.auth.user_model import User
from app.schemas.auth.user_schema import UserCreate, UserUpdate
from app.services.auth.user_service import UserService
class UserController:
@staticmethod
def _resolve_tenant_id(current_user: User, requested_tenant_id: Optional[uuid.UUID]) -> Optional[uuid.UUID]:
if current_user.tenant_id is None:
return requested_tenant_id
if requested_tenant_id and requested_tenant_id != current_user.tenant_id:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="Not authorized to access this tenant"
)
return current_user.tenant_id
@staticmethod
def create_user(db: Session, user_data: UserCreate, current_user: User, background_tasks: BackgroundTasks) -> User:
2026-01-17 14:18:00 +05:30
tenant_id = UserController._resolve_tenant_id(current_user, user_data.tenant_id)
return UserService.create_user(db, user_data, tenant_id, background_tasks)
2026-01-17 14:18:00 +05:30
@staticmethod
def get_all_users(db: Session, current_user: User) -> List[User]:
tenant_id = current_user.tenant_id
return UserService.get_all_users(db, tenant_id)
@staticmethod
def get_user_by_id(db: Session, user_id: uuid.UUID, current_user: User) -> User:
tenant_id = current_user.tenant_id
return UserService.get_user_by_id(db, user_id, tenant_id)
@staticmethod
def update_user(db: Session, user_id: uuid.UUID, user_data: UserUpdate, current_user: User, background_tasks: BackgroundTasks) -> User:
2026-01-17 14:18:00 +05:30
if current_user.tenant_id is not None and user_data.tenant_id is not None:
UserController._resolve_tenant_id(current_user, user_data.tenant_id)
tenant_id = current_user.tenant_id
return UserService.update_user(db, user_id, user_data, tenant_id, background_tasks)
2026-01-17 14:18:00 +05:30
@staticmethod
def delete_user(db: Session, user_id: uuid.UUID, current_user: User):
tenant_id = current_user.tenant_id
return UserService.delete_user(db, user_id, tenant_id)
@staticmethod
def get_users_paginated(
db: Session,
current_user: User,
page: int = 1,
page_size: int = 10,
search: Optional[str] = None,
2026-04-17 10:34:51 +05:30
filter_names: Optional[List[str]] = None,
filter_emails: Optional[List[str]] = None,
statuses: Optional[List[str]] = None,
filter_tenant_ids: Optional[List[uuid.UUID]] = None,
filter_role_ids: Optional[List[uuid.UUID]] = None,
sort_by: Optional[str] = None,
sort_order: Optional[str] = None,
2026-01-17 14:18:00 +05:30
):
tenant_id = current_user.tenant_id
return UserService.get_users_paginated(
db=db,
tenant_id=tenant_id,
page=page,
page_size=page_size,
search=search,
2026-04-17 10:34:51 +05:30
filter_names=filter_names,
filter_emails=filter_emails,
statuses=statuses,
filter_tenant_ids=filter_tenant_ids,
filter_role_ids=filter_role_ids,
sort_by=sort_by,
sort_order=sort_order,
2026-01-17 14:18:00 +05:30
)