refactor(backend): jobs 读端点走 JobRepo 而非路由内裸 ORM
GET /jobs/{id} 原在路由里直接 select(Job) 裸 ORM 查询;改为经 get_job_repo
注入 JobRepo 调 .get(job_id),与项目其它端点的 Repository 分层一致,
测试可经 dependency_overrides 注 fake。行为不变(同一 session 同一查询)。
This commit is contained in:
@@ -6,13 +6,11 @@ import uuid
|
|||||||
from typing import Annotated
|
from typing import Annotated
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends
|
from fastapi import APIRouter, Depends
|
||||||
from sqlalchemy import select
|
from ww_core.domain import JobRepo
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
|
||||||
from ww_db import get_session
|
|
||||||
from ww_db.models import Job
|
|
||||||
from ww_shared import AppError, ErrorCode, ErrorEnvelope
|
from ww_shared import AppError, ErrorCode, ErrorEnvelope
|
||||||
|
|
||||||
from ww_api.schemas.jobs import JobResponse
|
from ww_api.schemas.jobs import JobResponse
|
||||||
|
from ww_api.services.project_deps import get_job_repo
|
||||||
|
|
||||||
router = APIRouter(prefix="/jobs", tags=["jobs"])
|
router = APIRouter(prefix="/jobs", tags=["jobs"])
|
||||||
|
|
||||||
@@ -23,9 +21,9 @@ router = APIRouter(prefix="/jobs", tags=["jobs"])
|
|||||||
)
|
)
|
||||||
async def get_job(
|
async def get_job(
|
||||||
job_id: uuid.UUID,
|
job_id: uuid.UUID,
|
||||||
session: Annotated[AsyncSession, Depends(get_session)],
|
job_repo: Annotated[JobRepo, Depends(get_job_repo)],
|
||||||
) -> JobResponse:
|
) -> JobResponse:
|
||||||
job = (await session.execute(select(Job).where(Job.id == job_id))).scalar_one_or_none()
|
job = await job_repo.get(job_id)
|
||||||
if job is None:
|
if job is None:
|
||||||
raise AppError(ErrorCode.NOT_FOUND, f"job {job_id} not found")
|
raise AppError(ErrorCode.NOT_FOUND, f"job {job_id} not found")
|
||||||
return JobResponse(
|
return JobResponse(
|
||||||
|
|||||||
Reference in New Issue
Block a user