2 Convey
(ns index
(:require [scicloj.kindly.v4.kind :as kind]))Convey is our communication layer between the backend and the frontend.
2.1 Communication
(kind/mermaid
"flowchart TD
Collect --> Prepare
Prepare --> View
View --> Form
Form -->|Submit form| Validation{Validation}
Validation -->|Not valid| Form
Validation -->|Valid| ConveyFrontend([Convey Frontend])
ConveyFrontend -->|Run actions| Actions
Actions -->|Probably update store| Store
Store --> Collect
ConveyFrontend --> SendRequest{Send Request}
SendRequest -->|Starts|InFlight
SendRequest --> ConveyBackend([Convey Backend])
ConveyBackend --> RecvResponse{Recieve Response}
RecvResponse --> ConveyFrontend
RecvResponse -->|Ends| InFlight
ConveyBackend -->|Request| wrap-convey-message(wrap-convey-message - Grabs the message from the payload)
wrap-convey-message -->|Forward request with wrapped message| wrap-convey-response(wrap-convey-response - Packages the response into a convey message)
wrap-convey-response -->|Forward request as is| wrap-convey-inject-ctx(wrap-convey-inject - Injects any global ctx data in the request)
wrap-convey-inject-ctx -->|Forward injected request| wrap-convey-permissions(wrap-convey-permissions - Check the permissions for the message type)
wrap-convey-permissions -->|Forward if permissions pass| wrap-convey-validation(wrap-convey-validation - Validates against Malli Schema)
wrap-convey-validation -->|Forward if validation pass| convey-handler(Convey handler function)
wrap-convey-message -->|Returns response message| ConveyBackend
wrap-convey-response -->|Creates a response message and returns it| wrap-convey-message
wrap-convey-inject-ctx -->|Returns response| wrap-convey-response
wrap-convey-permissions -->|Returns response or permission error| wrap-convey-inject-ctx
wrap-convey-validation -->|Returns response or validation error| wrap-convey-permissions
convey-handler(Convey handler function) -->|Returns response| wrap-convey-validation
convey-handler -->|Sends in a context and the message payload| convey-handler-fn(Run function associated with the message)
convey-handler-fn -->|Returns response| convey-handler
")flowchart TD
Collect --> Prepare
Prepare --> View
View --> Form
Form -->|Submit form| Validation{Validation}
Validation -->|Not valid| Form
Validation -->|Valid| ConveyFrontend([Convey Frontend])
ConveyFrontend -->|Run actions| Actions
Actions -->|Probably update store| Store
Store --> Collect
ConveyFrontend --> SendRequest{Send Request}
SendRequest -->|Starts|InFlight
SendRequest --> ConveyBackend([Convey Backend])
ConveyBackend --> RecvResponse{Recieve Response}
RecvResponse --> ConveyFrontend
RecvResponse -->|Ends| InFlight
ConveyBackend -->|Request| wrap-convey-message(wrap-convey-message - Grabs the message from the payload)
wrap-convey-message -->|Forward request with wrapped message| wrap-convey-response(wrap-convey-response - Packages the response into a convey message)
wrap-convey-response -->|Forward request as is| wrap-convey-inject-ctx(wrap-convey-inject - Injects any global ctx data in the request)
wrap-convey-inject-ctx -->|Forward injected request| wrap-convey-permissions(wrap-convey-permissions - Check the permissions for the message type)
wrap-convey-permissions -->|Forward if permissions pass| wrap-convey-validation(wrap-convey-validation - Validates against Malli Schema)
wrap-convey-validation -->|Forward if validation pass| convey-handler(Convey handler function)
wrap-convey-message -->|Returns response message| ConveyBackend
wrap-convey-response -->|Creates a response message and returns it| wrap-convey-message
wrap-convey-inject-ctx -->|Returns response| wrap-convey-response
wrap-convey-permissions -->|Returns response or permission error| wrap-convey-inject-ctx
wrap-convey-validation -->|Returns response or validation error| wrap-convey-permissions
convey-handler(Convey handler function) -->|Returns response| wrap-convey-validation
convey-handler -->|Sends in a context and the message payload| convey-handler-fn(Run function associated with the message)
convey-handler-fn -->|Returns response| convey-handler
source: components/convey/docs/index.clj