Aller au contenu

Couche données et persistance

Cette section décrit la base SQLite locale, son initialisation et la synchronisation avec l'API ThermoNova.


Cycle de vie

  • createDbFromAsset() crée thermonova.db à partir du script assets/createBDD.sql (batchs de 50 statements).
  • seedTestData() insère une seed minimale (types de logement, énergies, départements, aides sociales) de manière idempotente.
  • fetchAPI() enchaîne les fetch*FromAPI pour hydrater les tables depuis https://thermonova.t404.xyz/api/v1/.

Abstraction DatabaseLayer

  • Situé dans utils/autres/bdd_manager.dart.
  • Helpers CRUD génériques (query, insert, update, delete) et méthodes typées (getHousingList, insertHeater, removeHousing, etc.).
  • Chaque méthode ouvre la base via _openDb(), exécute l'opération puis ferme la connexion.

Modèles métiers

  • Housing, HousingType, Department : logement et localisation (fournisseurs optionnels).
  • Supplier / SimpleSupplier, Energy, UnitCost, CostThreshold : offre énergétique et coûts.
  • Heater : radiateurs (dimensions, puissance, coûts).
  • SocialAssistance, Criteria, ConstraintType, Constraints, CurrentCriteria : aides sociales, critères et contraintes associées.
  • Insulation, InsulationType : données d'isolation.

Synchronisation API

  • APIService.fetchData(endpoint) effectue les GET; le parsing JSON est fait dans chaque fetch*.
  • fetchSupplierFromAPI(housing) fusionne fournisseurs et coûts départementaux, calcule min/avg/max et spécialise pour le département du logement.
  • Les autres fonctions (fetchEnergyFromAPI, fetchSocialAssistanceFromAPI, fetchHeaterFromAPI, etc.) parsèrent puis appellent les insert* correspondants.

Points d'attention

  • Tolérance aux erreurs via de nombreux try/catch pour éviter de bloquer l'UI.
  • Les booléens sont mappés manuellement (0/1) dans CurrentCriteria et SocialAssistance.
  • main() appelle createDbFromAsset(), seedTestData(), puis fetchAPI() pour garantir un schéma prêt et des données minimales.