Skip to content

FACT-2658 audit view updates#272

Open
hurricanepilot wants to merge 46 commits into
masterfrom
FACT-2658-audit-view-updates
Open

FACT-2658 audit view updates#272
hurricanepilot wants to merge 46 commits into
masterfrom
FACT-2658-audit-view-updates

Conversation

@hurricanepilot

@hurricanepilot hurricanepilot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

JIRA link

FACT-2658

Change description

Updates to support audit view pages in the admin frontend. This includes:

  • additional endpoint to allow retrieval of "subject" names and ids to allow client-side filtering
  • additional endpoint to allow retrieval of audit records based on id
  • updates to existing audit search to allow filtering by subject type
  • integration with the Service Centre changes recently added

Does this PR require manual testing? (check one with "x")

[ ] Yes
[x] No

Does this PR introduce a breaking change? (check one with "x")

[ ] Yes
[x] No

Remove old service centre code
* Add service centre entities and update audit

* jsonignore
josh-uk added 2 commits June 18, 2026 16:31
* Added new controllers/services for service centres

* Func test fixsxes

* Clean up and splitting
josh-uk and others added 3 commits June 23, 2026 11:26
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
* migration code cleanup. SC tables mig

* update to mig for sc

* change open to closed by default

* update to unit tests

* Checkstyle fix

---------

Co-authored-by: josh-uk <joshua.blackmoor@justice.gov.uk>
@hmcts-jenkins-d-to-i

Copy link
Copy Markdown
Contributor

Plan Result (prod)

⚠️ Resource Deletion will happen

This plan contains resource delete operation. Please check the plan result very carefully!

Plan: 8 to add, 7 to change, 8 to destroy.
  • Update
    • azurerm_key_vault_secret.flexible_secret["DATABASE"]
    • azurerm_key_vault_secret.flexible_secret["HOST"]
    • azurerm_key_vault_secret.flexible_secret["PASS"]
    • azurerm_key_vault_secret.flexible_secret["PORT"]
    • azurerm_key_vault_secret.flexible_secret["USER"]
    • azurerm_key_vault_secret.storage_account_connection_string_secret
    • module.storage_account.azurerm_storage_account.storage_account
  • Replace
    • module.postgresql.azurerm_postgresql_flexible_server.pgsql_server
    • module.postgresql.azurerm_postgresql_flexible_server_active_directory_administrator.pgsql_adadmin
    • module.postgresql.azurerm_postgresql_flexible_server_active_directory_administrator.pgsql_principal_admin[0]
    • module.postgresql.azurerm_postgresql_flexible_server_configuration.pgsql_server_config["azure.extensions"]
    • module.postgresql.azurerm_postgresql_flexible_server_configuration.pgsql_server_config["backslash_quote"]
    • module.postgresql.azurerm_postgresql_flexible_server_database.pg_databases["fact"]
    • module.postgresql.azurerm_resource_group.rg[0]
    • module.postgresql.null_resource.set-user-permissions-additionaldbs["fact"]
