Use page id for feedbacks, filter by course session id
This commit is contained in:
parent
5e9617c9b0
commit
6195c9d32a
|
|
@ -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({
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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 = {
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -492,4 +492,4 @@ enum AssignmentCompletionStatus {
|
||||||
SUBMITTED
|
SUBMITTED
|
||||||
EVALUATION_IN_PROGRESS
|
EVALUATION_IN_PROGRESS
|
||||||
EVALUATION_SUBMITTED
|
EVALUATION_SUBMITTED
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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/",
|
||||||
|
|
|
||||||
|
|
@ -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", {})
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue