S2S: Person: Implement trivial Offer handler
This commit is contained in:
parent
1694d77705
commit
909ba94b49
1 changed files with 39 additions and 0 deletions
|
@ -63,6 +63,7 @@ import Vervis.Data.Actor
|
||||||
import Vervis.Data.Collab
|
import Vervis.Data.Collab
|
||||||
import Vervis.Data.Discussion
|
import Vervis.Data.Discussion
|
||||||
import Vervis.Data.Follow
|
import Vervis.Data.Follow
|
||||||
|
import Vervis.Data.Ticket
|
||||||
import Vervis.FedURI
|
import Vervis.FedURI
|
||||||
import Vervis.Federation.Util
|
import Vervis.Federation.Util
|
||||||
import Vervis.Foundation
|
import Vervis.Foundation
|
||||||
|
@ -74,6 +75,43 @@ import Vervis.Persist.Discussion
|
||||||
import Vervis.Persist.Follow
|
import Vervis.Persist.Follow
|
||||||
import Vervis.Ticket
|
import Vervis.Ticket
|
||||||
|
|
||||||
|
-- Meaning: Someone is offering a ticket or dependency to a tracker
|
||||||
|
-- Behavior:
|
||||||
|
-- * Insert to my inbox
|
||||||
|
personOffer
|
||||||
|
:: UTCTime
|
||||||
|
-> PersonId
|
||||||
|
-> Verse
|
||||||
|
-> AP.Offer URIMode
|
||||||
|
-> ActE (Text, Act (), Next)
|
||||||
|
personOffer now recipPersonID (Verse authorIdMsig body) (AP.Offer object uTarget) = do
|
||||||
|
|
||||||
|
-- Check input
|
||||||
|
ticket <-
|
||||||
|
case object of
|
||||||
|
AP.OfferTicket t -> pure t
|
||||||
|
_ -> throwE "Unsupported Offer.object type"
|
||||||
|
ObjURI hAuthor _ <- lift $ getActorURI authorIdMsig
|
||||||
|
let author = bimap (view _1) (remoteAuthorURI . view _1) authorIdMsig
|
||||||
|
WorkItemOffer {..} <- checkOfferTicket hAuthor ticket uTarget
|
||||||
|
unless (bimap LocalActorPerson id wioAuthor == author) $
|
||||||
|
throwE "Offering a Ticket attributed to someone else"
|
||||||
|
|
||||||
|
maybeNew <- withDBExcept $ do
|
||||||
|
|
||||||
|
-- Grab me from DB
|
||||||
|
(personRecip, actorRecip) <- lift $ do
|
||||||
|
p <- getJust recipPersonID
|
||||||
|
(p,) <$> getJust (personActor p)
|
||||||
|
|
||||||
|
maybeOfferDB <- lift $ insertToInbox now authorIdMsig body (actorInbox actorRecip) True
|
||||||
|
for maybeOfferDB $ \ _offerDB ->
|
||||||
|
return $ personActor personRecip
|
||||||
|
|
||||||
|
case maybeNew of
|
||||||
|
Nothing -> done "I already have this activity in my inbox"
|
||||||
|
Just _actorID -> done "Inserted this Offer to my inbox"
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
-- Following
|
-- Following
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
@ -684,6 +722,7 @@ personBehavior now personID (Left verse@(Verse _authorIdMsig body)) =
|
||||||
AP.GrantActivity grant -> personGrant now personID verse grant
|
AP.GrantActivity grant -> personGrant now personID verse grant
|
||||||
AP.InviteActivity invite -> personInvite now personID verse invite
|
AP.InviteActivity invite -> personInvite now personID verse invite
|
||||||
AP.JoinActivity join -> personJoin now personID verse join
|
AP.JoinActivity join -> personJoin now personID verse join
|
||||||
|
AP.OfferActivity offer -> personOffer now personID verse offer
|
||||||
AP.RejectActivity reject -> personReject now personID verse reject
|
AP.RejectActivity reject -> personReject now personID verse reject
|
||||||
AP.RemoveActivity remove -> personRemove now personID verse remove
|
AP.RemoveActivity remove -> personRemove now personID verse remove
|
||||||
AP.RevokeActivity revoke -> personRevoke now personID verse revoke
|
AP.RevokeActivity revoke -> personRevoke now personID verse revoke
|
||||||
|
|
Loading…
Reference in a new issue