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)
- Busca Local: O sistema tenta recuperar a configuração específica da cidade (DB ou Cache).
- Verificação de Herança: Se o valor não existir e a chave estiver em
INHERITH_SETTINGS. - Busca no Pai: O sistema busca o valor no Espaço (
space_id) vinculado à cidade. - 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.