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:
Yaojia Wang
2026-07-08 12:35:09 +02:00
parent c596a8d342
commit 1392830e57

View File

@@ -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(