TS-ResHub/resumes/api/views.py
2025-04-15 16:01:11 +08:00

49 lines
1.4 KiB
Python

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)}