1
0
Fork 0
mirror of https://code.naskya.net/repos/ndqEd synced 2025-03-20 15:14:54 +09:00

DB: Add Collab tables for recording Recip's and Topic's Accept activities

This commit is contained in:
fr33domlover 2022-08-21 18:10:03 +00:00
parent 0bd7568ca5
commit 10645bf02b
6 changed files with 258 additions and 26 deletions

View file

@ -139,18 +139,15 @@ checkRepoAccess' mpid op repoID = do
status <$> roleHasAccess role op
where
asCollab rid pid = do
fmap (maybe Developer RoleID . E.unValue . snd) . listToMaybe <$> do
E.select $ E.from $ \ (topic `E.InnerJoin` recip `E.LeftOuterJoin` role) -> do
E.on $ E.just (topic E.^. CollabTopicLocalRepoCollab) E.==. role E.?. CollabRoleLocalCollab
fmap (const Developer) . listToMaybe <$> do
E.select $ E.from $ \ (topic `E.InnerJoin` recip `E.InnerJoin` accept) -> do
E.on $ topic E.^. CollabTopicLocalRepoCollab E.==. accept E.^. CollabTopicAcceptCollab
E.on $ topic E.^. CollabTopicLocalRepoCollab E.==. recip E.^. CollabRecipLocalCollab
E.where_ $
topic E.^. CollabTopicLocalRepoRepo E.==. E.val rid E.&&.
recip E.^. CollabRecipLocalPerson E.==. E.val pid
E.limit 1
return
( topic E.^. CollabTopicLocalRepoCollab
, role E.?. CollabRoleLocalRole
)
return $ topic E.^. CollabTopicLocalRepoCollab
asUser = fmap RoleID . repoCollabUser
asAnon = fmap RoleID . repoCollabAnon
@ -176,18 +173,15 @@ checkRepoAccess mpid op repoHash = do
status <$> roleHasAccess role op
where
asCollab rid pid = do
fmap (maybe Developer RoleID . E.unValue . snd) . listToMaybe <$> do
E.select $ E.from $ \ (topic `E.InnerJoin` recip `E.LeftOuterJoin` role) -> do
E.on $ E.just (topic E.^. CollabTopicLocalRepoCollab) E.==. role E.?. CollabRoleLocalCollab
fmap (const Developer) . listToMaybe <$> do
E.select $ E.from $ \ (topic `E.InnerJoin` recip `E.InnerJoin` accept) -> do
E.on $ topic E.^. CollabTopicLocalRepoCollab E.==. accept E.^. CollabTopicAcceptCollab
E.on $ topic E.^. CollabTopicLocalRepoCollab E.==. recip E.^. CollabRecipLocalCollab
E.where_ $
topic E.^. CollabTopicLocalRepoRepo E.==. E.val rid E.&&.
recip E.^. CollabRecipLocalPerson E.==. E.val pid
E.limit 1
return
( topic E.^. CollabTopicLocalRepoCollab
, role E.?. CollabRoleLocalRole
)
return $ topic E.^. CollabTopicLocalRepoCollab
asUser = fmap RoleID . repoCollabUser
asAnon = fmap RoleID . repoCollabAnon
@ -214,17 +208,14 @@ checkProjectAccess mpid op deckHash = do
status <$> roleHasAccess role op
where
asCollab jid pid = do
fmap (maybe Developer RoleID . E.unValue . snd) . listToMaybe <$> do
E.select $ E.from $ \ (topic `E.InnerJoin` recip `E.LeftOuterJoin` role) -> do
E.on $ E.just (topic E.^. CollabTopicLocalDeckCollab) E.==. role E.?. CollabRoleLocalCollab
fmap (const Developer) . listToMaybe <$> do
E.select $ E.from $ \ (topic `E.InnerJoin` recip `E.InnerJoin` accept) -> do
E.on $ topic E.^. CollabTopicLocalDeckCollab E.==. accept E.^. CollabTopicAcceptCollab
E.on $ topic E.^. CollabTopicLocalDeckCollab E.==. recip E.^. CollabRecipLocalCollab
E.where_ $
topic E.^. CollabTopicLocalDeckDeck E.==. E.val jid E.&&.
recip E.^. CollabRecipLocalPerson E.==. E.val pid
E.limit 1
return
( topic E.^. CollabTopicLocalDeckCollab
, role E.?. CollabRoleLocalRole
)
return $ topic E.^. CollabTopicLocalDeckCollab
asUser = fmap RoleID . deckCollabUser
asAnon = fmap RoleID . deckCollabAnon

