apps: main backend integration between metadata and chat

This commit is contained in:
Logan Allen 2020-02-25 13:23:07 -08:00
parent 1272a61443
commit 0d69e17f3b
8 changed files with 226 additions and 70 deletions

View File

@ -47,7 +47,7 @@
:: ::
:: ::
:: create chat :: create chat
[%create nu-security path (unit glyph) (unit ?)] ::[%create nu-security path (unit glyph) (unit ?)]
[%delete path] :: delete chat [%delete path] :: delete chat
[%invite path (set ship)] :: allow [%invite path (set ship)] :: allow
[%banish path (set ship)] :: disallow [%banish path (set ship)] :: disallow
@ -368,7 +368,7 @@
[%join leaf+";join ~ship/chat-name (glyph)"] [%join leaf+";join ~ship/chat-name (glyph)"]
[%leave leaf+";leave ~ship/chat-name"] [%leave leaf+";leave ~ship/chat-name"]
:: ::
[%create leaf+";create [type] /chat-name (glyph)"] ::[%create leaf+";create [type] /chat-name (glyph)"]
[%delete leaf+";delete /chat-name"] [%delete leaf+";delete /chat-name"]
[%invite leaf+";invite /chat-name ~ships"] [%invite leaf+";invite /chat-name ~ships"]
[%banish leaf+";banish /chat-name ~ships"] [%banish leaf+";banish /chat-name ~ships"]
@ -477,18 +477,18 @@
;~ pose ;~ pose
(stag %target tars) (stag %target tars)
:: ::
;~ (glue ace) :: ;~ (glue ace)
(tag %create) :: (tag %create)
security :: security
;~ plug :: ;~ plug
path :: path
(punt ;~(pfix ace glyph)) :: (punt ;~(pfix ace glyph))
(punt ;~(pfix ace (fuss 'y' 'n'))) :: (punt ;~(pfix ace (fuss 'y' 'n')))
== :: ==
== :: ==
;~((glue ace) (tag %delete) path) :: ;~((glue ace) (tag %delete) path)
;~((glue ace) (tag %invite) path ships) :: ;~((glue ace) (tag %invite) path ships)
;~((glue ace) (tag %banish) path ships) :: ;~((glue ace) (tag %banish) path ships)
:: ::
;~ (glue ace) ;~ (glue ace)
(tag %join) (tag %join)
@ -683,7 +683,7 @@
%say (say +.job) %say (say +.job)
%eval (eval +.job) %eval (eval +.job)
:: ::
%create (create +.job) :: %create (create +.job)
%delete (delete +.job) %delete (delete +.job)
%invite (change-permission & +.job) %invite (change-permission & +.job)
%banish (change-permission | +.job) %banish (change-permission | +.job)
@ -750,30 +750,30 @@
[[prompt:sh-out ~] all-state] [[prompt:sh-out ~] all-state]
:: +create: new local mailbox :: +create: new local mailbox
:: ::
++ create ::++ create
|= [security=nu-security =path gyf=(unit char) allow-history=(unit ?)] :: |= [security=nu-security =path gyf=(unit char) allow-history=(unit ?)]
^- (quip card state) :: ^- (quip card state)
::TODO check if already exists :: ::TODO check if already exists
=/ =target [our-self path] :: =/ =target [our-self path]
=. audience [target ~ ~] :: =. audience [target ~ ~]
=^ moz all-state :: =^ moz all-state
?. ?=(^ gyf) [~ all-state] :: ?. ?=(^ gyf) [~ all-state]
(bind-glyph u.gyf target) :: (bind-glyph u.gyf target)
=- [[- moz] all-state] :: =- [[- moz] all-state]
%^ act %do-create %chat-view :: %^ act %do-create %chat-view
:- %chat-view-action :: :- %chat-view-action
!> ^- chat-view-action :: !> ^- chat-view-action
:* %create :: :* %create
path :: path
security :: security
:: ensure we can read from/write to our own chats :: :: ensure we can read from/write to our own chats
:: :: ::
?- security :: ?- security
%channel ~ :: %channel ~
%village [our-self ~ ~] :: %village [our-self ~ ~]
== :: ==
(fall allow-history %.y) :: (fall allow-history %.y)
== :: ==
:: +delete: delete local chats :: +delete: delete local chats
:: ::
++ delete ++ delete

View File

@ -413,14 +413,15 @@
++ fact-invite-update ++ fact-invite-update
|= [wir=wire fact=invite-update] |= [wir=wire fact=invite-update]
^- (quip card _state) ^- (quip card _state)
?+ -.fact :_ state
[~ state] ?+ -.fact ~
:: ::
%accepted %accepted
=/ ask-history ?~((chat-scry path.invite.fact) %.y %.n) =/ ask-history ?~((chat-scry path.invite.fact) %.y %.n)
:_ state =* shp ship.invite.fact
[(chat-view-poke [%join ship.invite.fact path.invite.fact ask-history])]~ =* app-path path.invite.fact
== ~[(chat-view-poke [%join shp app-path ask-history])]
==
:: ::
++ fact-permission-update ++ fact-permission-update
|= [wir=wire fact=permission-update] |= [wir=wire fact=permission-update]

