fix: course/program email information issues (#29884)
dynamically render course/program information in braze email template VAN-858
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user