Change Result (Click me)
  # azurerm_key_vault_secret.flexible_secret["DATABASE"] will be updated in-place
  ~ resource "azurerm_key_vault_secret" "flexible_secret" {
      ~ expiration_date         = "2028-06-24T08:08:43Z" -> (known after apply)
        id                      = "https://fact-kv-prod.vault.azure.net/secrets/data-api-POSTGRES-DATABASE/ec9975470c1e40ebabb2f307dd746100"
        name                    = "data-api-POSTGRES-DATABASE"
        tags                    = {
            "application"         = "find-a-court-or-tribunal"
            "builtFrom"           = "https://github.com/HMCTS/fact-data-api.git"
            "businessArea"        = "CFT"
            "contactSlackChannel" = "#fact-tech"
            "environment"         = "production"
            "managedBy"           = "Find a Court or Tribunal"
            "source"              = "data-api PostgreSQL"
        }
        # (10 unchanged attributes hidden)
    }

  # azurerm_key_vault_secret.flexible_secret["HOST"] will be updated in-place
  ~ resource "azurerm_key_vault_secret" "flexible_secret" {
      ~ expiration_date         = "2028-06-24T08:08:43Z" -> (known after apply)
        id                      = "https://fact-kv-prod.vault.azure.net/secrets/data-api-POSTGRES-HOST/a96c1a916c754ce59697f975270818e0"
        name                    = "data-api-POSTGRES-HOST"
        tags                    = {
            "application"         = "find-a-court-or-tribunal"
            "builtFrom"           = "https://github.com/HMCTS/fact-data-api.git"
            "businessArea"        = "CFT"
            "contactSlackChannel" = "#fact-tech"
            "environment"         = "production"
            "managedBy"           = "Find a Court or Tribunal"
            "source"              = "data-api PostgreSQL"
        }
      ~ value                   = (sensitive value)
        # (9 unchanged attributes hidden)
    }

  # azurerm_key_vault_secret.flexible_secret["PASS"] will be updated in-place
  ~ resource "azurerm_key_vault_secret" "flexible_secret" {
      ~ expiration_date         = "2028-06-24T08:08:43Z" -> (known after apply)
        id                      = "https://fact-kv-prod.vault.azure.net/secrets/data-api-POSTGRES-PASS/89227e22920440298440aff3f66fa154"
        name                    = "data-api-POSTGRES-PASS"
        tags                    = {
            "application"         = "find-a-court-or-tribunal"
            "builtFrom"           = "https://github.com/HMCTS/fact-data-api.git"
            "businessArea"        = "CFT"
            "contactSlackChannel" = "#fact-tech"
            "environment"         = "production"
            "managedBy"           = "Find a Court or Tribunal"
            "source"              = "data-api PostgreSQL"
        }
        # (10 unchanged attributes hidden)
    }

  # azurerm_key_vault_secret.flexible_secret["PORT"] will be updated in-place
  ~ resource "azurerm_key_vault_secret" "flexible_secret" {
      ~ expiration_date         = "2028-06-24T08:08:43Z" -> (known after apply)
        id                      = "https://fact-kv-prod.vault.azure.net/secrets/data-api-POSTGRES-PORT/0e66f4133fdf403b8c6dc817c22170ad"
        name                    = "data-api-POSTGRES-PORT"
        tags                    = {
            "application"         = "find-a-court-or-tribunal"
            "builtFrom"           = "https://github.com/HMCTS/fact-data-api.git"
            "businessArea"        = "CFT"
            "contactSlackChannel" = "#fact-tech"
            "environment"         = "production"
            "managedBy"           = "Find a Court or Tribunal"
            "source"              = "data-api PostgreSQL"
        }
        # (10 unchanged attributes hidden)
    }

  # azurerm_key_vault_secret.flexible_secret["USER"] will be updated in-place
  ~ resource "azurerm_key_vault_secret" "flexible_secret" {
      ~ expiration_date         = "2028-06-24T08:08:43Z" -> (known after apply)
        id                      = "https://fact-kv-prod.vault.azure.net/secrets/data-api-POSTGRES-USER/e780bebe95cf48f48548de704b7a7c88"
        name                    = "data-api-POSTGRES-USER"
        tags                    = {
            "application"         = "find-a-court-or-tribunal"
            "builtFrom"           = "https://github.com/HMCTS/fact-data-api.git"
            "businessArea"        = "CFT"
            "contactSlackChannel" = "#fact-tech"
            "environment"         = "production"
            "managedBy"           = "Find a Court or Tribunal"
            "source"              = "data-api PostgreSQL"
        }
        # (10 unchanged attributes hidden)
    }

  # azurerm_key_vault_secret.storage_account_connection_string_secret will be updated in-place
  ~ resource "azurerm_key_vault_secret" "storage_account_connection_string_secret" {
      ~ expiration_date         = "2028-06-24T08:08:55Z" -> (known after apply)
        id                      = "https://fact-kv-prod.vault.azure.net/secrets/storage-account-connection-string/37e75af7af4543edb662288800101f2b"
        name                    = "storage-account-connection-string"
        tags                    = {
            "application"         = "find-a-court-or-tribunal"
            "builtFrom"           = "https://github.com/HMCTS/fact-data-api.git"
            "businessArea"        = "CFT"
            "contactSlackChannel" = "#fact-tech"
            "environment"         = "production"
            "managedBy"           = "Find a Court or Tribunal"
            "source"              = "data-api Storage account"
        }
        # (10 unchanged attributes hidden)
    }

  # module.postgresql.azurerm_postgresql_flexible_server.pgsql_server must be replaced
