Skip to content

Architecture

Marcelo Trindade edited this page Aug 29, 2026 · 1 revision

Arquitetura

Visão geral

O aplicativo permanece:

  • desktop;
  • local;
  • síncrono;
  • sem servidor;
  • sem ORM;
  • sem pool de conexão;
  • sem runtime assíncrono.

Slint apresenta a interface, o domínio valida os dados e QsoRepository encapsula SQLite/rusqlite.

Persistência

src/database/
├── health.rs
├── migrations.rs
└── repository/
    ├── mod.rs
    ├── queries.rs
    ├── adif.rs
    ├── backup.rs
    └── stress.rs

Responsabilidades

  • mod.rs: conexão, agregado QSO, CRUD e transações;
  • queries.rs: listagem, paginação, busca, filtros e materialização;
  • adif.rs: preview, importação, exportação e extras;
  • backup.rs: snapshot, integridade e durabilidade;
  • health.rs: inspeção read-only e invariantes;
  • migrations.rs: evolução transacional do schema.

Garantias importantes

  • foreign keys habilitadas;
  • schemas futuros recusados;
  • migrations transacionais;
  • quick_check e foreign_key_check;
  • QSO + metadata específica são transacionais;
  • SQLite é a fonte de verdade;
  • schema atual: 7.

Metadata de modos

ModeMetadata consolida:

  • Generic;
  • Dmr;
  • Ft8;
  • Dstar;
  • Ysf.

A variante deve corresponder ao modo normalizado.

digital_routes continua específico de DMR.

D-STAR possui dstar_metadata.

YSF/C4FM possui ysf_metadata.

Paginação

A listagem usa ordenação:

datetime_start_utc DESC, id DESC

e paginação LIMIT/OFFSET.

O projeto manteve essa abordagem porque os testes de escala não justificaram uma mudança.

Duplicidade manual

A detecção é apenas aviso.

Não existe constraint UNIQUE para impedir duplicados intencionais.

UI

Veja Arquitetura da UI.

Evolução

Para um novo modo, siga Adicionar modo digital.

Clone this wiki locally