Skip to content

refactor(declaration): ajouter FK declaration.siren → company.siren #3119

@Viczei

Description

@Viczei

Contexte

La table declaration a une colonne siren (varchar 9) et une relation Drizzle vers company définie dans declarationsRelations :

company: one(companies, {
  fields: [declarations.siren],
  references: [companies.siren],
}),

Cependant, il n'y a pas de contrainte FK SQL réelle — seule la relation ORM existe. Cela signifie qu'on peut avoir des déclarations avec un siren qui ne correspond à aucune company en base.

Ce refactor suit le même pattern que gip_mds_data.siren → company.siren réalisé dans #3110.

Code impacté

  • Schéma DB : packages/app/src/server/db/schema.ts — table declarations (lignes 65-149), colonne siren ligne ~69
  • Relations : même fichier, declarationsRelations (lignes 151-167)
  • Queries : les requêtes utilisent déjà innerJoin(companies, eq(declarations.siren, companies.siren)) (ex: packages/app/src/modules/export/queries.ts:113)

Travail à faire

  1. Migration Drizzle : ajouter .references(() => companies.siren) sur la colonne declarations.siren
  2. Vérifier l'intégrité : s'assurer que toutes les déclarations existantes ont un siren présent dans company (sinon créer les companies manquantes avant d'ajouter la FK, comme fait dans refactor(gip): lier gip_mds_data à company par FK siren + cron import quotidien #3110)
  3. Mettre à jour le schéma : la relation Drizzle existe déjà, mais la contrainte SQL doit être explicite
  4. Tests : vérifier que les tests d'insertion de déclaration créent bien la company associée

Points d'attention

  • Contrainte unique existante : declaration_siren_year_idx sur (siren, year) — une seule déclaration par entreprise par an
  • Le flow de création de déclaration (auth/config.ts JWT callback) crée déjà la company via l'API Weez au login — la FK ne devrait pas poser de problème pour les nouveaux records
  • Pour les données existantes, prévoir un script de migration qui vérifie/crée les companies manquantes (pattern Weez comme refactor(gip): lier gip_mds_data à company par FK siren + cron import quotidien #3110)

Metadata

Metadata

Assignees

Type

Projects

Status

Done

Relationships

None yet

Development

No branches or pull requests

Issue actions