import itertools import graphene from graphene import ObjectType from vbv_lernwelt.feedback.models import FeedbackResponse class FeedbackSummary(ObjectType): circle_id = graphene.Int() count = graphene.Int() class FeedbackForCourseQuery(object): course_feedback_summary = graphene.List( FeedbackSummary, course_id=graphene.Int(required=True) ) def resolve_course_feedback_summary(self, info, **kwargs): course_id = kwargs.get("course_id") user = info.context.user feedbacks = FeedbackResponse.objects.filter( course_session__course_id=course_id, circle__expert__user=user ).order_by("circle_id") summary = [] grouped_feedbacks = itertools.groupby(feedbacks, lambda x: x.circle_id) for key, feedbacks in grouped_feedbacks: summary.append( { "circle_id": key, "count": len(list(feedbacks)), } ) return summary