Skip to content

FACT-2674 - being edited by (locking)#210

Open
hurricanepilot wants to merge 20 commits into
masterfrom
FACT-2674-being-edited-by
Open

FACT-2674 - being edited by (locking)#210
hurricanepilot wants to merge 20 commits into
masterfrom
FACT-2674-being-edited-by

Conversation

@hurricanepilot

@hurricanepilot hurricanepilot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

JIRA link

FACT-2674

Change description

Changes to the admin frontend to handle acquisition and management of page locks.

  • Adds page locking for court/service-centre edit pages, so only one user can edit a section at a time
    • Wires locking interceptor into app startup so it runs for requests
    • Adds already locked and locking failed views
  • Updates the court edit page to show section lock status (Available vs Locked by user email)
  • Adds a frontend session timeout dialog

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

[x] Yes
[ ] No

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

[ ] Yes
[x] No

@hurricanepilot hurricanepilot changed the title Initial commit (WIP) FACT-2674 - being edited by (locking) Jul 6, 2026
@hmcts-jenkins-d-to-i

Copy link
Copy Markdown
Contributor

Plan Result (aat)

Plan: 0 to add, 4 to change, 0 to destroy.
  • Update
    • azurerm_key_vault_secret.redis_v6_host
    • azurerm_key_vault_secret.redis_v6_password
    • azurerm_key_vault_secret.redis_v6_port
    • module.redis-v6.azurerm_redis_cache.redis
Change Result (Click me)
  # azurerm_key_vault_secret.redis_v6_host will be updated in-place
  ~ resource "azurerm_key_vault_secret" "redis_v6_host" {
      ~ expiration_date         = "2028-07-08T10:21:25Z" -> (known after apply)
        id                      = "https://fact-kv-aat.vault.azure.net/secrets/REDIS-V6-HOST/aa3512d89cfb481eb216817ef98b93d3"
        name                    = "REDIS-V6-HOST"
        tags                    = {
            "application"         = "find-a-court-or-tribunal"
            "autoShutdown"        = "true"
            "builtFrom"           = "https://github.com/HMCTS/fact-admin-frontend.git"
            "businessArea"        = "CFT"
            "contactSlackChannel" = "#fact-tech"
            "environment"         = "staging"
            "managedBy"           = "Find a Court or Tribunal"
            "source"              = "Redis"
        }
        # (10 unchanged attributes hidden)
    }

  # azurerm_key_vault_secret.redis_v6_password will be updated in-place
  ~ resource "azurerm_key_vault_secret" "redis_v6_password" {
      ~ expiration_date         = "2028-07-08T10:21:25Z" -> (known after apply)
        id                      = "https://fact-kv-aat.vault.azure.net/secrets/REDIS-V6-PASSWORD/2af05537b33242eaa3d2db124db84b95"
        name                    = "REDIS-V6-PASSWORD"
        tags                    = {
            "application"         = "find-a-court-or-tribunal"
            "autoShutdown"        = "true"
            "builtFrom"           = "https://github.com/HMCTS/fact-admin-frontend.git"
            "businessArea"        = "CFT"
            "contactSlackChannel" = "#fact-tech"
            "environment"         = "staging"
            "managedBy"           = "Find a Court or Tribunal"
            "source"              = "Redis"
        }
        # (10 unchanged attributes hidden)
    }

  # azurerm_key_vault_secret.redis_v6_port will be updated in-place
  ~ resource "azurerm_key_vault_secret" "redis_v6_port" {
      ~ expiration_date         = "2028-07-08T10:21:25Z" -> (known after apply)
        id                      = "https://fact-kv-aat.vault.azure.net/secrets/REDIS-V6-PORT/12961eddb4814d47afc064347d5e9157"
        name                    = "REDIS-V6-PORT"
        tags                    = {
            "application"         = "find-a-court-or-tribunal"
            "autoShutdown"        = "true"
            "builtFrom"           = "https://github.com/HMCTS/fact-admin-frontend.git"
            "businessArea"        = "CFT"
            "contactSlackChannel" = "#fact-tech"
            "environment"         = "staging"
            "managedBy"           = "Find a Court or Tribunal"
            "source"              = "Redis"
        }
        # (10 unchanged attributes hidden)
    }

  # module.redis-v6.azurerm_redis_cache.redis will be updated in-place
  ~ resource "azurerm_redis_cache" "redis" {
        id                                 = "/subscriptions/1c4f0704-a29e-403d-b719-b90c34ef14c9/resourceGroups/fact-admin-frontend-cache-aat/providers/Microsoft.Cache/redis/fact-admin-frontend-aat"
        name                               = "fact-admin-frontend-aat"
        tags                               = {
            "application"         = "find-a-court-or-tribunal"
            "autoShutdown"        = "true"
            "builtFrom"           = "https://github.com/HMCTS/fact-admin-frontend.git"
            "businessArea"        = "CFT"
            "contactSlackChannel" = "#fact-tech"
            "environment"         = "staging"
            "managedBy"           = "Find a Court or Tribunal"
        }
        # (24 unchanged attributes hidden)

      ~ redis_configuration {
          ~ maxfragmentationmemory_reserved         = 125 -> 200
          ~ maxmemory_delta                         = 125 -> 200
          ~ maxmemory_reserved                      = 125 -> 200
            # (14 unchanged attributes hidden)
        }
    }

