Source code for app.domain.accounts.deps

"""User Account Controllers."""

from __future__ import annotations

from typing import TYPE_CHECKING, Any

from sqlalchemy.orm import joinedload, load_only, selectinload

from app.db import models as m
from app.domain.accounts.services import UserService
from app.lib.deps import create_service_provider

if TYPE_CHECKING:
    from litestar import Request

# create a hard reference to this since it's used oven
provide_users_service = create_service_provider(
    UserService,
    load=[
        selectinload(m.User.roles).options(joinedload(m.UserRole.role, innerjoin=True)),
        selectinload(m.User.oauth_accounts),
        selectinload(m.User.teams).options(
            joinedload(m.TeamMember.team, innerjoin=True).options(load_only(m.Team.name)),
        ),
    ],
    error_messages={"duplicate_key": "This user already exists.", "integrity": "User operation failed."},
)


[docs] async def provide_user(request: Request[m.User, Any, Any]) -> m.User: """Get the user from the request. Args: request: current Request. Returns: User """ return request.user