2024-02-20 17:44:52 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
# = Activity =
|
|
|
|
#
|
|
|
|
# Lleva un registro de las actividades que nos piden hacer remotamente.
|
|
|
|
#
|
|
|
|
# Las actividades pueden tener distintos destinataries (sitios/actores).
|
|
|
|
#
|
|
|
|
# @todo Obtener el contenido del objeto dinámicamente si no existe
|
|
|
|
# localmente, por ejemplo cuando la actividad crea un objeto pero lo
|
|
|
|
# envía como referencia en lugar de anidarlo.
|
|
|
|
#
|
|
|
|
# @see {https://www.w3.org/TR/activitypub/#client-to-server-interactions}
|
2024-02-21 15:46:38 +00:00
|
|
|
class ActivityPub
|
|
|
|
class Activity < ApplicationRecord
|
|
|
|
include ActivityPub::Concerns::JsonLdConcern
|
2024-02-20 17:44:52 +00:00
|
|
|
|
2024-02-21 15:46:38 +00:00
|
|
|
belongs_to :activity_pub
|
2024-02-28 21:31:28 +00:00
|
|
|
belongs_to :actor, touch: true
|
2024-02-21 15:46:38 +00:00
|
|
|
has_one :object, through: :activity_pub
|
2024-02-20 17:44:52 +00:00
|
|
|
|
2024-02-21 15:46:38 +00:00
|
|
|
validates :activity_pub_id, presence: true
|
2024-03-06 20:15:21 +00:00
|
|
|
# Las actividades son únicas con respecto a su estado
|
|
|
|
validates :uri, presence: true, uniqueness: { scope: :activity_pub_id, message: 'estado duplicado' }
|
2024-02-20 17:44:52 +00:00
|
|
|
|
2024-02-21 15:46:38 +00:00
|
|
|
# Siempre en orden descendiente para saber el último estado
|
|
|
|
default_scope -> { order(created_at: :desc) }
|
2024-02-20 20:15:43 +00:00
|
|
|
|
2024-02-21 15:46:38 +00:00
|
|
|
# Cambia la máquina de estados según el tipo de actividad
|
|
|
|
def update_activity_pub_state!
|
|
|
|
nil
|
|
|
|
end
|
2024-02-20 20:15:43 +00:00
|
|
|
end
|
2024-02-20 17:44:52 +00:00
|
|
|
end
|