fix: course/program email information issues (#29884)

dynamically render course/program information in braze email template
VAN-858
This commit is contained in:
Mubbshar Anwar
2022-02-11 11:40:45 +05:00
committed by GitHub
parent 3a376b3d5f
commit efa0f4c644
2 changed files with 32 additions and 7 deletions

View File

@@ -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,

View File

@@ -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,