67 lines
1.7 KiB
Plaintext
67 lines
1.7 KiB
Plaintext
@startuml
|
|
actor User
|
|
participant Browser
|
|
participant Vercel
|
|
participant Astro
|
|
participant Solid
|
|
participant Store
|
|
|
|
User -> Browser: discours.io
|
|
activate Browser
|
|
Browser -> Vercel: GET <slug>
|
|
activate Vercel
|
|
Vercel -> Astro: render
|
|
activate Astro
|
|
Astro -> apiClient: getArticle({ slug })
|
|
activate apiClient
|
|
apiClient -> DB: query: articleBySlug
|
|
activate DB
|
|
DB --> apiClient: response
|
|
deactivate DB
|
|
apiClient --> Astro: article data
|
|
deactivate apiClient
|
|
Astro -> Solid: render <ArticlePage article={article} />
|
|
activate Solid
|
|
Solid -> Store: useCurrentArticleStore(article)
|
|
activate Store
|
|
Store -> Store: create store with initial data (server)
|
|
Store --> Solid: currentArticle
|
|
deactivate Store
|
|
Solid -> Solid: render component
|
|
Solid --> Astro: rendered component
|
|
deactivate Solid
|
|
Astro --> Vercel: rendered page
|
|
Vercel -> Vercel: save rendered page to CDN
|
|
deactivate Astro
|
|
Vercel --> Browser: rendered page
|
|
deactivate Vercel
|
|
Browser --> User: rendered page
|
|
deactivate Browser
|
|
Browser -> Browser: load client scripts
|
|
Browser -> Solid: render <ArticlePage article={article} />
|
|
Solid -> Store: useCurrentArticleStore(article)
|
|
activate Store
|
|
Store -> Store: create store with initial data (client)
|
|
Store --> Solid: currentArticle
|
|
deactivate Store
|
|
Solid -> Solid: render component (no changes)
|
|
Solid -> Solid: onMount
|
|
Solid -> Store: loadArticleComments
|
|
activate Store
|
|
Store -> apiClient: getArticleComments
|
|
activate apiClient
|
|
apiClient -> DB: query: articleReactions
|
|
activate DB
|
|
DB --> apiClient: response
|
|
deactivate DB
|
|
apiClient --> Store: comments data
|
|
deactivate apiClient
|
|
Store -> Store: update store
|
|
Store --> Solid: store updated
|
|
deactivate Store
|
|
Solid -> Solid: render comments
|
|
Solid --> Browser: rendered comments
|
|
Browser --> User: comments
|
|
@enduml
|
|
|