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, proficiency,
would_recommend: wouldRecommend, would_recommend: wouldRecommend,
}, },
page: props.page.translation_key, page: props.page.id,
course_session: courseSession.id, course_session: courseSession.id,
}); });
const variables = reactive({ const variables = reactive({

View File

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

View File

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

View File

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

View File

@ -149,7 +149,7 @@ const feedbackData = reactive<FeedbackData>({ amount: 0, questions: {} });
onMounted(async () => { onMounted(async () => {
log.debug("FeedbackPage mounted"); log.debug("FeedbackPage mounted");
const data = await itGet( 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); Object.assign(feedbackData, data);
}); });

View File

@ -23,7 +23,7 @@ const numFeedbacks = computed(() => {
onMounted(async () => { onMounted(async () => {
const data = await itGet( 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; completeFeedbacks.value = data.amount;
}); });

View File

@ -136,10 +136,10 @@ urlpatterns = [
name='file_upload_local'), name='file_upload_local'),
# feedback # 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'), 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'), name='feedback_for_circle'),
path("server/graphql/", path("server/graphql/",

View File

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

View File

@ -15,7 +15,7 @@ class CourseFeedbackSerializer(serializers.Serializer):
satisfaction = FeedbackIntegerField() satisfaction = FeedbackIntegerField()
goal_attainment = FeedbackIntegerField() goal_attainment = FeedbackIntegerField()
proficiency = serializers.IntegerField(required=False, allow_null=True) 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() materials_rating = FeedbackIntegerField()
instructor_competence = FeedbackIntegerField() instructor_competence = FeedbackIntegerField()
instructor_respect = FeedbackIntegerField() instructor_respect = FeedbackIntegerField()

View File

@ -126,7 +126,7 @@ class FeedbackSummaryApiTestCase(FeedbackApiBaseTestCase):
).save() ).save()
response = self.client.get( 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) self.assertEqual(response.status_code, 200)
@ -159,7 +159,7 @@ class FeedbackSummaryApiTestCase(FeedbackApiBaseTestCase):
).save() ).save()
response = self.client.get( 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) self.assertEqual(response.status_code, 200)
@ -180,7 +180,7 @@ class FeedbackSummaryApiTestCase(FeedbackApiBaseTestCase):
).save() ).save()
response = self.client.get( 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) self.assertEqual(response.status_code, 200)
@ -235,7 +235,7 @@ class FeedbackDetailApiTestCase(FeedbackApiBaseTestCase):
).save() ).save()
response = self.client.get( 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 self.maxDiff = None
@ -258,7 +258,7 @@ class FeedbackDetailApiTestCase(FeedbackApiBaseTestCase):
FeedbackResponseFactory(circle=circle, course_session=csu.course_session).save() FeedbackResponseFactory(circle=circle, course_session=csu.course_session).save()
response = self.client.get( 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) self.assertEqual(response.status_code, 200)
@ -274,7 +274,7 @@ class FeedbackDetailApiTestCase(FeedbackApiBaseTestCase):
FeedbackResponseFactory(circle=circle, course_session=csu.course_session).save() FeedbackResponseFactory(circle=circle, course_session=csu.course_session).save()
response = self.client.get( 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) self.assertEqual(response.status_code, 200)

View File

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