View File

@ -5,8 +5,10 @@
*permission-hook, *permission-hook,
*group-store, *group-store,
*invite-store, *invite-store,
*metadata-store,
*permission-group-hook, *permission-group-hook,
*chat-hook *chat-hook,
*metadata-hook
/+ *server, *chat-json, default-agent, verb, dbug /+ *server, *chat-json, default-agent, verb, dbug
/= index /= index
/^ octs /^ octs
@ -52,8 +54,8 @@
[%permission-group-hook-action permission-group-hook-action] [%permission-group-hook-action permission-group-hook-action]
== ==
-- --
%- agent:dbug
%+ verb | %+ verb |
%- agent:dbug
^- agent:gall ^- agent:gall
=< =<
|_ bol=bowl:gall |_ bol=bowl:gall
@ -199,39 +201,49 @@
?> (team:title our.bol src.bol) ?> (team:title our.bol src.bol)
?- -.act ?- -.act
%create %create
?> ?=(^ path.act) ?> ?=(^ app-path.act)
?^ (chat-scry path.act) ?^ (chat-scry app-path.act)
~& %chat-already-exists ~& %chat-already-exists
~ ~
%- zing %- zing
:~ (create-chat path.act security.act allow-history.act) :~ (create-chat app-path.act security.act allow-history.act)
(create-managed-group path.act security.act members.act) (create-managed-group group-path.act security.act members.act)
(create-security path.act security.act) (create-security group-path.act security.act)
~[(permission-hook-poke [%add-owned path.act path.act])] (create-metadata group-path.act app-path.act)
~[(permission-hook-poke [%add-owned group-path.act group-path.act])]
== ==
:: ::
%delete %delete
?> ?=(^ path.act) =/ group-path (group-from-chat app-path.act)
?> ?=(^ app-path.act)
%- zing %- zing
:~ :~ (chat-hook-poke [%remove path.act]) :~ :~ (chat-hook-poke [%remove app-path.act])
(permission-hook-poke [%remove path.act]) (metadata-store-poke [%remove group-path [%chat app-path.act]])
(chat-poke [%delete path.act]) (chat-poke [%delete app-path.act])
==
::
?: (is-managed group-path) ~
:~ (permission-hook-poke [%remove group-path])
(group-poke [%unbundle group-path])
(metadata-hook-poke [%remove group-path])
== ==
?. =(i.path.act '~') ~
~[(group-poke [%unbundle path.act])]
== ==
:: ::
%join %join
:~ (chat-hook-poke [%add-synced ship.act path.act ask-history.act]) =/ group-path
(permission-hook-poke [%add-synced ship.act path.act]) ?. (is-managed app-path.act) app-path.act
(group-from-chat app-path.act)
:~ (chat-hook-poke [%add-synced ship.act app-path.act ask-history.act])
(permission-hook-poke [%add-synced ship.act group-path])
(metadata-hook-poke [%add-synced ship.act group-path])
== ==
== ==
:: ::
++ create-chat ++ create-chat
|= [=path security=rw-security history=?] |= [=path security=rw-security history=?]
^- (list card) ^- (list card)
:~ [(chat-poke [%create path])] :~ (chat-poke [%create path])
[(chat-hook-poke [%add-owned path security history])] (chat-hook-poke [%add-owned path security history])
== ==
:: ::
++ create-managed-group ++ create-managed-group
@ -249,6 +261,21 @@
== ==
~[(contact-view-poke [%create path ships])] ~[(contact-view-poke [%create path ships])]
:: ::
++ create-metadata
|= [group-path=path app-path=path]
^- (list card)
=/ =metadata
%* . *metadata
date-created now.bol
creator
%+ slav %p
?: (is-managed app-path) (snag 0 app-path)
(snag 1 app-path)
==
:~ (metadata-store-poke [%add group-path [%chat app-path] metadata])
(metadata-hook-poke [%add-owned group-path])
==
::
++ create-security ++ create-security
|= [pax=path sec=rw-security] |= [pax=path sec=rw-security]
^- (list card) ^- (list card)
@ -265,6 +292,20 @@
^- card ^- card
[%pass / %agent [our.bol %contact-view] %poke %contact-view-action !>(act)] [%pass / %agent [our.bol %contact-view] %poke %contact-view-action !>(act)]
:: ::
++ metadata-store-poke
|= act=metadata-action
^- card
[%pass / %agent [our.bol %metadata-store] %poke %metadata-action !>(act)]
::
++ metadata-hook-poke
|= act=metadata-hook-action
^- card
:* %pass / %agent
[our.bol %metadata-hook]
%poke %metadata-hook-action
!>(act)
==
::
++ send-invite-poke ++ send-invite-poke
|= [=path =ship] |= [=path =ship]
^- card ^- card
@ -280,6 +321,32 @@
^- (unit mailbox) ^- (unit mailbox)
=. pax ;:(weld /=chat-store/(scot %da now.bol)/mailbox pax /noun) =. pax ;:(weld /=chat-store/(scot %da now.bol)/mailbox pax /noun)
.^((unit mailbox) %gx pax) .^((unit mailbox) %gx pax)
::
++ group-from-chat
|= app-path=path
^- path
?. .^(? %gu (scot %p our.bol) %metadata-store (scot %da now.bol) ~)
?: ?=([@ ^] app-path)
~& [%assuming-ported-legacy-chat app-path]
[%'~' app-path]
~& [%weird-chat app-path]
!!
=/ resource-indices
.^ (jug resource group-path)
%gy
(scot %p our.bol)
%metadata-store
(scot %da now.bol)
/resource-indices
==
=/ groups=(set path) (~(got by resource-indices) [%chat app-path])
(snag 0 ~(tap in groups))
::
++ is-managed
|= =path
^- ?
?> ?=(^ path)
!=(path '~')
-- --
:: ::
++ diff-chat-update ++ diff-chat-update

