betagouv / collectif-objets

Recenser notre patrimoine pour le protéger
https://collectif-objets.beta.gouv.fr
8 stars 6 forks source link

Gestion de la sequence de l'ID Mémoire d'une photo #1247

Open bricedurand opened 4 months ago

bricedurand commented 4 months ago

Lorsque l'on génère un export de photos à destination de Mémoire, un identifiant REF est généré de notre côté. Il ressemble à ceci MHCO011_2024011000285, où 000285 un identifiant unique et séquentiel, c'est à dire que les numéros se suivent dans l'ordre.

Pour faire ça, on charge actuellement un module RecensementPhoto dans ActiveSupport avec la méthode suivante :

  def set_memoire_number
    return if memoire_number.present? || !recensement?

    ActiveRecord::Base.connection.execute \
      "UPDATE active_storage_attachments SET memoire_number = nextval('#{memoire_sequence_name}') WHERE id = #{id};"
    reload
  end

On préfèrerait sortir ce code de active_storage.rb, et commencer par exemple par avoir une classe RecensementPhoto qui hérite de ActiveStorage::Attachment, utilisées dans la relation has_many :photos

goulvench commented 4 months ago

Une autre solution, qui éviterait complètement de toucher aux classes de Rails, serait d'avoir un modèle RecensementPhoto (avec belongs_to :recensement et has_one_attached :photo). Ce modèle intermédiaire porterait les attributs supplémentaires spécifiques.

En ajoutant au modèle Recensement has_many :recensement_photos et has_many :photos, through: :recensement_photos, on garde la possibilité de lister les photos via recensement.photos.