Big refactoring
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
All endpoints require admin role.
|
||||
"""
|
||||
|
||||
from fastapi import APIRouter, Depends
|
||||
from fastapi import APIRouter, Depends, Query
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.dependencies import get_db, require_admin
|
||||
@@ -12,13 +12,16 @@ from app.schemas.admin import (
|
||||
CreateUserRequest,
|
||||
DataCleanupRequest,
|
||||
JobToggle,
|
||||
RecommendationConfigUpdate,
|
||||
PasswordReset,
|
||||
RegistrationToggle,
|
||||
SystemSettingUpdate,
|
||||
TickerUniverseUpdate,
|
||||
UserManagement,
|
||||
)
|
||||
from app.schemas.common import APIEnvelope
|
||||
from app.services import admin_service
|
||||
from app.services import ticker_universe_service
|
||||
|
||||
router = APIRouter(tags=["admin"])
|
||||
|
||||
@@ -123,6 +126,47 @@ async def list_settings(
|
||||
)
|
||||
|
||||
|
||||
@router.get("/admin/settings/recommendations", response_model=APIEnvelope)
|
||||
async def get_recommendation_settings(
|
||||
_admin: User = Depends(require_admin),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
config = await admin_service.get_recommendation_config(db)
|
||||
return APIEnvelope(status="success", data=config)
|
||||
|
||||
|
||||
@router.put("/admin/settings/recommendations", response_model=APIEnvelope)
|
||||
async def update_recommendation_settings(
|
||||
body: RecommendationConfigUpdate,
|
||||
_admin: User = Depends(require_admin),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
updated = await admin_service.update_recommendation_config(
|
||||
db,
|
||||
body.model_dump(exclude_unset=True),
|
||||
)
|
||||
return APIEnvelope(status="success", data=updated)
|
||||
|
||||
|
||||
@router.get("/admin/settings/ticker-universe", response_model=APIEnvelope)
|
||||
async def get_ticker_universe_setting(
|
||||
_admin: User = Depends(require_admin),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
data = await admin_service.get_ticker_universe_default(db)
|
||||
return APIEnvelope(status="success", data=data)
|
||||
|
||||
|
||||
@router.put("/admin/settings/ticker-universe", response_model=APIEnvelope)
|
||||
async def update_ticker_universe_setting(
|
||||
body: TickerUniverseUpdate,
|
||||
_admin: User = Depends(require_admin),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
data = await admin_service.update_ticker_universe_default(db, body.universe)
|
||||
return APIEnvelope(status="success", data=data)
|
||||
|
||||
|
||||
@router.put("/admin/settings/{key}", response_model=APIEnvelope)
|
||||
async def update_setting(
|
||||
key: str,
|
||||
@@ -138,6 +182,21 @@ async def update_setting(
|
||||
)
|
||||
|
||||
|
||||
@router.post("/admin/tickers/bootstrap", response_model=APIEnvelope)
|
||||
async def bootstrap_tickers(
|
||||
universe: str = Query("sp500", pattern="^(sp500|nasdaq100|nasdaq_all)$"),
|
||||
prune_missing: bool = Query(False),
|
||||
_admin: User = Depends(require_admin),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
result = await ticker_universe_service.bootstrap_universe(
|
||||
db,
|
||||
universe,
|
||||
prune_missing=prune_missing,
|
||||
)
|
||||
return APIEnvelope(status="success", data=result)
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Data cleanup
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -167,6 +226,15 @@ async def list_jobs(
|
||||
return APIEnvelope(status="success", data=jobs)
|
||||
|
||||
|
||||
@router.get("/admin/pipeline/readiness", response_model=APIEnvelope)
|
||||
async def get_pipeline_readiness(
|
||||
_admin: User = Depends(require_admin),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
data = await admin_service.get_pipeline_readiness(db)
|
||||
return APIEnvelope(status="success", data=data)
|
||||
|
||||
|
||||
@router.post("/admin/jobs/{job_name}/trigger", response_model=APIEnvelope)
|
||||
async def trigger_job(
|
||||
job_name: str,
|
||||
|
||||
Reference in New Issue
Block a user