feat: added dumb review, formatted

This commit is contained in:
Андрей Сумин
2025-03-01 14:08:36 +03:00
parent eedcc8a525
commit eded5b729b
14 changed files with 191 additions and 57 deletions
+4 -5
View File
@@ -1,26 +1,25 @@
from abc import ABC
from typing import Optional
from django.http import HttpRequest
from django.shortcuts import get_object_or_404
from django.urls import resolve
from ninja.errors import AuthenticationError
from ninja.security import APIKeyQuery
from ninja.security.apikey import APIKeyBase
from apps.review.models import Reviewer
class APIKeyPath(APIKeyBase, ABC):
openapi_in: str = "path"
def _get_key(self, request: HttpRequest) -> Optional[str]:
def _get_key(self, request: HttpRequest) -> str | None:
func, args, kwargs = resolve(request.path)
return kwargs.get(self.param_name)
class ReviewerAuth(APIKeyPath):
param_name = "token"
def authenticate(self, request, token):
if not (reviewer := Reviewer.objects.filter(token=token).first()):
raise AuthenticationError
return reviewer
return reviewer
+8 -8
View File
@@ -1,8 +1,8 @@
from typing import List, Literal
from typing import Literal
from uuid import UUID
from django.http import HttpRequest
from ninja import Schema, ModelSchema
from ninja import ModelSchema, Schema
from apps.review.models import Reviewer
from apps.task.models import CompetetionTaskSumbission
@@ -11,6 +11,7 @@ from apps.task.models import CompetetionTaskSumbission
class PingOut(Schema):
status: str = "ok"
class ReviewerOut(ModelSchema):
id: UUID
@@ -18,20 +19,19 @@ class ReviewerOut(ModelSchema):
model = Reviewer
exclude = ("token",)
class SubmissionOut(ModelSchema):
id: UUID
status: Literal["sent", "checking", "checked"]
class Meta:
model = CompetetionTaskSumbission
exclude = (
"user",
)
exclude = ("user",)
class SubmissionsOut(Schema):
submissions: list[SubmissionOut] = []
@staticmethod
def resolve_submissions(self, context: HttpRequest) -> List[SubmissionOut]:
print(CompetetionTaskSumbission.objects.all())
return list(CompetetionTaskSumbission.objects.all())
def resolve_submissions(self, context: HttpRequest) -> list[SubmissionOut]:
return list(CompetetionTaskSumbission.objects.all())
+8 -10
View File
@@ -3,19 +3,20 @@ from http import HTTPStatus as status
from django.http import HttpRequest
from ninja import Router
from api.v1.review import schemas
from api.v1 import schemas as global_schemas
from api.v1.review import schemas
router = Router(tags=["review"])
@router.get(
"{token}/tasks",
"{token}/submissions",
response={
status.OK: schemas.SubmissionsOut,
},
description="Список отправок, на проверку которых назначен ревьюер"
)
def ping(request: HttpRequest, token) -> tuple[status, schemas.SubmissionsOut]:
def get_submissions(request: HttpRequest, token) -> tuple[status, schemas.SubmissionsOut]:
return status.OK, schemas.SubmissionsOut()
@@ -23,12 +24,9 @@ def ping(request: HttpRequest, token) -> tuple[status, schemas.SubmissionsOut]:
"{token}",
response={
status.OK: schemas.ReviewerOut,
status.UNAUTHORIZED: global_schemas.UnauthorizedError
status.UNAUTHORIZED: global_schemas.UnauthorizedError,
},
description="token есть и в сваггер авторизации, но оно не работает, не верьте. подставляйте токен вручную в query"
description="token есть и в сваггер авторизации, но оно не работает, не верьте. подставляйте токен вручную в query",
)
def get_reviewer(
request: HttpRequest,
token: str
):
return status.OK, request.auth
def get_reviewer_profile(request: HttpRequest, token: str):
return status.OK, request.auth