Skip to content

Configurações do Sistema (Settings)

O gerenciamento de configurações do sistema reside em src/libs/settings.ts. A arquitetura permite definições hierárquicas (Espaço -> Cidade) com suporte a herança automática e cache de alto desempenho.

Estrutura de Configurações

As chaves válidas são definidas estaticamente:

  • SpaceSettings: Configurações globais de um Espaço (ex: competence).
  • CitySettings: Configurações específicas de uma Cidade.

Apenas as chaves listadas nesses objetos são permitidas para escrita, garantindo consistência.

Mecanismo de Herança via INHERITH_SETTINGS

O sistema suporta herança de valores. Quando uma cidade não possui uma configuração específica definida, ela pode "herdar" o valor do seu Espaço pai.

Isso é controlado pelo array INHERITH_SETTINGS. Atualmente, a seguinte configuração é herdada:

  • competence

Fluxo de Leitura (get_all_city_settings / get_city_setting)

  1. Busca Local: O sistema tenta recuperar a configuração específica da cidade (DB ou Cache).
  2. Verificação de Herança: Se o valor não existir e a chave estiver em INHERITH_SETTINGS.
  3. Busca no Pai: O sistema busca o valor no Espaço (space_id) vinculado à cidade.
  4. Propagação: Se encontrado no espaço, o valor é retornado para a cidade.
    • Nota: O valor herdado é cacheado no Redis sob a chave da cidade para otimizar leituras futuras.

Camada de Cache (Redis)

Para evitar acessos frequentes ao banco de dados, todas as configurações utilizam Redis.

  • Chave de Cache (Espaço): settings:space:{space_id}:{key}
  • Chave de Cache (Cidade): settings:city:{city_id}:{key}

Invalidação

O cache é atualizado automaticamente (Pattern Write-Through) sempre que as funções de escrita (set_space_setting ou set_city_setting) são chamadas.