Files
edx-platform/lms/djangoapps/support/rest_api/serializers.py
Pandi Ganesh b5bcb37c5a feat: API to manage course team roles across multiple courses (#36990)
* feat: API to fetch course-roles mapping by user and org

* fix: added docstring and resolve pylint issues

* feat: support bulk course team role updates via PUT API

* fix: refactor APIs based on user permissions

* chore: improve Swagger schema for course_team endpoints

* fix: refactor GET and PUT api code

* fix: apply pylint rules and optimize code

* fix: resolve test cases for supoort apis

* fix: change url path
2025-07-29 11:33:09 +05:30

48 lines
1.4 KiB
Python

"""
Serializers for use in the support app.
"""
from datetime import datetime
import pytz
from rest_framework import serializers
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
class CourseTeamManageSerializer(serializers.ModelSerializer):
"""Serializer for course team management context data"""
role = serializers.SerializerMethodField()
status = serializers.SerializerMethodField()
class Meta:
model = CourseOverview
fields = ("id", "display_name", "role", "status")
def get_role(self, obj):
course_role_map = self.context.get("course_role_map", {})
return course_role_map.get(str(obj.id))
def get_status(self, obj):
"""
Determine if the course is active or archived based on end date.
Returns 'active' if course end is null or in the future, 'archived' otherwise.
"""
if obj.end is None or obj.end >= datetime.now().replace(tzinfo=pytz.UTC):
return "active"
return "archived"
def to_representation(self, instance):
data = super().to_representation(instance)
course_key = instance.id
return {
"course_id": str(course_key),
"course_name": data["display_name"],
"role": data["role"],
"status": data["status"],
"org": course_key.org,
"run": course_key.run,
"number": course_key.course,
}