Skip to content

Blindagem do Decoder

JoaoSilva edited this page Oct 1, 2026 · 2 revisions

Blindagem do Decoder

O banco pode trazer categorias novas ou chaves ausentes sem quebrar a lista de ofertas.

Regras implementadas (OfertaItem.swift)

  1. enum Categoria com as 9 oficiais: ALIMENTOS, CARNES, HORTIFRUTI, PADARIA, BEBIDAS, HIGIENE, LIMPEZA, FRIOS_LATICINIOS, PET.
  2. init(from:) manual: normaliza com .uppercased() e aplica fallback ?? .alimentos — categoria desconhecida vira ALIMENTOS em vez de descartar o item.
  3. Retrocompatibilidade HORTIFRUTI (commit 68a27c7): harmoniza variações antigas sem quebrar decode.
  4. Opcionais resilientes: validade: String?, loja?, supermercadoId? — ausência não falha a lista.
  5. FirebaseService com try? + compactMap: item defeituoso é descartado silenciosamente (nil), a coleção sobrevive.

CodingKeys (contrato Firestore → Swift)

produto_id, produto_nome → produto, imagem_url → imagemURL, supermercado_id → supermercadoId, loja, validade, categoria, preco, unidade, expira_em → expiraEm.

Consulta atual (01/10/2026)

whereField("expira_em", isGreaterThanOrEqualTo: agora) exclui expiradas e documentos sem o campo. estaValida refiltra o resultado; opcionais do modelo não removem essa restrição do servidor. Consulte Estado-Atual.

Clone this wiki locally