Use page id for feedbacks, filter by course session id

This commit is contained in:
Christian Cueni 2023-08-14 19:33:41 +02:00
parent 5e9617c9b0
commit 6195c9d32a
11 changed files with 25 additions and 27 deletions

View File

@ -111,7 +111,7 @@ const sendFeedback = () => {
proficiency,
would_recommend: wouldRecommend,
},
page: props.page.translation_key,
page: props.page.id,
course_session: courseSession.id,
});
const variables = reactive({

View File

@ -65,7 +65,7 @@ function makeSummary(
const props = defineProps<{
selctedCircles: string[];
circles: Circle[];
courseId: number;
courseSessionId: number;
url: string;
}>();
@ -73,7 +73,7 @@ const feedbackSummary = ref<FeedbackDisplaySummary[]>([]);
let feedbackData: FeedbackSummary[] = [];
onMounted(async () => {
feedbackData = await itGet(`/api/core/feedback/${props.courseId}/summary`);
feedbackData = await itGet(`/api/core/feedback/${props.courseSessionId}/summary`);
feedbackSummary.value = makeSummary(
feedbackData,
props.circles,

View File

@ -528,7 +528,7 @@ export type SendFeedbackInput = {
clientMutationId?: InputMaybe<Scalars['String']['input']>;
course_session: Scalars['Int']['input'];
data?: InputMaybe<Scalars['GenericScalar']['input']>;
page: Scalars['String']['input'];
page: Scalars['Int']['input'];
};
export type SendFeedbackPayload = {

View File

@ -467,7 +467,7 @@ type ErrorType {
}
input SendFeedbackInput {
page: String!
page: Int!
course_session: Int!
data: GenericScalar
clientMutationId: String

View File

@ -149,7 +149,7 @@ const feedbackData = reactive<FeedbackData>({ amount: 0, questions: {} });
onMounted(async () => {
log.debug("FeedbackPage mounted");
const data = await itGet(
`/api/core/feedback/${courseSession.value.course.id}/${props.circleId}`
`/api/core/feedback/${courseSession.value.id}/${props.circleId}`
);
Object.assign(feedbackData, data);
});

View File

@ -23,7 +23,7 @@ const numFeedbacks = computed(() => {
onMounted(async () => {
const data = await itGet(
`/api/core/feedback/${props.courseSession.course.id}/${props.circleId}/`
`/api/core/feedback/${props.courseSession.id}/${props.circleId}/`
);
completeFeedbacks.value = data.amount;
});

View File

@ -136,10 +136,10 @@ urlpatterns = [
name='file_upload_local'),
# feedback
path(r'api/core/feedback/<str:course_id>/summary/', get_expert_feedbacks_for_course,
path(r'api/core/feedback/<str:course_session_id>/summary/', get_expert_feedbacks_for_course,
name='feedback_summary'),
path(r'api/core/feedback/<str:course_id>/<str:circle_id>/', get_feedback_for_circle,
path(r'api/core/feedback/<str:course_session_id>/<str:circle_id>/', get_feedback_for_circle,
name='feedback_for_circle'),
path("server/graphql/",

View File

@ -1,5 +1,5 @@
import structlog
from graphene import ClientIDMutation, Field, Int, List, String
from graphene import ClientIDMutation, Field, Int, List
from graphene.types.generic import GenericScalar
from graphene_django.types import ErrorType
@ -20,19 +20,17 @@ class SendFeedback(ClientIDMutation):
)
class Input:
page = String(required=True)
page = Int(required=True)
course_session = Int(required=True)
data = GenericScalar()
@classmethod
def mutate_and_get_payload(cls, _, info, **input):
page_key = input["page"]
page_id = input["page"]
course_session_id = input["course_session"]
logger.info("creating feedback")
learning_content = Page.objects.get(
translation_key=page_key, locale__language_code="de-CH"
)
learning_content = Page.objects.get(id=page_id)
circle = learning_content.get_parent().specific
course_session = CourseSession.objects.get(id=course_session_id)
data = input.get("data", {})

View File

@ -15,7 +15,7 @@ class CourseFeedbackSerializer(serializers.Serializer):
satisfaction = FeedbackIntegerField()
goal_attainment = FeedbackIntegerField()
proficiency = serializers.IntegerField(required=False, allow_null=True)
preparation_task_clarity = serializers.BooleanField()
preparation_task_clarity = serializers.BooleanField(required=False, allow_null=True)
materials_rating = FeedbackIntegerField()
instructor_competence = FeedbackIntegerField()
instructor_respect = FeedbackIntegerField()

View File

@ -126,7 +126,7 @@ class FeedbackSummaryApiTestCase(FeedbackApiBaseTestCase):
).save()
response = self.client.get(
f"/api/core/feedback/{csu.course_session.course.id}/summary/"
f"/api/core/feedback/{csu.course_session.id}/summary/"
)
self.assertEqual(response.status_code, 200)
@ -159,7 +159,7 @@ class FeedbackSummaryApiTestCase(FeedbackApiBaseTestCase):
).save()
response = self.client.get(
f"/api/core/feedback/{csu.course_session.course.id}/summary/"
f"/api/core/feedback/{csu.course_session.id}/summary/"
)
self.assertEqual(response.status_code, 200)
@ -180,7 +180,7 @@ class FeedbackSummaryApiTestCase(FeedbackApiBaseTestCase):
).save()
response = self.client.get(
f"/api/core/feedback/{csu.course_session.course.id}/summary/"
f"/api/core/feedback/{csu.course_session.id}/summary/"
)
self.assertEqual(response.status_code, 200)
@ -235,7 +235,7 @@ class FeedbackDetailApiTestCase(FeedbackApiBaseTestCase):
).save()
response = self.client.get(
f"/api/core/feedback/{csu.course_session.course.id}/{circle.id}/"
f"/api/core/feedback/{csu.course_session.id}/{circle.id}/"
)
self.maxDiff = None
@ -258,7 +258,7 @@ class FeedbackDetailApiTestCase(FeedbackApiBaseTestCase):
FeedbackResponseFactory(circle=circle, course_session=csu.course_session).save()
response = self.client.get(
f"/api/core/feedback/{csu.course_session.course.id}/{circle.id}/"
f"/api/core/feedback/{csu.course_session.id}/{circle.id}/"
)
self.assertEqual(response.status_code, 200)
@ -274,7 +274,7 @@ class FeedbackDetailApiTestCase(FeedbackApiBaseTestCase):
FeedbackResponseFactory(circle=circle, course_session=csu.course_session).save()
response = self.client.get(
f"/api/core/feedback/{csu.course_session.course.id}/{circle.id}/"
f"/api/core/feedback/{csu.course_session.id}/{circle.id}/"
)
self.assertEqual(response.status_code, 200)

View File

@ -23,9 +23,9 @@ FEEDBACK_FIELDS = [
@api_view(["GET"])
def get_expert_feedbacks_for_course(request, course_id):
def get_expert_feedbacks_for_course(request, course_session_id):
feedbacks = FeedbackResponse.objects.filter(
course_session__course_id=course_id, circle__expert__user=request.user
course_session__id=course_session_id, circle__expert__user=request.user
).order_by("circle_id")
circle_count = []
@ -43,9 +43,9 @@ def get_expert_feedbacks_for_course(request, course_id):
@api_view(["GET"])
def get_feedback_for_circle(request, course_id, circle_id):
def get_feedback_for_circle(request, course_session_id, circle_id):
feedbacks = FeedbackResponse.objects.filter(
course_session__course_id=course_id,
course_session__id=course_session_id,
circle__expert__user=request.user,
circle_id=circle_id,
).order_by("created_at")