View File

@ -21,8 +21,7 @@
:: /app-name/%app-name associations for app :: /app-name/%app-name associations for app
:: /group/%group-path associations for group :: /group/%group-path associations for group
:: ::
/- *metadata-store /+ *metadata-json, default-agent, verb, dbug
/+ default-agent, dbug
|% |%
+$ card card:agent:gall +$ card card:agent:gall
:: ::
@ -41,6 +40,7 @@
:: ::
=| state-zero =| state-zero
=* state - =* state -
%+ verb |
%- agent:dbug %- agent:dbug
^- agent:gall ^- agent:gall
=< =<

View File

@ -224,19 +224,20 @@
:: ::
++ create ++ create
%- ot %- ot
:~ [%path pa] :~ [%app-path pa]
[%group-path pa]
[%security sec] [%security sec]
[%members (as (su ;~(pfix sig fed:ag)))] [%members (as (su ;~(pfix sig fed:ag)))]
[%allow-history bo] [%allow-history bo]
== ==
:: ::
++ delete ++ delete
(ot [%path pa]~) (ot [%app-path pa]~)
:: ::
++ join ++ join
%- ot %- ot
:~ [%ship (su ;~(pfix sig fed:ag))] :~ [%ship (su ;~(pfix sig fed:ag))]
[%path pa] [%app-path pa]
[%ask-history bo] [%ask-history bo]
== ==
:: ::

View File

@ -0,0 +1,73 @@
/- *metadata-store
|%
++ associations-to-json
|= =associations
=, enjs:format
^- json
%- pairs
%+ turn ~(tap by associations)
|= [[=group-path =resource] =metadata]
^- [cord json]
:-
%- crip
;: weld
(trip (spat group-path))
(weld "/" (trip app-name.resource))
(trip (spat app-path.resource))
==
%- pairs
:~ [%group-path (path group-path)]
[%app-name s+app-name.resource]
[%app-path (path app-path.resource)]
[%metadata (metadata-to-json metadata)]
==
::
++ metadata-to-json
|= met=metadata
^- json
=, enjs:format
%- pairs
:~ [%title s+title.met]
[%description s+description.met]
[%color s+(scot %ux color.met)]
[%date-created s+(scot %da date-created.met)]
[%creator s+(scot %p creator.met)]
==
::
++ update-to-json
|= upd=metadata-update
=, enjs:format
^- json
%+ frond %metadata-update
%- pairs
:~ ?- -.upd
%add
:- %add
%- pairs
:~ [%group-path (path group-path.upd)]
[%app-name s+app-name.resource.upd]
[%app-path (path app-path.resource.upd)]
[%metadata (metadata-to-json metadata.upd)]
==
::
%update-metadata
:- %update-metadata
%- pairs
:~ [%group-path (path group-path.upd)]
[%app-name s+app-name.resource.upd]
[%app-path (path app-path.resource.upd)]
[%metadata (metadata-to-json metadata.upd)]
==
::
%remove
:- %remove
%- pairs
:~ [%group-path (path group-path.upd)]
[%app-name s+app-name.resource.upd]
[%app-path (path app-path.resource.upd)]
==
::
%associations
[%associations (associations-to-json associations.upd)]
== ==
--

View File

@ -0,0 +1,13 @@
/+ *metadata-json
|_ upd=metadata-update
++ grow
|%
++ json (update-to-json upd)
--
::
++ grab
|%
++ noun metadata-update
--
::
--

View File

@ -2,12 +2,13 @@
|% |%
+$ chat-view-action +$ chat-view-action
$% $: %create $% $: %create
=path app-path=path
group-path=path
security=rw-security security=rw-security
members=(set ship) members=(set ship)
allow-history=? allow-history=?
== ==
[%delete =path] [%delete app-path=path]
[%join =ship =path ask-history=?] [%join =ship app-path=path ask-history=?]
== ==
-- --