from ninja import Router, Query from accounts.models import User from resumes.models import ResumeBasic from resumes.api.schemas import ResumeBasicOut, PaginatedResumes from typing import Optional from utils.auth import jwt_auth from utils.permissions import login_required router = Router(tags=["简历"]) @router.get("/", response=PaginatedResumes, auth=jwt_auth) @login_required def list_resumes( request, job_status: Optional[str] = Query(None), age: Optional[int] = Query(None), name: Optional[str] = Query(None), source_id: Optional[int] = Query(None), keyword: Optional[str] = Query(None), limit: int = 10, offset: int = 0 ): user = request.user qs = ResumeBasic.objects.all() if user.is_admin(): pass # 管理员访问全部 elif user.is_manager(): qs = qs.filter(source_id__in=user.managed_websites.values_list("id", flat=True)) elif user.is_user(): qs = qs.filter(source_id__in=user.authorized_websites.values_list("id", flat=True)) if job_status: qs = qs.filter(job_status=job_status) if age: qs = qs.filter(age=age) if name: qs = qs.filter(name__icontains=name) if source_id: qs = qs.filter(source_id=source_id) if keyword: qs = qs.filter(crawl_keywords__icontains=keyword) total = qs.count() results = qs[offset:offset + limit] return {"count": total, "items": list(results)}