Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PRMP-1302] Create sandbox for NRL API #232

Merged
merged 9 commits into from
Feb 4, 2025
15 changes: 15 additions & 0 deletions infrastructure/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -162,11 +162,26 @@
| [aws_api_gateway_domain_name.custom_api_domain](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_domain_name) | resource |
| [aws_api_gateway_gateway_response.bad_gateway_response](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_gateway_response) | resource |
| [aws_api_gateway_gateway_response.unauthorised_response](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_gateway_response) | resource |
| [aws_api_gateway_integration.get_document_reference_mock](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_integration) | resource |
| [aws_api_gateway_integration_response.get_document_reference_mock_200_response](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_integration_response) | resource |
| [aws_api_gateway_integration_response.get_document_reference_mock_400_response](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_integration_response) | resource |
| [aws_api_gateway_integration_response.get_document_reference_mock_401_response](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_integration_response) | resource |
| [aws_api_gateway_integration_response.get_document_reference_mock_403_response](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_integration_response) | resource |
| [aws_api_gateway_integration_response.get_document_reference_mock_404_response](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_integration_response) | resource |
| [aws_api_gateway_method.get_document_reference](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_method) | resource |
| [aws_api_gateway_method.login_proxy_method](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_method) | resource |
| [aws_api_gateway_method.sandbox_get_document_reference](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_method) | resource |
| [aws_api_gateway_method_response.response_200](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_method_response) | resource |
| [aws_api_gateway_method_response.response_400](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_method_response) | resource |
| [aws_api_gateway_method_response.response_401](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_method_response) | resource |
| [aws_api_gateway_method_response.response_403](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_method_response) | resource |
| [aws_api_gateway_method_response.response_404](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_method_response) | resource |
| [aws_api_gateway_resource.auth_resource](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_resource) | resource |
| [aws_api_gateway_resource.get_document_reference](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_resource) | resource |
| [aws_api_gateway_resource.login_resource](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_resource) | resource |
| [aws_api_gateway_resource.nrl_sandbox](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_resource) | resource |
| [aws_api_gateway_resource.sandbox_get_document_reference](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_resource) | resource |
| [aws_api_gateway_resource.sandbox_get_document_reference_path_parameter](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_resource) | resource |
| [aws_api_gateway_rest_api.ndr_doc_store_api](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_rest_api) | resource |
| [aws_api_gateway_stage.ndr_api](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_stage) | resource |
| [aws_api_gateway_usage_plan.apim](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_usage_plan) | resource |
Expand Down
132 changes: 132 additions & 0 deletions infrastructure/nrl-sandbox-get-doc-ref.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
locals {
mock_200_response = file("${path.module}/nrl_mock_responses/200_response.json")
mock_401_response = file("${path.module}/nrl_mock_responses/401_response.json")
mock_403_response = file("${path.module}/nrl_mock_responses/403_response.json")
mock_404_response = file("${path.module}/nrl_mock_responses/404_response.json")
}

resource "aws_api_gateway_resource" "nrl_sandbox" {
rest_api_id = aws_api_gateway_rest_api.ndr_doc_store_api.id
parent_id = aws_api_gateway_rest_api.ndr_doc_store_api.root_resource_id
path_part = "sandbox"
}

resource "aws_api_gateway_resource" "sandbox_get_document_reference" {
rest_api_id = aws_api_gateway_rest_api.ndr_doc_store_api.id
parent_id = aws_api_gateway_resource.nrl_sandbox.id
path_part = "DocumentReference"
}

resource "aws_api_gateway_resource" "sandbox_get_document_reference_path_parameter" {
rest_api_id = aws_api_gateway_rest_api.ndr_doc_store_api.id
parent_id = aws_api_gateway_resource.sandbox_get_document_reference.id
path_part = "{id}"
}

resource "aws_api_gateway_method" "sandbox_get_document_reference" {
rest_api_id = aws_api_gateway_rest_api.ndr_doc_store_api.id
resource_id = aws_api_gateway_resource.sandbox_get_document_reference_path_parameter.id
http_method = "GET"
authorization = "NONE"
api_key_required = true
request_parameters = {
"method.request.path.id" = true
}
}


resource "aws_api_gateway_integration" "get_document_reference_mock" {
rest_api_id = aws_api_gateway_rest_api.ndr_doc_store_api.id
resource_id = aws_api_gateway_resource.sandbox_get_document_reference_path_parameter.id
type = "MOCK"
http_method = aws_api_gateway_method.sandbox_get_document_reference.http_method
request_templates = {
"application/json" = <<EOF
{
#if ( $input.params('id') == '16521000000101~f9ed81db-f90a-42d4-b7e4-d554d8f338fd' )
"statusCode": 200
#elseif ( $input.params('id') == '401' )
"statusCode": 401
#elseif ( $input.params('id') == '403' )
"statusCode": 403
#else
"statusCode": 404
#end
}
EOF
}
}

resource "aws_api_gateway_method_response" "response_200" {
rest_api_id = aws_api_gateway_rest_api.ndr_doc_store_api.id
resource_id = aws_api_gateway_resource.sandbox_get_document_reference_path_parameter.id
http_method = aws_api_gateway_method.sandbox_get_document_reference.http_method
status_code = "200"
}

resource "aws_api_gateway_integration_response" "get_document_reference_mock_200_response" {
rest_api_id = aws_api_gateway_rest_api.ndr_doc_store_api.id
resource_id = aws_api_gateway_resource.sandbox_get_document_reference_path_parameter.id
http_method = aws_api_gateway_method.sandbox_get_document_reference.http_method
status_code = aws_api_gateway_method_response.response_200.status_code
selection_pattern = "200"
response_templates = {
"application/json" = local.mock_200_response
}
}

