From dc195effc61e6efa7de8029860ba54f89ea77a22 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 26 Jun 2023 11:49:16 +0100 Subject: [PATCH] start physics and sbas api --- physics/api.py | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++ sbas/api.py | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 physics/api.py create mode 100644 sbas/api.py diff --git a/physics/api.py b/physics/api.py new file mode 100644 index 00000000..f46306a1 --- /dev/null +++ b/physics/api.py @@ -0,0 +1,54 @@ +from typing import List +from django.shortcuts import get_object_or_404 +from ninja import ModelSchema, Router +from .models import Question, Exam + +#from .decorators import user_is_author_or_rapid_checker +from django.core.exceptions import PermissionDenied + +from generic.decorators import check_user_in_group +from generic.constants import Group + +from ninja.security import django_auth + +router = Router() + + +class QuestionSchema(ModelSchema): + class Config: + model = Question + + #model_fields = ["question", "history", "feedback", "normal", "laterality"] + model_fields = "__all__" + + #model_exclude = ["answers"] + +class ExamSchema(ModelSchema): + class Config: + model = Exam + + model_fields = ["id", "name", "active", "publish_results"] + +@router.get('/') +def list_questions(request): + return [ + {"id": e.id, "normal": e.normal} + for e in Question.objects.all() + ] + +@router.get('/question/{question_id}', response=QuestionSchema) +@check_user_in_group(Group.cid_user_manager) +def get_question_details(request, question_id: int): + + rapid = get_object_or_404(Question, id=question_id) + return rapid + + +@router.get('/user_exams', response=List[ExamSchema], url_name="physics_user_exams") +def user_exams(request): + """Returns a list of exams that the user has access to""" + user = request.user + if user.groups.filter(name="physics_checker").exists(): + return Exam.objects.filter(archive=False).order_by('name') + + return Exam.objects.filter(author__id=user.id, archive=False).order_by('name') \ No newline at end of file diff --git a/sbas/api.py b/sbas/api.py new file mode 100644 index 00000000..2da50baf --- /dev/null +++ b/sbas/api.py @@ -0,0 +1,54 @@ +from typing import List +from django.shortcuts import get_object_or_404 +from ninja import ModelSchema, Router +from .models import Question, Exam + +#from .decorators import user_is_author_or_rapid_checker +from django.core.exceptions import PermissionDenied + +from generic.decorators import check_user_in_group +from generic.constants import Group + +from ninja.security import django_auth + +router = Router() + + +class QuestionSchema(ModelSchema): + class Config: + model = Question + + #model_fields = ["question", "history", "feedback", "normal", "laterality"] + model_fields = "__all__" + + #model_exclude = ["answers"] + +class ExamSchema(ModelSchema): + class Config: + model = Exam + + model_fields = ["id", "name", "active", "publish_results"] + +@router.get('/') +def list_questions(request): + return [ + {"id": e.id, "normal": e.normal} + for e in Question.objects.all() + ] + +@router.get('/question/{question_id}', response=QuestionSchema) +@check_user_in_group(Group.cid_user_manager) +def get_question_details(request, question_id: int): + + rapid = get_object_or_404(Question, id=question_id) + return rapid + + +@router.get('/user_exams', response=List[ExamSchema], url_name="sbas_user_exams") +def user_exams(request): + """Returns a list of exams that the user has access to""" + user = request.user + if user.groups.filter(name="sbas_checker").exists(): + return Exam.objects.filter(archive=False).order_by('name') + + return Exam.objects.filter(author__id=user.id, archive=False).order_by('name') \ No newline at end of file