+/- resource "azurerm_postgresql_flexible_server" "pgsql_server" {
      - administrator_password_wo_version = 0 -> null
      ~ fqdn                              = "fact-data-api-prod.postgres.database.azure.com" -> (known after apply)
      ~ id                                = "/subscriptions/8999dec3-0104-4a27-94ee-6588559729d1/resourceGroups/fact-data-api-data-prod/providers/Microsoft.DBforPostgreSQL/flexibleServers/fact-data-api-prod" -> (known after apply)
      ~ name                              = "fact-data-api-prod" -> "fact-data-api-pg17-prod" # forces replacement
      ~ resource_group_name               = "fact-data-api-data-prod" -> "fact-data-api-pg17-data-prod" # forces replacement
      ~ storage_tier                      = "P6" -> (known after apply)
        tags                              = {
            "application"         = "find-a-court-or-tribunal"
            "builtFrom"           = "https://github.com/HMCTS/fact-data-api.git"
            "businessArea"        = "CFT"
            "contactSlackChannel" = "#fact-tech"
            "environment"         = "production"
            "managedBy"           = "Find a Court or Tribunal"
        }
      ~ version                           = "16" -> "17"
      - zone                              = "2" -> null
        # (16 unchanged attributes hidden)

      ~ high_availability {
          - standby_availability_zone = "1" -> null
            # (1 unchanged attribute hidden)
        }

        # (2 unchanged blocks hidden)
    }

  # module.postgresql.azurerm_postgresql_flexible_server_active_directory_administrator.pgsql_adadmin must be replaced
-/+ resource "azurerm_postgresql_flexible_server_active_directory_administrator" "pgsql_adadmin" {
      ~ id                  = "/subscriptions/8999dec3-0104-4a27-94ee-6588559729d1/resourceGroups/fact-data-api-data-prod/providers/Microsoft.DBforPostgreSQL/flexibleServers/fact-data-api-prod/administrators/ef17f368-0aa5-43d5-9264-28080f83755e" -> (known after apply)
      ~ resource_group_name = "fact-data-api-data-prod" -> "fact-data-api-pg17-data-prod" # forces replacement
      ~ server_name         = "fact-data-api-prod" -> "fact-data-api-pg17-prod" # forces replacement
        # (4 unchanged attributes hidden)
    }

  # module.postgresql.azurerm_postgresql_flexible_server_active_directory_administrator.pgsql_principal_admin[0] must be replaced
-/+ resource "azurerm_postgresql_flexible_server_active_directory_administrator" "pgsql_principal_admin" {
      ~ id                  = "/subscriptions/8999dec3-0104-4a27-94ee-6588559729d1/resourceGroups/fact-data-api-data-prod/providers/Microsoft.DBforPostgreSQL/flexibleServers/fact-data-api-prod/administrators/ca6d5085-485a-417d-8480-c3cefa29df31" -> (known after apply)
      ~ resource_group_name = "fact-data-api-data-prod" -> "fact-data-api-pg17-data-prod" # forces replacement
      ~ server_name         = "fact-data-api-prod" -> "fact-data-api-pg17-prod" # forces replacement
        # (4 unchanged attributes hidden)
    }

  # module.postgresql.azurerm_postgresql_flexible_server_configuration.pgsql_server_config["azure.extensions"] must be replaced
-/+ resource "azurerm_postgresql_flexible_server_configuration" "pgsql_server_config" {
      ~ id        = "/subscriptions/8999dec3-0104-4a27-94ee-6588559729d1/resourceGroups/fact-data-api-data-prod/providers/Microsoft.DBforPostgreSQL/flexibleServers/fact-data-api-prod/configurations/azure.extensions" -> (known after apply)
        name      = "azure.extensions"
      ~ server_id = "/subscriptions/8999dec3-0104-4a27-94ee-6588559729d1/resourceGroups/fact-data-api-data-prod/providers/Microsoft.DBforPostgreSQL/flexibleServers/fact-data-api-prod" -> (known after apply) # forces replacement
        # (1 unchanged attribute hidden)
    }

  # module.postgresql.azurerm_postgresql_flexible_server_configuration.pgsql_server_config["backslash_quote"] must be replaced
-/+ resource "azurerm_postgresql_flexible_server_configuration" "pgsql_server_config" {
      ~ id        = "/subscriptions/8999dec3-0104-4a27-94ee-6588559729d1/resourceGroups/fact-data-api-data-prod/providers/Microsoft.DBforPostgreSQL/flexibleServers/fact-data-api-prod/configurations/backslash_quote" -> (known after apply)
        name      = "backslash_quote"
      ~ server_id = "/subscriptions/8999dec3-0104-4a27-94ee-6588559729d1/resourceGroups/fact-data-api-data-prod/providers/Microsoft.DBforPostgreSQL/flexibleServers/fact-data-api-prod" -> (known after apply) # forces replacement
        # (1 unchanged attribute hidden)
    }

  # module.postgresql.azurerm_postgresql_flexible_server_database.pg_databases["fact"] must be replaced
