137 lines
4.9 KiB
Python
137 lines
4.9 KiB
Python
from ninja import Router, Query
|
|
from django.shortcuts import get_object_or_404
|
|
from accounts.models import User
|
|
from authorize.models import ResumeDetailAccessRequest
|
|
from authorize.schemas import ResumeAccessRequestIn
|
|
from resumes.models import ResumeDetail
|
|
from utils.auth import jwt_auth
|
|
from utils.permissions import login_required, manager_required
|
|
|
|
resume_authorize_router = Router(tags=["简历(详情信息)授权管理"])
|
|
|
|
|
|
@resume_authorize_router.post("/apply", auth=jwt_auth, summary="申请简历详情[普]", description="普通用户申请查看某一份简历详情")
|
|
@login_required
|
|
def apply_resume_access(request, data: ResumeAccessRequestIn):
|
|
user = request.user
|
|
|
|
if not user.is_user():
|
|
return {"success": False, "message": "仅普通用户可申请查看简历"}
|
|
|
|
resume = get_object_or_404(ResumeDetail, id=data.resume_id)
|
|
|
|
exists = ResumeDetailAccessRequest.objects.filter(
|
|
user=user, resume=resume, status="pending"
|
|
).exists()
|
|
|
|
if exists:
|
|
return {"success": False, "message": "您已申请过该简历,正在等待审批"}
|
|
|
|
ResumeDetailAccessRequest.objects.create(
|
|
user=user,
|
|
resume=resume,
|
|
reason=data.reason or ""
|
|
)
|
|
|
|
return {"success": True, "message": "申请已提交,等待审批"}
|
|
|
|
|
|
@resume_authorize_router.get("/pending", auth=jwt_auth, summary="待审批简历[分]", description="分管理查看自己网站下的待审批简历详情申请")
|
|
@manager_required
|
|
def list_pending_resume_requests(request):
|
|
manager = request.user
|
|
manageable_ids = manager.managed_websites.values_list("id", flat=True)
|
|
|
|
requests = ResumeDetailAccessRequest.objects.filter(
|
|
resume__source_id__in=manageable_ids,
|
|
status="pending"
|
|
)
|
|
|
|
data = [
|
|
{
|
|
"id": r.id,
|
|
"user": r.user.username,
|
|
"resume_id": r.resume.id,
|
|
"reason": r.reason,
|
|
"created_at": r.created_at,
|
|
}
|
|
for r in requests
|
|
]
|
|
|
|
return {"success": True, "items": data}
|
|
|
|
|
|
@resume_authorize_router.post("/approve", auth=jwt_auth, summary="审批简历详情[分]", description="分管理审批某个用户的简历查看申请")
|
|
@manager_required
|
|
def approve_resume_request(request, request_id: int = Query(...), approve: bool = Query(...)):
|
|
req = get_object_or_404(ResumeDetailAccessRequest, id=request_id)
|
|
|
|
if req.resume.source not in request.user.managed_websites.all():
|
|
return {"success": False, "message": "无权审批该申请"}
|
|
|
|
req.status = "approved" if approve else "rejected"
|
|
req.save()
|
|
|
|
return {"success": True, "message": f"已{'通过' if approve else '拒绝'}对简历 {req.resume.id} 的访问申请"}
|
|
|
|
|
|
@resume_authorize_router.get("/history", auth=jwt_auth, summary="我的简历申请记录[普]", description="普通用户查看自己申请的简历详情访问记录")
|
|
@login_required
|
|
def my_resume_request_history(request):
|
|
user = request.user
|
|
if not user.is_user():
|
|
return {"success": False, "message": "仅普通用户可查看"}
|
|
|
|
records = ResumeDetailAccessRequest.objects.filter(user=user).order_by("-created_at")
|
|
|
|
data = [
|
|
{
|
|
"resume_id": r.resume.id,
|
|
"reason": r.reason,
|
|
"status": r.status,
|
|
"created_at": r.created_at,
|
|
}
|
|
for r in records
|
|
]
|
|
|
|
return {"success": True, "items": data}
|
|
|
|
|
|
@resume_authorize_router.post("/manual-authorize", auth=jwt_auth, summary="手动授权简历详情[分]", description="分管理跳过申请流程,直接授权某用户查看指定简历")
|
|
@manager_required
|
|
def manually_authorize_resume(request, user_id: int = Query(...), resume_id: int = Query(...)):
|
|
user = get_object_or_404(User, id=user_id)
|
|
resume = get_object_or_404(ResumeDetail, id=resume_id)
|
|
|
|
if not user.is_user():
|
|
return {"success": False, "message": "仅能授权给普通用户"}
|
|
|
|
if resume.source not in request.user.managed_websites.all():
|
|
return {"success": False, "message": "无权授权该简历"}
|
|
|
|
record, created = ResumeDetailAccessRequest.objects.get_or_create(
|
|
user=user,
|
|
resume=resume,
|
|
defaults={"status": "approved", "reason": "由分管理手动授权"}
|
|
)
|
|
|
|
if not created:
|
|
record.status = "approved"
|
|
record.save()
|
|
|
|
return {"success": True, "message": f"已手动授权 {user.username} 访问简历 {resume.id}"}
|
|
|
|
|
|
@resume_authorize_router.get("/granted", auth=jwt_auth, summary="我已获授权的简历ID[普]", description="普通用户查看当前已被授权访问的简历ID列表")
|
|
@login_required
|
|
def list_granted_resume_ids(request):
|
|
user = request.user
|
|
if not user.is_user():
|
|
return {"success": False, "message": "仅普通用户可访问"}
|
|
|
|
ids = ResumeDetailAccessRequest.objects.filter(
|
|
user=user,
|
|
status="approved"
|
|
).values_list("resume_id", flat=True)
|
|
|
|
return {"success": True, "resume_ids": list(ids)} |