added activitystreams2 namespace

This commit is contained in:
Clemens 2023-06-30 15:01:51 +02:00
parent 061e800437
commit 938c323dd2

View file

@ -0,0 +1,56 @@
(ns org.domaindrivenarchitecture.activity-pub-poc.core
(:require [clojure.spec.alpha :as s]))
(s/def ::Object (s/keys
:req-un [::id ::type] ;type darf nicht "Link" sein
:opt-un [::attributedTo ::und-mehr]))
(s/def ::id any?)
(s/def ::type any?);(fn [s] (s/or (uri? s) (= s "Link"))))
(s/def ::Link (s/keys
:req-un [::type] ; type muss "Link" sein
:opt-un [::attributedTo ::und-mehr]))
(s/def ::Relationship (s/keys :req-un [::object ::und-mehr]))
; #### ACTIVITY ####
(s/def ::Activity (s/merge
::Object
(s/keys
:req-un [::actor ::object]
:opt-un [::result ::target ::origin ::instrument
::verb])))
; "IntransitiveActivity" erbt von Activity, aber ohne ::object
(s/def ::actor (s/* (s/or ::Object ::Link)))
(s/def ::attributedTo (s/* (s/or ::Object ::Link)))
(s/def ::object (s/* (s/or ::Object ::Link)))
(s/def ::result (s/* (s/or ::Object ::Link)))
(s/def ::target (s/* (s/or ::Object ::Link)))
(s/def ::origin (s/* (s/or ::Object ::Link)))
(s/def ::instrument (s/* (s/or ::Object ::Link)))
(s/def ::verb (s/* uri?))
(s/def ::instrument (s/* (s/or ::Object ::Link)))
; #### LIKE ####
(s/def ::Like ::Activity)
; Was beim Type Activity optional und required ist, ist abhängig vom Aktivitätstyp.
; Bspw brauch ein Like einen actor und den type "Like" und (xor) target/object.
; Aber die "IntransitiveActivity" (die alles von Activity erbt außer "object") vom Type "Question" besitzt keinen "actor".
(def maybeLike?
{:id "https://social.bla/alyssa#likes/RANDOMHASH",
:type "Like",
:actor "https://social.bla/alyssa",
:object "https://chatty.bla/ben/posts/234s23-2g34234-2hhj536"})