-/+ resource "azurerm_postgresql_flexible_server_database" "pg_databases" {
      ~ charset   = "UTF8" -> "utf8"
      ~ id        = "/subscriptions/8999dec3-0104-4a27-94ee-6588559729d1/resourceGroups/fact-data-api-data-prod/providers/Microsoft.DBforPostgreSQL/flexibleServers/fact-data-api-prod/databases/fact" -> (known after apply)
        name      = "fact"
      ~ server_id = "/subscriptions/8999dec3-0104-4a27-94ee-6588559729d1/resourceGroups/fact-data-api-data-prod/providers/Microsoft.DBforPostgreSQL/flexibleServers/fact-data-api-prod" -> (known after apply) # forces replacement
        # (1 unchanged attribute hidden)
    }

  # module.postgresql.azurerm_resource_group.rg[0] must be replaced
+/- resource "azurerm_resource_group" "rg" {
      ~ id         = "/subscriptions/8999dec3-0104-4a27-94ee-6588559729d1/resourceGroups/fact-data-api-data-prod" -> (known after apply)
      ~ name       = "fact-data-api-data-prod" -> "fact-data-api-pg17-data-prod" # forces replacement
        tags       = {
            "application"         = "find-a-court-or-tribunal"
            "builtFrom"           = "https://github.com/HMCTS/fact-data-api.git"
            "businessArea"        = "CFT"
            "contactSlackChannel" = "#fact-tech"
            "environment"         = "production"
            "managedBy"           = "Find a Court or Tribunal"
        }
        # (2 unchanged attributes hidden)
    }

  # module.postgresql.null_resource.set-user-permissions-additionaldbs["fact"] must be replaced
-/+ resource "null_resource" "set-user-permissions-additionaldbs" {
      ~ id       = "2241834455599768980" -> (known after apply)
      ~ triggers = { # forces replacement
          ~ "name"              = "fact-data-api" -> "fact-data-api-pg17"
            # (4 unchanged elements hidden)
        }
    }

  # module.storage_account.azurerm_storage_account.storage_account will be updated in-place
  ~ resource "azurerm_storage_account" "storage_account" {
        id                                 = "/subscriptions/8999dec3-0104-4a27-94ee-6588559729d1/resourceGroups/fact-prod/providers/Microsoft.Storage/storageAccounts/factsaprod"
        name                               = "factsaprod"
        tags                               = {
            "application"         = "find-a-court-or-tribunal"
            "builtFrom"           = "https://github.com/HMCTS/fact-data-api.git"
            "businessArea"        = "CFT"
            "contactSlackChannel" = "#fact-tech"
            "environment"         = "production"
            "managedBy"           = "Find a Court or Tribunal"
        }
        # (97 unchanged attributes hidden)

      + network_rules {
          + bypass         = [
              + "AzureServices",
            ]
          + default_action = "Allow"
        }

        # (3 unchanged blocks hidden)
    }

Plan: 8 to add, 7 to change, 8 to destroy.

@hmcts-jenkins-d-to-i hmcts-jenkins-d-to-i Bot requested a deployment to preview June 25, 2026 10:26 Abandoned
Base automatically changed from service-centres to master June 25, 2026 13:46
@hmcts-jenkins-d-to-i hmcts-jenkins-d-to-i Bot requested a deployment to preview June 25, 2026 13:47 Abandoned
# Conflicts:
#	src/main/java/uk/gov/hmcts/reform/fact/data/api/entities/types/AuditSubjectType.java
#	src/main/java/uk/gov/hmcts/reform/fact/data/api/repositories/AuditRepository.java
#	src/main/java/uk/gov/hmcts/reform/fact/data/api/repositories/ServiceCentreRepository.java
#	src/main/java/uk/gov/hmcts/reform/fact/data/api/services/AuditService.java
#	src/main/java/uk/gov/hmcts/reform/fact/data/api/services/ServiceCentreService.java
#	src/main/java/uk/gov/hmcts/reform/fact/data/api/services/search/SearchLocationService.java
#	src/test/java/uk/gov/hmcts/reform/fact/data/api/controllers/AuditControllerTest.java
#	src/test/java/uk/gov/hmcts/reform/fact/data/api/services/AuditServiceTest.java
#	src/test/java/uk/gov/hmcts/reform/fact/data/api/services/search/SearchLocationServiceTest.java
@hmcts-jenkins-d-to-i hmcts-jenkins-d-to-i Bot requested a deployment to preview June 25, 2026 14:55 Abandoned
@hurricanepilot hurricanepilot marked this pull request as ready for review June 26, 2026 06:59
amstevenson
amstevenson previously approved these changes Jun 26, 2026
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants