5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-22 19:46:23 +00:00
panel/app/models/activity_pub.rb

63 lines
1.7 KiB
Ruby
Raw Normal View History

# 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
# Estamos esperando respuesta desde la Social Inbox
state :waiting
# 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
# 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
# Si un objeto previamente aprobado fue actualizado, volvemos a
# pausarlo.
event :pause do
transitions from: %i[waiting approved rejected], to: :paused
end
# La actividad se aprueba
event :approve do
transitions from: :waiting, to: :approved
end
# La actividad fue rechazada
event :reject do
transitions from: :waiting, to: :rejected
end
end
end