chore: add _id field

This commit is contained in:
Reto Aebersold 2023-10-25 19:10:04 +02:00
parent 0f80fe5104
commit 0ecb03275e
8 changed files with 92 additions and 25 deletions

View File

@ -22,7 +22,7 @@ const documents = {
"\n query courseSessionDetail($courseSessionId: ID!) {\n course_session(id: $courseSessionId) {\n id\n title\n course {\n id\n title\n slug\n }\n users {\n id\n user_id\n first_name\n last_name\n email\n avatar_url\n role\n circles {\n id\n title\n slug\n }\n }\n attendance_courses {\n id\n location\n trainer\n due_date {\n id\n start\n end\n }\n learning_content_id\n learning_content {\n id\n title\n circle {\n id\n title\n slug\n }\n }\n }\n assignments {\n id\n submission_deadline {\n id\n start\n }\n evaluation_deadline {\n id\n start\n }\n learning_content {\n id\n title\n content_assignment {\n id\n title\n assignment_type\n }\n }\n }\n edoniq_tests {\n id\n deadline {\n id\n start\n end\n }\n learning_content {\n id\n title\n content_assignment {\n id\n title\n assignment_type\n }\n }\n }\n }\n }\n": types.CourseSessionDetailDocument, "\n query courseSessionDetail($courseSessionId: ID!) {\n course_session(id: $courseSessionId) {\n id\n title\n course {\n id\n title\n slug\n }\n users {\n id\n user_id\n first_name\n last_name\n email\n avatar_url\n role\n circles {\n id\n title\n slug\n }\n }\n attendance_courses {\n id\n location\n trainer\n due_date {\n id\n start\n end\n }\n learning_content_id\n learning_content {\n id\n title\n circle {\n id\n title\n slug\n }\n }\n }\n assignments {\n id\n submission_deadline {\n id\n start\n }\n evaluation_deadline {\n id\n start\n }\n learning_content {\n id\n title\n content_assignment {\n id\n title\n assignment_type\n }\n }\n }\n edoniq_tests {\n id\n deadline {\n id\n start\n end\n }\n learning_content {\n id\n title\n content_assignment {\n id\n title\n assignment_type\n }\n }\n }\n }\n }\n": types.CourseSessionDetailDocument,
"\n query courseQuery($slug: String!) {\n course(slug: $slug) {\n id\n title\n slug\n category_name\n action_competences {\n competence_id\n ...CoursePageFields\n performance_criteria {\n competence_id\n learning_unit {\n id\n slug\n evaluate_url\n }\n ...CoursePageFields\n }\n }\n learning_path {\n ...CoursePageFields\n topics {\n is_visible\n ...CoursePageFields\n circles {\n description\n goals\n ...CoursePageFields\n learning_sequences {\n icon\n ...CoursePageFields\n learning_units {\n evaluate_url\n ...CoursePageFields\n performance_criteria {\n ...CoursePageFields\n }\n learning_contents {\n can_user_self_toggle_course_completion\n content_url\n minutes\n description\n ...CoursePageFields\n ... on LearningContentAssignmentObjectType {\n assignment_type\n content_assignment {\n id\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n ... on LearningContentEdoniqTestObjectType {\n checkbox_text\n has_extended_time_test\n content_assignment {\n id\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n ... on LearningContentRichTextObjectType {\n text\n }\n }\n }\n }\n }\n }\n }\n }\n }\n": types.CourseQueryDocument, "\n query courseQuery($slug: String!) {\n course(slug: $slug) {\n id\n title\n slug\n category_name\n action_competences {\n competence_id\n ...CoursePageFields\n performance_criteria {\n competence_id\n learning_unit {\n id\n slug\n evaluate_url\n }\n ...CoursePageFields\n }\n }\n learning_path {\n ...CoursePageFields\n topics {\n is_visible\n ...CoursePageFields\n circles {\n description\n goals\n ...CoursePageFields\n learning_sequences {\n icon\n ...CoursePageFields\n learning_units {\n evaluate_url\n ...CoursePageFields\n performance_criteria {\n ...CoursePageFields\n }\n learning_contents {\n can_user_self_toggle_course_completion\n content_url\n minutes\n description\n ...CoursePageFields\n ... on LearningContentAssignmentObjectType {\n assignment_type\n content_assignment {\n id\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n ... on LearningContentEdoniqTestObjectType {\n checkbox_text\n has_extended_time_test\n content_assignment {\n id\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n ... on LearningContentRichTextObjectType {\n text\n }\n }\n }\n }\n }\n }\n }\n }\n }\n": types.CourseQueryDocument,
"\n query dashboardConfig {\n dashboard_config {\n id\n slug\n name\n dashboard_type\n }\n }\n": types.DashboardConfigDocument, "\n query dashboardConfig {\n dashboard_config {\n id\n slug\n name\n dashboard_type\n }\n }\n": types.DashboardConfigDocument,
"\n query dashboardProgress($courseId: ID!) {\n course_progress(course_id: $courseId) {\n id\n session_to_continue_id\n }\n }\n": types.DashboardProgressDocument, "\n query dashboardProgress($courseId: ID!) {\n course_progress(course_id: $courseId) {\n id\n session_to_continue_id\n competence {\n _id\n total_count\n success_count\n fail_count\n }\n assignment {\n _id\n total_count\n points_max_count\n points_achieved_count\n }\n }\n }\n": types.DashboardProgressDocument,
"\n mutation SendFeedbackMutation(\n $courseSessionId: ID!\n $learningContentId: ID!\n $data: GenericScalar!\n $submitted: Boolean\n ) {\n send_feedback(\n course_session_id: $courseSessionId\n learning_content_page_id: $learningContentId\n data: $data\n submitted: $submitted\n ) {\n feedback_response {\n id\n data\n submitted\n }\n errors {\n field\n messages\n }\n }\n }\n": types.SendFeedbackMutationDocument, "\n mutation SendFeedbackMutation(\n $courseSessionId: ID!\n $learningContentId: ID!\n $data: GenericScalar!\n $submitted: Boolean\n ) {\n send_feedback(\n course_session_id: $courseSessionId\n learning_content_page_id: $learningContentId\n data: $data\n submitted: $submitted\n ) {\n feedback_response {\n id\n data\n submitted\n }\n errors {\n field\n messages\n }\n }\n }\n": types.SendFeedbackMutationDocument,
}; };
@ -79,7 +79,7 @@ export function graphql(source: "\n query dashboardConfig {\n dashboard_conf
/** /**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/ */
export function graphql(source: "\n query dashboardProgress($courseId: ID!) {\n course_progress(course_id: $courseId) {\n id\n session_to_continue_id\n }\n }\n"): (typeof documents)["\n query dashboardProgress($courseId: ID!) {\n course_progress(course_id: $courseId) {\n id\n session_to_continue_id\n }\n }\n"]; export function graphql(source: "\n query dashboardProgress($courseId: ID!) {\n course_progress(course_id: $courseId) {\n id\n session_to_continue_id\n competence {\n _id\n total_count\n success_count\n fail_count\n }\n assignment {\n _id\n total_count\n points_max_count\n points_achieved_count\n }\n }\n }\n"): (typeof documents)["\n query dashboardProgress($courseId: ID!) {\n course_progress(course_id: $courseId) {\n id\n session_to_continue_id\n competence {\n _id\n total_count\n success_count\n fail_count\n }\n assignment {\n _id\n total_count\n points_max_count\n points_achieved_count\n }\n }\n }\n"];
/** /**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/ */

File diff suppressed because one or more lines are too long

View File

@ -25,6 +25,7 @@ type Query {
type CourseStatisticsType { type CourseStatisticsType {
id: ID! id: ID!
course_title: String! course_title: String!
course_slug: String!
course_session_properties: CourseSessionProperties! course_session_properties: CourseSessionProperties!
course_session_selection_ids: [ID]! course_session_selection_ids: [ID]!
course_session_selection_metrics: CourseSessionsSelectionMetrics! course_session_selection_metrics: CourseSessionsSelectionMetrics!
@ -69,7 +70,7 @@ type PresenceRecord {
due_date: String! due_date: String!
participants_present: Int! participants_present: Int!
participants_total: Int! participants_total: Int!
cockpit_url: String! details_url: String!
} }
type AttendanceSummary { type AttendanceSummary {
@ -88,6 +89,7 @@ type FeedbackRecord {
circle_id: ID! circle_id: ID!
satisfaction_average: Float! satisfaction_average: Float!
satisfaction_max: Int! satisfaction_max: Int!
details_url: String!
} }
type FeedbackSummary { type FeedbackSummary {
@ -144,6 +146,7 @@ type CompetencePerformance {
circle_id: ID! circle_id: ID!
success_count: Int! success_count: Int!
fail_count: Int! fail_count: Int!
details_url: String!
} }
type CompletionSummary { type CompletionSummary {
@ -153,7 +156,23 @@ type CompletionSummary {
type CourseProgressType { type CourseProgressType {
id: ID! id: ID!
session_to_continue_id: ID! session_to_continue_id: ID
competence: ProgressDashboardCompetenceType!
assignment: ProgressDashboardAssignmentType!
}
type ProgressDashboardCompetenceType {
_id: ID!
total_count: Int!
success_count: Int!
fail_count: Int!
}
type ProgressDashboardAssignmentType {
_id: ID!
total_count: Int!
points_max_count: Int!
points_achieved_count: Int!
} }
type DashboardConfigType { type DashboardConfigType {

View File

@ -73,6 +73,8 @@ export const LearnpathLearningContentAssignmentAssignmentTypeChoices = "Learnpat
export const Mutation = "Mutation"; export const Mutation = "Mutation";
export const PerformanceCriteriaObjectType = "PerformanceCriteriaObjectType"; export const PerformanceCriteriaObjectType = "PerformanceCriteriaObjectType";
export const PresenceRecord = "PresenceRecord"; export const PresenceRecord = "PresenceRecord";
export const ProgressDashboardAssignmentType = "ProgressDashboardAssignmentType";
export const ProgressDashboardCompetenceType = "ProgressDashboardCompetenceType";
export const Query = "Query"; export const Query = "Query";
export const SendFeedbackMutation = "SendFeedbackMutation"; export const SendFeedbackMutation = "SendFeedbackMutation";
export const String = "String"; export const String = "String";

View File

@ -285,6 +285,18 @@ export const DASHBOARD_COURSE_SESSION_PROGRESS = graphql(`
course_progress(course_id: $courseId) { course_progress(course_id: $courseId) {
id id
session_to_continue_id session_to_continue_id
competence {
_id
total_count
success_count
fail_count
}
assignment {
_id
total_count
points_max_count
points_achieved_count
}
} }
} }
`); `);

View File

@ -2,7 +2,10 @@ from typing import Dict, List, Set, Tuple
import graphene import graphene
from vbv_lernwelt.assignment.models import AssignmentCompletion, AssignmentCompletionStatus from vbv_lernwelt.assignment.models import (
AssignmentCompletion,
AssignmentCompletionStatus,
)
from vbv_lernwelt.core.admin import User from vbv_lernwelt.core.admin import User
from vbv_lernwelt.course.models import Course, CourseSession, CourseSessionUser from vbv_lernwelt.course.models import Course, CourseSession, CourseSessionUser
from vbv_lernwelt.course_session_group.models import CourseSessionGroup from vbv_lernwelt.course_session_group.models import CourseSessionGroup
@ -11,7 +14,9 @@ from vbv_lernwelt.dashboard.graphql.types.dashboard import (
CourseProgressType, CourseProgressType,
CourseStatisticsType, CourseStatisticsType,
DashboardConfigType, DashboardConfigType,
DashboardType, ProgressDashboardCompetenceType, ProgressDashboardAssignmentType, DashboardType,
ProgressDashboardAssignmentType,
ProgressDashboardCompetenceType,
) )
from vbv_lernwelt.iam.permissions import ( from vbv_lernwelt.iam.permissions import (
can_view_course_session, can_view_course_session,
@ -110,7 +115,7 @@ class DashboardQuery(graphene.ObjectType):
# competence # competence
_, success_total, fail_total = competences( _, success_total, fail_total = competences(
course_slug=str(course.slug), course_slug=str(course.slug),
course_session_selection_ids=course_session_for_user course_session_selection_ids=course_session_for_user,
) )
# assignment # assignment
@ -121,21 +126,27 @@ class DashboardQuery(graphene.ObjectType):
).values("evaluation_max_points", "evaluation_points") ).values("evaluation_max_points", "evaluation_points")
evaluation_results = list(evaluation_results) evaluation_results = list(evaluation_results)
points_max_count = sum([result.get("evaluation_max_points", 0) for result in evaluation_results]) points_max_count = sum(
points_achieved_count = sum([result.get("evaluation_points", 0) for result in evaluation_results]) [result.get("evaluation_max_points", 0) for result in evaluation_results]
)
points_achieved_count = sum(
[result.get("evaluation_points", 0) for result in evaluation_results]
)
return CourseProgressType( return CourseProgressType(
id=course_id, # noqa id=course_id, # noqa
session_to_continue_id=newest.id if newest else None, # noqa session_to_continue_id=newest.id if newest else None, # noqa
competence=ProgressDashboardCompetenceType( # noqa competence=ProgressDashboardCompetenceType( # noqa
total_count=success_total + fail_total, # noqa _id=course_id, # noqa
success_count=success_total, # noqa total_count=success_total + fail_total, # noqa
fail_count=fail_total, # noqa success_count=success_total, # noqa
fail_count=fail_total, # noqa
), ),
assignment=ProgressDashboardAssignmentType( # noqa assignment=ProgressDashboardAssignmentType( # noqa
total_count=len(evaluation_results), # noqa _id=course_id, # noqa
points_max_count=points_max_count, # noqa total_count=len(evaluation_results), # noqa
points_achieved_count=points_achieved_count, # noqa points_max_count=points_max_count, # noqa
points_achieved_count=points_achieved_count, # noqa
), ),
) )

View File

@ -56,12 +56,14 @@ class DashboardConfigType(graphene.ObjectType):
class ProgressDashboardCompetenceType(graphene.ObjectType): class ProgressDashboardCompetenceType(graphene.ObjectType):
_id = graphene.ID(required=True)
total_count = graphene.Int(required=True) total_count = graphene.Int(required=True)
success_count = graphene.Int(required=True) success_count = graphene.Int(required=True)
fail_count = graphene.Int(required=True) fail_count = graphene.Int(required=True)
class ProgressDashboardAssignmentType(graphene.ObjectType): class ProgressDashboardAssignmentType(graphene.ObjectType):
_id = graphene.ID(required=True)
total_count = graphene.Int(required=True) total_count = graphene.Int(required=True)
points_max_count = graphene.Int(required=True) points_max_count = graphene.Int(required=True)
points_achieved_count = graphene.Int(required=True) points_achieved_count = graphene.Int(required=True)

View File

@ -5,12 +5,12 @@ from vbv_lernwelt.course.models import CourseSessionUser
from vbv_lernwelt.dashboard.tests.graphql.utils import ( from vbv_lernwelt.dashboard.tests.graphql.utils import (
add_course_session_group_supervisor, add_course_session_group_supervisor,
add_course_session_user, add_course_session_user,
create_assignment,
create_assignment_completion,
create_course, create_course,
create_course_session, create_course_session,
create_course_session_group, create_course_session_group,
create_user, create_user,
create_assignment_completion,
create_assignment,
) )