mirror of
https://github.com/GSA/notifications-api.git
synced 2026-07-25 02:19:45 -04:00
Adding rest endpoints for letter-branding
This commit is contained in:
@@ -128,6 +128,7 @@ def register_blueprint(application):
|
||||
from app.complaint.complaint_rest import complaint_blueprint
|
||||
from app.platform_stats.rest import platform_stats_blueprint
|
||||
from app.template_folder.rest import template_folder_blueprint
|
||||
from app.letter_branding.letter_branding_rest import letter_branding_blueprint
|
||||
|
||||
service_blueprint.before_request(requires_admin_auth)
|
||||
application.register_blueprint(service_blueprint, url_prefix='/service')
|
||||
@@ -213,6 +214,9 @@ def register_blueprint(application):
|
||||
template_folder_blueprint.before_request(requires_admin_auth)
|
||||
application.register_blueprint(template_folder_blueprint)
|
||||
|
||||
letter_branding_blueprint.before_request(requires_admin_auth())
|
||||
application.register_blueprint(letter_branding_blueprint)
|
||||
|
||||
|
||||
def register_v2_blueprints(application):
|
||||
from app.v2.inbound_sms.get_inbound_sms import v2_inbound_sms_blueprint as get_inbound_sms
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
from app import db
|
||||
from app.dao.dao_utils import transactional
|
||||
from app.models import LetterBranding
|
||||
|
||||
|
||||
def get_letter_branding_or_platform_default(domain=None):
|
||||
def dao_get_letter_branding_or_platform_default(domain=None):
|
||||
letter_branding = None
|
||||
if domain:
|
||||
letter_branding = LetterBranding.query.filter(
|
||||
@@ -14,5 +16,19 @@ def get_letter_branding_or_platform_default(domain=None):
|
||||
return letter_branding
|
||||
|
||||
|
||||
def get_all_letter_branding():
|
||||
def dao_get_all_letter_branding():
|
||||
return LetterBranding.query.order_by(LetterBranding.name).all()
|
||||
|
||||
|
||||
@transactional
|
||||
def dao_create_letter_branding(letter_branding):
|
||||
db.session.add(letter_branding)
|
||||
|
||||
|
||||
@transactional
|
||||
def dao_update_letter_branding(letter_branding_id, **kwargs):
|
||||
letter_branding = LetterBranding.query.get(letter_branding_id)
|
||||
for key, value in kwargs.items():
|
||||
setattr(letter_branding, key, value or None)
|
||||
db.session.add(letter_branding)
|
||||
return letter_branding
|
||||
|
||||
@@ -1,6 +1,76 @@
|
||||
from flask import Blueprint
|
||||
from celery import current_app
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
|
||||
from flask import Blueprint, jsonify, request
|
||||
|
||||
from app.dao.letter_branding_dao import (
|
||||
dao_get_all_letter_branding, dao_create_letter_branding,
|
||||
dao_update_letter_branding
|
||||
)
|
||||
from app.errors import register_errors
|
||||
from app.letter_branding.letter_branding_schema import post_letter_branding_schema
|
||||
from app.models import LetterBranding
|
||||
from app.schema_validation import validate
|
||||
|
||||
email_branding_blueprint = Blueprint('letter_branding', __name__, url_prefix='letter-branding')
|
||||
register_errors(email_branding_blueprint)
|
||||
letter_branding_blueprint = Blueprint('letter_branding', __name__, url_prefix='letter-branding')
|
||||
register_errors(letter_branding_blueprint)
|
||||
|
||||
|
||||
@letter_branding_blueprint.errorhandler(IntegrityError)
|
||||
def handle_integrity_error(exc):
|
||||
"""
|
||||
Handle integrity errors caused by the unique constraint
|
||||
"""
|
||||
if 'domain' in str(exc):
|
||||
return jsonify(
|
||||
result='error',
|
||||
message={'name': ["Duplicate domain '{}'".format(
|
||||
exc.params.get('domain')
|
||||
)]}
|
||||
), 400
|
||||
if 'name' in str(exc):
|
||||
return jsonify(
|
||||
result='error',
|
||||
message={'name': ["Duplicate name '{}'".format(
|
||||
exc.params.get('name')
|
||||
)]}
|
||||
), 400
|
||||
if 'filename' in str(exc):
|
||||
return jsonify(
|
||||
result='error',
|
||||
message={'name': ["Duplicate filename '{}'".format(
|
||||
exc.params.get('fileaname')
|
||||
)]}
|
||||
), 400
|
||||
current_app.logger.exception(exc)
|
||||
return jsonify(result='error', message="Internal server error"), 500
|
||||
|
||||
|
||||
@letter_branding_blueprint.route('', methods=['GET'])
|
||||
def get_all_letter_brands():
|
||||
letter_brands = dao_get_all_letter_branding()
|
||||
|
||||
return jsonify([lb.serialize() for lb in letter_brands])
|
||||
|
||||
|
||||
@letter_branding_blueprint.route('', methods=['POST'])
|
||||
def create_letter_brand():
|
||||
data = request.get_json()
|
||||
|
||||
validate(data, post_letter_branding_schema)
|
||||
|
||||
letter_branding = LetterBranding(**data)
|
||||
dao_create_letter_branding(letter_branding)
|
||||
|
||||
return jsonify(letter_branding.serialize()), 201
|
||||
|
||||
|
||||
@letter_branding_blueprint.route('/<uuid: letter_branding_id>', methods=['POST'])
|
||||
def create_letter_branding(letter_branding_id):
|
||||
data = request.get_json()
|
||||
|
||||
validate(data, post_letter_branding_schema)
|
||||
|
||||
letter_branding = dao_update_letter_branding(letter_branding_id, )
|
||||
|
||||
return jsonify(letter_branding.serialize()), 201
|
||||
|
||||
11
app/letter_branding/letter_branding_schema.py
Normal file
11
app/letter_branding/letter_branding_schema.py
Normal file
@@ -0,0 +1,11 @@
|
||||
post_letter_branding_schema = {
|
||||
"$schema": "http://json-schema.org/draft-04/schema#",
|
||||
"description": "POST schema for creating or updating a letter brand",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {"type": ["string", "null"]},
|
||||
"filename": {"type": ["string", "null"]},
|
||||
"domain": {"type": ["string", "null"]},
|
||||
},
|
||||
"required": ("name", "filename", "domain")
|
||||
}
|
||||
@@ -257,6 +257,15 @@ class LetterBranding(db.Model):
|
||||
domain = db.Column(db.Text, unique=True, nullable=True)
|
||||
platform_default = db.Column(db.Boolean, nullable=False, default=False)
|
||||
|
||||
def serialize(self):
|
||||
return {
|
||||
"id": self.id,
|
||||
"name": self.name,
|
||||
"filename": self.filename,
|
||||
"domain": self.domain,
|
||||
"platform_default": self.platform_default
|
||||
}
|
||||
|
||||
|
||||
service_letter_branding = db.Table(
|
||||
'service_letter_branding',
|
||||
|
||||
@@ -27,7 +27,7 @@ from app.dao.fact_notification_status_dao import (
|
||||
fetch_stats_for_all_services_by_date_range, fetch_monthly_template_usage_for_service
|
||||
)
|
||||
from app.dao.inbound_numbers_dao import dao_allocate_number_for_service
|
||||
from app.dao.letter_branding_dao import get_letter_branding_or_platform_default
|
||||
from app.dao.letter_branding_dao import dao_get_letter_branding_or_platform_default
|
||||
from app.dao.organisation_dao import dao_get_organisation_by_service_id
|
||||
from app.dao.service_data_retention_dao import (
|
||||
fetch_service_data_retention,
|
||||
@@ -192,7 +192,7 @@ def create_service():
|
||||
# unpack valid json into service object
|
||||
valid_service = Service.from_json(data)
|
||||
|
||||
letter_branding = get_letter_branding_or_platform_default(domain)
|
||||
letter_branding = dao_get_letter_branding_or_platform_default(domain)
|
||||
dao_create_service(valid_service, user, letter_branding=letter_branding)
|
||||
|
||||
return jsonify(data=service_schema.dump(valid_service).data), 201
|
||||
|
||||
Reference in New Issue
Block a user