Files
notifications-api/app/v2/notifications/notification_schemas.py
Cliff Hill afc1de61f6 Even more cleanup.
Signed-off-by: Cliff Hill <Clifford.hill@gsa.gov>
2024-02-28 12:58:22 -05:00

212 lines
6.7 KiB
Python

from app.enums import NotificationStatus, TemplateType
from app.schema_validation.definitions import personalisation, uuid
template = {
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "template schema",
"type": "object",
"title": "notification content",
"properties": {
"id": uuid,
"version": {"type": "integer"},
"uri": {"type": "string", "format": "uri"},
},
"required": ["id", "version", "uri"],
}
notification_by_id = {
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "GET notification response schema",
"type": "object",
"title": "response v2/notification",
"properties": {"notification_id": uuid},
"required": ["notification_id"],
}
get_notification_response = {
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "GET notification response schema",
"type": "object",
"title": "response v2/notification",
"properties": {
"id": uuid,
"reference": {"type": ["string", "null"]},
"email_address": {"type": ["string", "null"]},
"phone_number": {"type": ["string", "null"]},
"line_1": {"type": ["string", "null"]},
"line_2": {"type": ["string", "null"]},
"line_3": {"type": ["string", "null"]},
"line_4": {"type": ["string", "null"]},
"line_5": {"type": ["string", "null"]},
"line_6": {"type": ["string", "null"]},
"postcode": {"type": ["string", "null"]},
"type": {"enum": list(TemplateType)},
"status": {"type": "string"},
"template": template,
"body": {"type": "string"},
"subject": {"type": ["string", "null"]},
"created_at": {"type": "string"},
"sent_at": {"type": ["string", "null"]},
"completed_at": {"type": ["string", "null"]},
"scheduled_for": {"type": ["string", "null"]},
},
"required": [
# technically, all keys are required since we always have all of them
"id",
"reference",
"email_address",
"phone_number",
"line_1",
"line_2",
"line_3",
"line_4",
"line_5",
"line_6",
"postcode",
"type",
"status",
"template",
"body",
"created_at",
"sent_at",
"completed_at",
],
}
get_notifications_request = {
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "schema for query parameters allowed when getting list of notifications",
"type": "object",
"properties": {
"reference": {"type": "string"},
"status": {
"type": "array",
"items": {"enum": list(NotificationStatus)},
},
"template_type": {
"type": "array",
"items": {"enum": list(TemplateType)},
},
"include_jobs": {"enum": ["true", "True"]},
"older_than": uuid,
},
"additionalProperties": False,
}
get_notifications_response = {
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "GET list of notifications response schema",
"type": "object",
"properties": {
"notifications": {
"type": "array",
"items": {"type": "object", "$ref": "#/definitions/notification"},
},
"links": {
"type": "object",
"properties": {"current": {"type": "string"}, "next": {"type": "string"}},
"additionalProperties": False,
"required": ["current"],
},
},
"additionalProperties": False,
"required": ["notifications", "links"],
"definitions": {"notification": get_notification_response},
}
post_sms_request = {
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "POST sms notification schema",
"type": "object",
"title": "POST v2/notifications/sms",
"properties": {
"reference": {"type": "string"},
"phone_number": {"type": "string", "format": "phone_number"},
"template_id": uuid,
"personalisation": personalisation,
"scheduled_for": {
"type": ["string", "null"],
"format": "datetime_within_next_day",
},
"sms_sender_id": uuid,
},
"required": ["phone_number", "template_id"],
"additionalProperties": False,
}
sms_content = {
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "content schema for SMS notification response schema",
"type": "object",
"title": "notification content",
"properties": {"body": {"type": "string"}, "from_number": {"type": "string"}},
"required": ["body", "from_number"],
}
post_sms_response = {
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "POST sms notification response schema",
"type": "object",
"title": "response v2/notifications/sms",
"properties": {
"id": uuid,
"reference": {"type": ["string", "null"]},
"content": sms_content,
"uri": {"type": "string", "format": "uri"},
"template": template,
"scheduled_for": {"type": ["string", "null"]},
},
"required": ["id", "content", "uri", "template"],
}
post_email_request = {
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "POST email notification schema",
"type": "object",
"title": "POST v2/notifications/email",
"properties": {
"reference": {"type": "string"},
"email_address": {"type": "string", "format": "email_address"},
"template_id": uuid,
"personalisation": personalisation,
"scheduled_for": {
"type": ["string", "null"],
"format": "datetime_within_next_day",
},
"email_reply_to_id": uuid,
},
"required": ["email_address", "template_id"],
"additionalProperties": False,
}
email_content = {
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "Email content for POST email notification",
"type": "object",
"title": "notification email content",
"properties": {
"from_email": {"type": "string", "format": "email_address"},
"body": {"type": "string"},
"subject": {"type": "string"},
},
"required": ["body", "from_email", "subject"],
}
post_email_response = {
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "POST email notification response schema",
"type": "object",
"title": "response v2/notifications/email",
"properties": {
"id": uuid,
"reference": {"type": ["string", "null"]},
"content": email_content,
"uri": {"type": "string", "format": "uri"},
"template": template,
"scheduled_for": {"type": ["string", "null"]},
},
"required": ["id", "content", "uri", "template"],
}