resource "aws_api_gateway_method_response" "response_401" {
rest_api_id = aws_api_gateway_rest_api.ndr_doc_store_api.id
resource_id = aws_api_gateway_resource.sandbox_get_document_reference_path_parameter.id
http_method = aws_api_gateway_method.sandbox_get_document_reference.http_method
status_code = "401"
}

resource "aws_api_gateway_integration_response" "get_document_reference_mock_401_response" {
rest_api_id = aws_api_gateway_rest_api.ndr_doc_store_api.id
resource_id = aws_api_gateway_resource.sandbox_get_document_reference_path_parameter.id
http_method = aws_api_gateway_method.sandbox_get_document_reference.http_method
status_code = aws_api_gateway_method_response.response_401.status_code
selection_pattern = "401"
response_templates = {
"application/json" = local.mock_401_response
}
}

resource "aws_api_gateway_method_response" "response_403" {
rest_api_id = aws_api_gateway_rest_api.ndr_doc_store_api.id
resource_id = aws_api_gateway_resource.sandbox_get_document_reference_path_parameter.id
http_method = aws_api_gateway_method.sandbox_get_document_reference.http_method
status_code = "403"
}

resource "aws_api_gateway_integration_response" "get_document_reference_mock_403_response" {
rest_api_id = aws_api_gateway_rest_api.ndr_doc_store_api.id
resource_id = aws_api_gateway_resource.sandbox_get_document_reference_path_parameter.id
http_method = aws_api_gateway_method.sandbox_get_document_reference.http_method
status_code = aws_api_gateway_method_response.response_403.status_code
selection_pattern = "403"
response_templates = {
"application/json" = local.mock_403_response
}
}

resource "aws_api_gateway_method_response" "response_404" {
rest_api_id = aws_api_gateway_rest_api.ndr_doc_store_api.id
resource_id = aws_api_gateway_resource.sandbox_get_document_reference_path_parameter.id
http_method = aws_api_gateway_method.sandbox_get_document_reference.http_method
status_code = "404"
}

resource "aws_api_gateway_integration_response" "get_document_reference_mock_404_response" {
rest_api_id = aws_api_gateway_rest_api.ndr_doc_store_api.id
resource_id = aws_api_gateway_resource.sandbox_get_document_reference_path_parameter.id
http_method = aws_api_gateway_method.sandbox_get_document_reference.http_method
status_code = aws_api_gateway_method_response.response_404.status_code
selection_pattern = "404"
response_templates = {
"application/json" = local.mock_404_response
}
}


85 changes: 85 additions & 0 deletions infrastructure/nrl_mock_responses/200_response.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
{
"resourceType": "DocumentReference",
"status": "current",
"type": {
"coding": [
{
"system": "http://snomed.info/sct",
"code": "16521000000101",
"display": "Lloyd George record folder"
}
]
},
"category": [
{
"coding": [
{
"system": "http://snomed.info/sct",
"code": "734163000",
"display": "Care plan"
}
]
}
],
"subject": {
"identifier": {
"system": "https://fhir.nhs.uk/Id/nhs-number",
"value": "9000000009"
}
},
"author": [
{
"identifier": {
"system": "https://fhir.nhs.uk/Id/ods-organization-code",
"value": "Y12345"
}
}
],
"custodian": {
"identifier": {
"system": "https://fhir.nhs.uk/Id/ods-organization-code",
"value": "Y12345"
}
},
"content": [
{
"attachment": {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we not including the size/hash of the document in the pointer?

"contentType": "application/pdf",
"language": "en-GB",
"url": "https://fake-url.com",
"title": "document.pdf",
"creation": "2024-01-01T12:00:00.000Z"
},
"format": {
"system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLFormatCode",
"code": "urn:nhs-ic:unstructured",
"display": "Unstructured Document"
},
"extension": [
{
"valueCodeableConcept": {
"coding": [
{
"system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLContentStability",
"code": "static",
"display": "Static"
}
]
},
"url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-ContentStability"
}
]
}
],
"context": {
"practiceSetting": {
"coding": [
{
"system": "http://snomed.info/sct",
"code": "1060971000000108",
"display": "General practice service"
}
]
}
}
}
19 changes: 19 additions & 0 deletions infrastructure/nrl_mock_responses/401_response.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"resourceType": "OperationOutcome",
"issue": [
{
"severity": "error",
"code": "exception",
"details": {
"coding": [
{
"system": "http://hl7.org/fhir/issue-type",
"code": "unknown",
"display": "Unknown"
}
]
},
"diagnostics": "User is unauthorised to view record"
}
]
}
19 changes: 19 additions & 0 deletions infrastructure/nrl_mock_responses/403_response.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"resourceType": "OperationOutcome",
"issue": [
{
"severity": "error",
"code": "exception",
"details": {
"coding": [
{
"system": "http://hl7.org/fhir/issue-type",
"code": "forbidden",
"display": "Forbidden"
}
]
},
"diagnostics": "An error occurred while fetching the document"
}
]
}
19 changes: 19 additions & 0 deletions infrastructure/nrl_mock_responses/404_response.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"resourceType": "OperationOutcome",
"issue": [
{
"severity": "error",
"code": "exception",
"details": {
"coding": [
{
"system": "http://hl7.org/fhir/issue-type",
"code": "not-found",
"display": "Not Found"
}
]
},
"diagnostics": "Document reference not found"
}
]
}