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

View File

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

View File

@ -5,8 +5,10 @@
*permission-hook,
*group-store,
*invite-store,
*metadata-store,
*permission-group-hook,
*chat-hook
*chat-hook,
*metadata-hook
/+ *server, *chat-json, default-agent, verb, dbug
/= index
/^ octs
@ -52,8 +54,8 @@
[%permission-group-hook-action permission-group-hook-action]
==
--
%- agent:dbug
%+ verb |
%- agent:dbug
^- agent:gall
=<
|_ bol=bowl:gall
@ -199,39 +201,49 @@
?> (team:title our.bol src.bol)
?- -.act
%create
?> ?=(^ path.act)
?^ (chat-scry path.act)
?> ?=(^ app-path.act)
?^ (chat-scry app-path.act)
~& %chat-already-exists
~
%- zing
:~ (create-chat path.act security.act allow-history.act)
(create-managed-group path.act security.act members.act)
(create-security path.act security.act)
~[(permission-hook-poke [%add-owned path.act path.act])]
:~ (create-chat app-path.act security.act allow-history.act)
(create-managed-group group-path.act security.act members.act)
(create-security group-path.act security.act)
(create-metadata group-path.act app-path.act)
~[(permission-hook-poke [%add-owned group-path.act group-path.act])]
==
::
%delete
?> ?=(^ path.act)
=/ group-path (group-from-chat app-path.act)
?> ?=(^ app-path.act)
%- zing
:~ :~ (chat-hook-poke [%remove path.act])
(permission-hook-poke [%remove path.act])
(chat-poke [%delete path.act])
:~ :~ (chat-hook-poke [%remove app-path.act])
(metadata-store-poke [%remove group-path [%chat app-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
:~ (chat-hook-poke [%add-synced ship.act path.act ask-history.act])
(permission-hook-poke [%add-synced ship.act path.act])
=/ group-path
?. (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
|= [=path security=rw-security history=?]
^- (list card)
:~ [(chat-poke [%create path])]
[(chat-hook-poke [%add-owned path security history])]
:~ (chat-poke [%create path])
(chat-hook-poke [%add-owned path security history])
==
::
++ create-managed-group
@ -249,6 +261,21 @@
==
~[(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
|= [pax=path sec=rw-security]
^- (list card)
@ -265,6 +292,20 @@
^- card
[%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
|= [=path =ship]
^- card
@ -280,6 +321,32 @@
^- (unit mailbox)
=. pax ;:(weld /=chat-store/(scot %da now.bol)/mailbox pax /noun)
.^((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

View File

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

View File

@ -224,19 +224,20 @@
::
++ create
%- ot
:~ [%path pa]
:~ [%app-path pa]
[%group-path pa]
[%security sec]
[%members (as (su ;~(pfix sig fed:ag)))]
[%allow-history bo]
==
::
++ delete
(ot [%path pa]~)
(ot [%app-path pa]~)
::
++ join
%- ot
:~ [%ship (su ;~(pfix sig fed:ag))]
[%path pa]
[%app-path pa]
[%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
$% $: %create
=path
app-path=path
group-path=path
security=rw-security
members=(set ship)
allow-history=?
==
[%delete =path]
[%join =ship =path ask-history=?]
[%delete app-path=path]
[%join =ship app-path=path ask-history=?]
==
--