Plan: 0 to add, 4 to change, 0 to destroy.

@hmcts-jenkins-d-to-i

Copy link
Copy Markdown
Contributor

Plan Result (prod)

Plan: 0 to add, 3 to change, 0 to destroy.
  • Update
    • azurerm_key_vault_secret.redis_v6_host
    • azurerm_key_vault_secret.redis_v6_password
    • azurerm_key_vault_secret.redis_v6_port
Change Result (Click me)
  # azurerm_key_vault_secret.redis_v6_host will be updated in-place
  ~ resource "azurerm_key_vault_secret" "redis_v6_host" {
      ~ expiration_date         = "2028-07-08T09:56:46Z" -> (known after apply)
        id                      = "https://fact-kv-prod.vault.azure.net/secrets/REDIS-V6-HOST/7bdf3ae4e5be4715b31014dea8bf9875"
        name                    = "REDIS-V6-HOST"
        tags                    = {
            "application"         = "find-a-court-or-tribunal"
            "builtFrom"           = "https://github.com/HMCTS/fact-admin-frontend.git"
            "businessArea"        = "CFT"
            "contactSlackChannel" = "#fact-tech"
            "environment"         = "production"
            "managedBy"           = "Find a Court or Tribunal"
            "source"              = "Redis"
        }
        # (10 unchanged attributes hidden)
    }

  # azurerm_key_vault_secret.redis_v6_password will be updated in-place
  ~ resource "azurerm_key_vault_secret" "redis_v6_password" {
      ~ expiration_date         = "2028-07-08T09:56:46Z" -> (known after apply)
        id                      = "https://fact-kv-prod.vault.azure.net/secrets/REDIS-V6-PASSWORD/ea2fb08677a844f3b6fad9d5b16a958e"
        name                    = "REDIS-V6-PASSWORD"
        tags                    = {
            "application"         = "find-a-court-or-tribunal"
            "builtFrom"           = "https://github.com/HMCTS/fact-admin-frontend.git"
            "businessArea"        = "CFT"
            "contactSlackChannel" = "#fact-tech"
            "environment"         = "production"
            "managedBy"           = "Find a Court or Tribunal"
            "source"              = "Redis"
        }
        # (10 unchanged attributes hidden)
    }

  # azurerm_key_vault_secret.redis_v6_port will be updated in-place
  ~ resource "azurerm_key_vault_secret" "redis_v6_port" {
      ~ expiration_date         = "2028-07-08T09:56:46Z" -> (known after apply)
        id                      = "https://fact-kv-prod.vault.azure.net/secrets/REDIS-V6-PORT/0c8979c128ac4c0887876619416a53ab"
        name                    = "REDIS-V6-PORT"
        tags                    = {
            "application"         = "find-a-court-or-tribunal"
            "builtFrom"           = "https://github.com/HMCTS/fact-admin-frontend.git"
            "businessArea"        = "CFT"
            "contactSlackChannel" = "#fact-tech"
            "environment"         = "production"
            "managedBy"           = "Find a Court or Tribunal"
            "source"              = "Redis"
        }
        # (10 unchanged attributes hidden)
    }

Plan: 0 to add, 3 to change, 0 to destroy.

@hurricanepilot hurricanepilot marked this pull request as ready for review July 9, 2026 11:25
alias: API_APP_REG_ID
environment:
DATA_API_URL: 'https://fact-data-api.{{ .Values.global.environment }}.platform.hmcts.net'
DATA_API_URL: 'https://fact-data-api-pr-299.preview.platform.hmcts.net/'

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

remove before merge reminder

Comment thread Jenkinsfile_CNP

withPipeline(type, product, component) {
env.DATA_API_URL = 'https://fact-data-api.aat.platform.hmcts.net'
env.DATA_API_URL = 'https://fact-data-api-pr-299.preview.platform.hmcts.net/'

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

remove before merge reminder

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.

2 participants