2024-02-20 17:44:52 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
# = ActivityPub =
|
|
|
|
#
|
|
|
|
# El registro de actividades recibidas y su estado. Cuando recibimos
|
|
|
|
# una actividad, puede estar destinada a varies actores dentro de Sutty,
|
|
|
|
# con lo que generamos una cola para cada une.
|
|
|
|
#
|
|
|
|
# @see {https://www.w3.org/TR/activitypub/#client-to-server-interactions}
|
|
|
|
class ActivityPub < ApplicationRecord
|
|
|
|
include AASM
|
|
|
|
|
|
|
|
belongs_to :site
|
|
|
|
belongs_to :object, polymorphic: true
|
|
|
|
has_many :activities
|
|
|
|
|
|
|
|
validates :site_id, presence: true
|
|
|
|
validates :object_id, presence: true
|
|
|
|
validates :aasm_state, presence: true, inclusion: { in: %w[paused approved rejected reported deleted] }
|
|
|
|
|
|
|
|
aasm do
|
|
|
|
# Todavía no hay una decisión sobre el objeto
|
|
|
|
state :paused, initial: true
|
|
|
|
# Le usuarie aprobó el objeto
|
|
|
|
state :approved
|
|
|
|
# Le usuarie rechazó el objeto
|
|
|
|
state :rejected
|
|
|
|
# Le usuarie reportó el objeto
|
|
|
|
state :reported
|
|
|
|
# Le actore eliminó el objeto
|
|
|
|
state :deleted
|
2024-02-20 20:15:57 +00:00
|
|
|
|
|
|
|
# Recibir una acción de eliminación, eliminar el contenido de la
|
|
|
|
# base de datos. Esto elimina el contenido para todos los sitios
|
|
|
|
# porque estamos respetando lo que pidió le actore.
|
|
|
|
event :delete do
|
|
|
|
transitions to: :deleted
|
|
|
|
|
|
|
|
after do
|
|
|
|
object.update(object: {})
|
|
|
|
end
|
|
|
|
end
|
2024-02-20 20:18:15 +00:00
|
|
|
|
|
|
|
# Si un objeto previamente aprobado fue actualizado, volvemos a
|
|
|
|
# pausarlo.
|
|
|
|
event :pause do
|
|
|
|
transitions from: :approved, to: :paused
|
|
|
|
end
|
2024-02-20 17:44:52 +00:00
|
|
|
end
|
|
|
|
end
|