add archive model

This commit is contained in:
Christophe Robillard 2021-03-29 17:07:46 +02:00
parent 959026ca4f
commit c25f3c79d9
6 changed files with 153 additions and 0 deletions

51
app/models/archive.rb Normal file
View file

@ -0,0 +1,51 @@
# == Schema Information
#
# Table name: archives
#
# id :bigint not null, primary key
# content_type :string not null
# month :date
# status :string not null
# created_at :datetime not null
# updated_at :datetime not null
#
class Archive < ApplicationRecord
include AASM
RETENTION_DURATION = 1.week
has_and_belongs_to_many :groupe_instructeurs
has_one_attached :file
scope :stale, -> { where('updated_at < ?', (Time.zone.now - RETENTION_DURATION)) }
scope :for_groupe_instructeur, -> (groupe_instructeur) {
joins(:archives_groupe_instructeurs)
.where(
archives_groupe_instructeurs: { groupe_instructeur: groupe_instructeur }
)
}
enum content_type: {
everything: 'everything',
monthly: 'monthly'
}
enum status: {
pending: 'pending',
generated: 'generated'
}
aasm whiny_persistence: true, column: :status, enum: true do
state :pending, initial: true
state :generated
event :make_available do
transitions from: :pending, to: :generated
end
end
def available?
status == 'generated' && file.attached?
end
end

View file

@ -25,6 +25,7 @@ class Instructeur < ApplicationRecord
has_many :followed_dossiers, through: :follows, source: :dossier
has_many :previously_followed_dossiers, -> { distinct }, through: :previous_follows, source: :dossier
has_many :trusted_device_tokens, dependent: :destroy
has_many :archives
has_one :user, dependent: :nullify