diff --git a/lms/djangoapps/save_for_later/api/v1/views.py b/lms/djangoapps/save_for_later/api/v1/views.py index 970ab1a487..82a7f0c3b2 100644 --- a/lms/djangoapps/save_for_later/api/v1/views.py +++ b/lms/djangoapps/save_for_later/api/v1/views.py @@ -50,7 +50,10 @@ class CourseSaveForLaterApiView(APIView): "email": "test@edx.org", "course_id": "course-v1:edX+DemoX+2021", "marketing_url": "https://test.com", - "org_img_url": "https://test.com/logo.png" + "org_img_url": "https://test.com/logo.png", + "weeks_to_complete": 7, + "min_effort": 4, + "max_effort": 5, } """ @@ -80,8 +83,6 @@ class CourseSaveForLaterApiView(APIView): ) course_data = { 'course': course, - 'marketing_url': data.get('marketing_url'), - 'org_img_url': data.get('org_img_url'), 'type': 'course', } if send_email(request, email, course_data): @@ -112,8 +113,7 @@ class ProgramSaveForLaterApiView(APIView): { "email": "test@edx.org", - "uuid": "587f6abe-bfa4-4125-9fbe-4789bf3f97f1" - + "program_uuid": "587f6abe-bfa4-4125-9fbe-4789bf3f97f1" } """ user = request.user @@ -127,6 +127,9 @@ class ProgramSaveForLaterApiView(APIView): if get_email_validation_error(email): return Response({'error_code': 'incorrect-email'}, status=400) + if not program_uuid: + return Response({'error_code': 'program-uuid-missing'}, status=400) + program = get_programs(uuid=program_uuid) SavedProgram.objects.update_or_create( user_id=user.id, diff --git a/lms/djangoapps/save_for_later/helper.py b/lms/djangoapps/save_for_later/helper.py index 625b1b3642..7ff0975e46 100644 --- a/lms/djangoapps/save_for_later/helper.py +++ b/lms/djangoapps/save_for_later/helper.py @@ -15,7 +15,17 @@ log = logging.getLogger(__name__) USER_SENT_EMAIL_SAVE_FOR_LATER = 'edx.bi.user.saveforlater.email.sent' -def _get_event_properties(data): +def _get_program_pacing(course_runs): + """ + get pacing type of published course run of course for program + """ + + pacing = [course_run.get('pacing_type') if course_run.get('status') == 'published' + else '' for course_run in course_runs][0] + return 'Self-paced' if pacing == 'self_paced' else 'Instructor-led' + + +def _get_event_properties(request, data): """ set event properties for course and program which are required in braze email template """ @@ -27,6 +37,7 @@ def _get_event_properties(data): if data.get('type') == 'course': course = data.get('course') + data = request.data org_img_url = data.get('org_img_url') marketing_url = data.get('marketing_url') event_properties.update({ @@ -40,12 +51,17 @@ def _get_event_properties(data): 'view_course_url': marketing_url + '?save_for_later=true' if marketing_url else '#', 'display_name': course.display_name, 'short_description': course.short_description, + 'weeks_to_complete': data.get('weeks_to_complete'), + 'min_effort': data.get('min_effort'), + 'max_effort': data.get('max_effort'), + 'pacing_type': 'Self-paced' if course.self_paced else 'Instructor-led', 'type': 'course', } }) if data.get('type') == 'program': program = data.get('program') + price = int(program.get('price_ranges')[0].get('total')) event_properties.update({ 'properties': { 'program_image_url': program.get('card_image_url'), @@ -56,6 +72,12 @@ def _get_event_properties(data): 'title': program.get('title'), 'education_level': program.get('type'), 'total_courses': len(program.get('courses')) if program.get('courses') else 0, + 'weeks_to_complete': program.get('weeks_to_complete'), + 'min_effort': program.get('min_hours_effort_per_week'), + 'max_effort': program.get('max_hours_effort_per_week'), + 'pacing_type': _get_program_pacing(program.get('courses')[0].get('course_runs')), + 'price': f'${price} USD', + 'registered': bool(program.get('type') in ['MicroMasters', 'MicroBachelors']), 'type': 'program', } }) @@ -66,7 +88,7 @@ def send_email(request, email, data): """ Send email through Braze """ - event_properties = _get_event_properties(data) + event_properties = _get_event_properties(request, data) braze_client = BrazeClient( api_key=settings.EDX_BRAZE_API_KEY, api_url=settings.EDX_BRAZE_API_SERVER,