View file

@ -2343,6 +2343,95 @@ changes hLocal ctx =
, removeField "Workflow" "sharer"
-- 423
, removeEntity "Sharer"
-- 424
, removeEntity "CollabRoleLocal"
-- 425
, addEntities model_425_collab_accept
-- 426
, unchecked $ lift $ do
repos <- selectList [] [Asc CollabTopicLocalRepo426Id]
for_ repos $ \ (Entity _ (CollabTopicLocalRepo426 collabID repoID)) -> do
repo <- getJust repoID
itemID <- do
mgrant <- runMaybeT $ do
CollabSenderLocal426 _ grantID <-
MaybeT $ maybeRight <$>
requireEitherAlt
(getBy $ UniqueCollabSenderRemote426 collabID)
(getValBy $ UniqueCollabSenderLocal426 collabID)
"No CollabSender*"
"Multiple CollabSender*"
OutboxItem426 outboxID _ _ <- lift $ getJust $ grantID
actorID <- do
mactor <- lift $ getKeyBy $ UniqueActorOutbox426 outboxID
case mactor of
Just a -> return a
Nothing -> error "Outbox with no actor"
guard $ repo426Actor repo == actorID
return grantID
case mgrant of
Just grantID -> return grantID
Nothing -> do
actor <- getJust $ repo426Actor repo
let doc = persistJSONObjectFromDoc $ Doc hLocal emptyActivity
insert $ OutboxItem426 (actor426Outbox actor) doc defaultTime
insert_ $ CollabTopicAccept426 collabID itemID
decks <- selectList [] [Asc CollabTopicLocalDeck426Id]
for_ decks $ \ (Entity _ (CollabTopicLocalDeck426 collabID deckID)) -> do
deck <- getJust deckID
itemID <- do
mgrant <- runMaybeT $ do
CollabSenderLocal426 _ grantID <-
MaybeT $ maybeRight <$>
requireEitherAlt
(getBy $ UniqueCollabSenderRemote426 collabID)
(getValBy $ UniqueCollabSenderLocal426 collabID)
"No CollabSender*"
"Multiple CollabSender*"
OutboxItem426 outboxID _ _ <- lift $ getJust $ grantID
actorID <- do
mactor <- lift $ getKeyBy $ UniqueActorOutbox426 outboxID
case mactor of
Just a -> return a
Nothing -> error "Outbox with no actor"
guard $ deck426Actor deck == actorID
return grantID
case mgrant of
Just grantID -> return grantID
Nothing -> do
actor <- getJust $ deck426Actor deck
let doc = persistJSONObjectFromDoc $ Doc hLocal emptyActivity
insert $ OutboxItem426 (actor426Outbox actor) doc defaultTime
insert_ $ CollabTopicAccept426 collabID itemID
looms <- selectList [] [Asc CollabTopicLocalLoom426Id]
for_ looms $ \ (Entity _ (CollabTopicLocalLoom426 collabID loomID)) -> do
loom <- getJust loomID
itemID <- do
mgrant <- runMaybeT $ do
CollabSenderLocal426 _ grantID <-
MaybeT $ maybeRight <$>
requireEitherAlt
(getBy $ UniqueCollabSenderRemote426 collabID)
(getValBy $ UniqueCollabSenderLocal426 collabID)
"No CollabSender*"
"Multiple CollabSender*"
OutboxItem426 outboxID _ _ <- lift $ getJust $ grantID
actorID <- do
mactor <- lift $ getKeyBy $ UniqueActorOutbox426 outboxID
case mactor of
Just a -> return a
Nothing -> error "Outbox with no actor"
guard $ loom426Actor loom == actorID
return grantID
case mgrant of
Just grantID -> return grantID
Nothing -> do
actor <- getJust $ loom426Actor loom
let doc = persistJSONObjectFromDoc $ Doc hLocal emptyActivity
insert $ OutboxItem426 (actor426Outbox actor) doc defaultTime
insert_ $ CollabTopicAccept426 collabID itemID
]
migrateDB

View file

@ -623,3 +623,9 @@ makeEntitiesMigration "414"
makeEntitiesMigration "418"
$(modelFile "migrations/418_2022-08-06_follow_actor.model")
model_425_collab_accept :: [Entity SqlBackend]
model_425_collab_accept = $(schema "425_2022-08-21_collab_accept")
makeEntitiesMigration "426"
$(modelFile "migrations/426_2022-08-21_collab_accept_mig.model")