Initial FastAPI admin auth scaffold
This commit is contained in:
70
app/core/dependencies.py
Normal file
70
app/core/dependencies.py
Normal file
@@ -0,0 +1,70 @@
|
||||
from functools import lru_cache
|
||||
|
||||
from app.common.repository.admin_user_repository import AdminUserRepository
|
||||
from app.core.config import Settings, get_settings
|
||||
from app.core.database import Database
|
||||
from app.lib.jwt.blacklist import InMemoryTokenBlacklist
|
||||
from app.lib.jwt.factory import JwtFactory
|
||||
from app.lib.response.admin_return import AdminReturn
|
||||
from app.service.admin.login.login_service import LoginService
|
||||
from app.service.admin.login.refresh_service import RefreshService
|
||||
from app.service.admin.profile.current_user_service import CurrentUserService
|
||||
from app.service.base_token_service import BaseTokenService
|
||||
|
||||
|
||||
# lru_cache 会缓存函数第一次创建出来的对象。
|
||||
# 这里用它把 Database、JwtFactory、TokenService 等依赖做成应用级单例,
|
||||
# 类似 Hyperf 从容器里反复 get 同一个共享服务。
|
||||
@lru_cache
|
||||
def get_database() -> Database:
|
||||
return Database(get_settings().database_path)
|
||||
|
||||
|
||||
@lru_cache
|
||||
def get_token_blacklist() -> InMemoryTokenBlacklist:
|
||||
return InMemoryTokenBlacklist()
|
||||
|
||||
|
||||
@lru_cache
|
||||
def get_jwt_factory() -> JwtFactory:
|
||||
return JwtFactory(get_settings(), get_token_blacklist())
|
||||
|
||||
|
||||
@lru_cache
|
||||
def get_token_service() -> BaseTokenService:
|
||||
return BaseTokenService(get_jwt_factory())
|
||||
|
||||
|
||||
@lru_cache
|
||||
def get_admin_return() -> AdminReturn:
|
||||
return AdminReturn()
|
||||
|
||||
|
||||
@lru_cache
|
||||
def get_admin_user_repository() -> AdminUserRepository:
|
||||
return AdminUserRepository(get_database())
|
||||
|
||||
|
||||
def get_login_service() -> LoginService:
|
||||
return LoginService(
|
||||
get_admin_user_repository(),
|
||||
get_token_service(),
|
||||
get_admin_return(),
|
||||
)
|
||||
|
||||
|
||||
def get_refresh_service() -> RefreshService:
|
||||
return RefreshService(get_token_service(), get_admin_return())
|
||||
|
||||
|
||||
def get_current_user_service() -> CurrentUserService:
|
||||
return CurrentUserService(get_admin_user_repository(), get_admin_return())
|
||||
|
||||
|
||||
async def bootstrap_database(settings: Settings | None = None) -> None:
|
||||
settings = settings or get_settings()
|
||||
await get_database().initialize()
|
||||
await get_admin_user_repository().ensure_seed_admin(
|
||||
settings.admin_seed_username,
|
||||
settings.admin_seed_password,
|
||||
)
|
||||
Reference in New Issue
Block a user