Contratos — Serviços e Repositórios (TD)¶
Este documento define as interfaces principais para implementar a consulta pública do KotaJá.
1. Tipos (DTOs)¶
1.1 QuoteFilters¶
Representa os filtros escolhidos pelo usuário.
month_ref: date(mês de referência)region_id: uuidbrand_id: uuid | Nonemodel_id: uuid | Nonevehicle_variant_id: uuid | None
Nota: no MVP,
vehicle_variant_idé o filtro mais importante (consulta direta).
brand_id/model_idpodem ser usados para preencher selects encadeados.
1.2 QuoteResult¶
Retorno da consulta pública.
found: boolavg_price: decimal | Nonesample_size: int | Nonemessage: str
2. Serviço¶
2.1 QuoteService¶
Responsabilidade¶
- Validar filtros
- Consultar média mensal via repositório
- Registrar log da consulta
- Montar resposta para a UI
Interface (assinaturas)¶
get_quote(filters: QuoteFilters, user_agent: str | None = None, ip_hash: str | None = None) -> QuoteResult
Regras¶
- Se filtros mínimos inválidos →
found=False,messageinformativa - Se consulta não retornar dado →
found=False,message="Sem resultados..." - Sempre registrar log, independentemente do resultado
3. Repositórios¶
3.1 QuoteRepository¶
Responsabilidade¶
Executar consulta em monthly_price_averages.
Interface¶
fetch_monthly_average(filters: QuoteFilters) -> tuple[decimal, int] | None
Retorno:
- (avg_price, sample_size) quando existir média
- None quando não existir
3.2 LogRepository¶
Responsabilidade¶
Registrar consultas públicas em public_quote_queries.
Interface¶
insert_public_query_log(filters: QuoteFilters, user_agent: str | None, ip_hash: str | None) -> None
Regras:
- deve persistir pelo menos month_ref, region_id, brand_id, model_id, vehicle_variant_id
- user_agent e ip_hash são opcionais
4. Banco/Conexão¶
4.1 DB Connection (src/db)¶
Responsabilidade¶
- Abrir conexão com PostgreSQL
- Ler
DATABASE_URL(env) - Fornecer
get_conn()reutilizável
Interface¶
get_conn() -> connection
5. Observações de implementação (MVP)¶
- Queries devem ser parametrizadas (evitar SQL injection)
- UI nunca acessa banco diretamente
- Caso ocorra erro de banco: retornar mensagem amigável e logar erro (futuro)