def add_instructional_designer()

in microservices/lms/src/routes/course_template.py [0:0]


def add_instructional_designer(
    course_template_id: str, request: Request,
    instructional_designer: AddInstructionalDesigner):
  """_summary_

	Args:
			course_template_id (str): _description_
			request (Request): _description_
			instructional_designer (AddInstructionalDesigner): _description_

	Returns:
			_type_: _description_
	"""
  try:
    headers = {"Authorization": request.headers.get("Authorization")}
    course_template = CourseTemplate.find_by_id(course_template_id)
    instructional_designer = instructional_designer.email
    if not check_instructional_designer_can_enroll(instructional_designer,
                                                   headers, course_template):
      raise Conflict(
          f"Instructional Designer {instructional_designer} is already" +
          f" exists in this Course template {course_template.id}")
    invitation_object = classroom_crud.invite_user(
        course_template.classroom_id, instructional_designer, "TEACHER")
    classroom_crud.acceept_invite(invitation_object["id"],
                                    instructional_designer)
    user_profile = classroom_crud.\
      get_user_profile_information(instructional_designer)

    data = {
        "first_name": user_profile["name"]["givenName"],
        "last_name": user_profile["name"]["familyName"],
        "email": instructional_designer,
        "user_type": "faculty",
        "user_groups": [],
        "status": "active",
        "is_registered": True,
        "failed_login_attempts_count": 0,
        "access_api_docs": False,
        "gaia_id": user_profile["id"],
        "photo_url": user_profile["photoUrl"]
    }
    status = "active"
    user_dict = common_service.create_teacher(headers, data)
    course_template_enrollment = CourseTemplateEnrollmentMapping()
    course_template_enrollment.course_template = course_template
    course_template_enrollment.user = User.find_by_user_id(
        user_dict["user_id"])
    course_template_enrollment.status = status
    course_template_enrollment.role = "faculty"
    course_template_enrollment.save()
    list_enrollment_mapping = CourseTemplateEnrollmentMapping\
      .fetch_all_by_course_template(course_template.key)
    list_instructional_designers = [
        i.user.email for i in list_enrollment_mapping
    ]
    print("list of instructional designer")
    rows = [{
        "courseTemplateId": course_template_id,
        "classroomId": course_template.classroom_id,
        "name": course_template.name,
        "description": course_template.description,
        "timestamp": datetime.datetime.utcnow(),
        "instructionalDesigners": list_instructional_designers
    }]
    insert_rows_to_bq(rows=rows,
                      dataset=BQ_DATASET,
                      table_name=BQ_TABLE_DICT["BQ_COLL_COURSETEMPLATE_TABLE"])
    return {
        "message": ("Successfully Added the Instructional " +
                    f"Designer with email {instructional_designer}"),
        "data":
        course_template_enrollment_instructional_designer_model(
            course_template_enrollment)
    }
  except HttpError as hte:
    Logger.error(hte)
    raise ClassroomHttpException(status_code=hte.resp.status,
                                 message=str(hte)) from hte
  except Conflict as conflict:
    Logger.error(conflict)
    err = traceback.format_exc().replace("\n", " ")
    Logger.error(err)
    raise Conflict(str(conflict)) from conflict
  except ResourceNotFoundException as re:
    raise ResourceNotFound(str(re)) from re
  except Exception as e:
    Logger.error(e)
    raise InternalServerError(str(e)) from e