Implemented the post email notifications endpoint for v2

This commit is contained in:
Rebecca Law
2016-11-14 13:56:09 +00:00
parent eb17822564
commit b0ee09a9f6
7 changed files with 262 additions and 28 deletions

View File

@@ -1,9 +1,9 @@
from flask import request, jsonify, current_app
from flask import request, jsonify
from sqlalchemy.orm.exc import NoResultFound
from app import api_user
from app.dao import services_dao, templates_dao
from app.models import SMS_TYPE
from app.models import SMS_TYPE, EMAIL_TYPE
from app.notifications.process_notifications import (create_content_for_notification,
persist_notification,
send_notification_to_queue)
@@ -16,7 +16,8 @@ from app.schema_validation import validate
from app.v2.errors import BadRequestError
from app.v2.notifications import notification_blueprint
from app.v2.notifications.notification_schemas import (post_sms_request,
create_post_sms_response_from_notification)
create_post_sms_response_from_notification, post_email_request,
create_post_email_response_from_notification)
@notification_blueprint.route('/sms', methods=['POST'])
@@ -27,7 +28,7 @@ def post_sms_notification():
check_service_message_limit(api_user.key_type, service)
service_can_send_to_recipient(form['phone_number'], api_user.key_type, service)
template, content = __validate_template(form, service)
template, template_with_content = __validate_template(form, service, SMS_TYPE)
notification = persist_notification(template_id=template.id,
template_version=template.version,
@@ -39,23 +40,42 @@ def post_sms_notification():
key_type=api_user.key_type)
send_notification_to_queue(notification, service.research_mode)
resp = create_post_sms_response_from_notification(notification, content, service.sms_sender, request.url_root)
resp = create_post_sms_response_from_notification(notification,
template_with_content.content,
service.sms_sender,
request.url_root)
return jsonify(resp), 201
@notification_blueprint.route('/email', methods=['POST'])
def post_email_notification():
# validate post form against post_email_request schema
# validate service
# validate template
# persist notification
# send notification to queue
# create content
# return post_email_response schema
pass
form = validate(request.get_json(), post_email_request)
service = services_dao.dao_fetch_service_by_id(api_user.service_id)
check_service_message_limit(api_user.key_type, service)
service_can_send_to_recipient(form['email_address'], api_user.key_type, service)
template, template_with_content = __validate_template(form, service, EMAIL_TYPE)
notification = persist_notification(template_id=template.id,
template_version=template.version,
recipient=form['email_address'],
service_id=service.id,
personalisation=form.get('personalisation', None),
notification_type=EMAIL_TYPE,
api_key_id=api_user.id,
key_type=api_user.key_type)
send_notification_to_queue(notification, service.research_mode)
resp = create_post_email_response_from_notification(notification=notification,
content=template_with_content.content,
subject=template_with_content.subject,
email_from=service.email_from,
url_root=request.url_root)
return jsonify(resp), 201
def __validate_template(form, service):
def __validate_template(form, service, notification_type):
try:
template = templates_dao.dao_get_template_by_id_and_service_id(template_id=form['template_id'],
service_id=service.id)
@@ -64,8 +84,8 @@ def __validate_template(form, service):
raise BadRequestError(message=message,
fields=[{'template': message}])
check_template_is_for_notification_type(SMS_TYPE, template.template_type)
check_template_is_for_notification_type(notification_type, template.template_type)
check_template_is_active(template)
template_with_content = create_content_for_notification(template, form.get('personalisation', {}))
check_sms_content_char_count(template_with_content.replaced_content_count)
return template, template_with_content.content
return template, template_with_content