# 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 :removed # 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 :remove do transitions to: :removed before do object.update(content: {}) 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