mirror of
https://github.com/GSA/notifications-api.git
synced 2026-01-31 23:26:23 -05:00
Create 'v2' get notification route
The new 'v2' API wants to return less data than the previous one, which was sending back tons of fields the clients never used. This new route returns only useful information, with the JSON response dict being built up in the model's `.serialize()` method. Note that writing the test for this was a bit painful because of having to treat loads of keys differently. Hopefully we think this is a good way to write this test, because if we don't, we should start thinking of a better way to check the values are what we expect.
This commit is contained in:
@@ -96,8 +96,11 @@ def register_blueprint(application):
|
||||
|
||||
|
||||
def register_v2_blueprints(application):
|
||||
from app.v2.notifications.post_notifications import notification_blueprint
|
||||
application.register_blueprint(notification_blueprint)
|
||||
from app.v2.notifications.post_notifications import notification_blueprint as post_notifications
|
||||
from app.v2.notifications.get_notifications import notification_blueprint as get_notifications
|
||||
|
||||
application.register_blueprint(post_notifications)
|
||||
application.register_blueprint(get_notifications)
|
||||
|
||||
|
||||
def init_app(app):
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import uuid
|
||||
import datetime
|
||||
from flask import url_for
|
||||
|
||||
from sqlalchemy.dialects.postgresql import (
|
||||
UUID,
|
||||
@@ -22,7 +23,8 @@ from app.authentication.utils import get_secret
|
||||
from app import (
|
||||
db,
|
||||
encryption,
|
||||
DATETIME_FORMAT)
|
||||
DATETIME_FORMAT
|
||||
)
|
||||
|
||||
from app.history_meta import Versioned
|
||||
|
||||
@@ -281,6 +283,10 @@ class Template(db.Model):
|
||||
created_by = db.relationship('User')
|
||||
version = db.Column(db.Integer, default=1, nullable=False)
|
||||
|
||||
def get_link(self):
|
||||
# TODO: use "/v2/" route once available
|
||||
return url_for("template.get_template_by_id_and_service_id", service_id=self.service_id, template_id=self.id)
|
||||
|
||||
|
||||
class TemplateHistory(db.Model):
|
||||
__tablename__ = 'templates_history'
|
||||
@@ -553,6 +559,49 @@ class Notification(db.Model):
|
||||
|
||||
return provider_rate.rate * self.billable_units
|
||||
|
||||
def completed_at(self):
|
||||
if self.status in [
|
||||
NOTIFICATION_DELIVERED,
|
||||
NOTIFICATION_FAILED,
|
||||
NOTIFICATION_TECHNICAL_FAILURE,
|
||||
NOTIFICATION_TEMPORARY_FAILURE,
|
||||
NOTIFICATION_PERMANENT_FAILURE
|
||||
]:
|
||||
return self.updated_at.strftime(DATETIME_FORMAT)
|
||||
|
||||
return None
|
||||
|
||||
def serialize(self):
|
||||
|
||||
template_dict = {
|
||||
'version': self.template.version,
|
||||
'id': self.template.id,
|
||||
'uri': self.template.get_link()
|
||||
}
|
||||
|
||||
serialized = {
|
||||
"id": self.id,
|
||||
"reference": self.client_reference,
|
||||
"email_address": self.to if self.notification_type == EMAIL_TYPE else None,
|
||||
"phone_number": self.to if self.notification_type == SMS_TYPE else None,
|
||||
"line_1": None,
|
||||
"line_2": None,
|
||||
"line_3": None,
|
||||
"line_4": None,
|
||||
"line_5": None,
|
||||
"line_6": None,
|
||||
"postcode": None,
|
||||
"cost": self.cost(),
|
||||
"type": self.notification_type,
|
||||
"status": self.status,
|
||||
"template": template_dict,
|
||||
"created_at": self.created_at.strftime(DATETIME_FORMAT),
|
||||
"sent_at": self.sent_at.strftime(DATETIME_FORMAT) if self.sent_at else None,
|
||||
"completed_at": self.completed_at()
|
||||
}
|
||||
|
||||
return serialized
|
||||
|
||||
|
||||
class NotificationHistory(db.Model):
|
||||
__tablename__ = 'notification_history'
|
||||
|
||||
@@ -1,9 +1,17 @@
|
||||
from flask import jsonify
|
||||
|
||||
from app import api_user
|
||||
from app.dao import notifications_dao
|
||||
from app.v2.notifications import notification_blueprint
|
||||
|
||||
|
||||
@notification_blueprint.route("/<uuid:id>", methods=['GET'])
|
||||
def get_notification_by_id(id):
|
||||
pass
|
||||
notification = notifications_dao.get_notification_with_personalisation(
|
||||
str(api_user.service_id), id, key_type=None
|
||||
)
|
||||
|
||||
return jsonify(notification.serialize()), 200
|
||||
|
||||
|
||||
@notification_blueprint.route("/", methods=['GET'])
|
||||
|
||||
Reference in New Issue
Block a user