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