66 lines
1.6 KiB
Go
66 lines
1.6 KiB
Go
package web
|
|
|
|
import (
|
|
"context"
|
|
|
|
"plumber/internal/events"
|
|
"plumber/internal/store"
|
|
)
|
|
|
|
func (s *Server) publishPostCreated(post, root *store.Post, author *store.User) {
|
|
s.publishPost(events.PostCreated{PostEvent: s.postEvent(post, root, author)}, root)
|
|
}
|
|
|
|
func (s *Server) publishPostUpdated(post, root *store.Post, author *store.User) {
|
|
s.publishPost(events.PostUpdated{PostEvent: s.postEvent(post, root, author)}, root)
|
|
}
|
|
|
|
func (s *Server) publishPost(ev any, root *store.Post) {
|
|
if root != nil && root.PostState == store.PostStateHidden {
|
|
return
|
|
}
|
|
s.cfg.Events.Publish(context.Background(), ev)
|
|
}
|
|
|
|
func (s *Server) postEvent(post, root *store.Post, author *store.User) events.PostEvent {
|
|
if post == nil {
|
|
return events.PostEvent{}
|
|
}
|
|
rootID := post.ID
|
|
if root != nil {
|
|
rootID = root.ID
|
|
}
|
|
ev := events.PostEvent{
|
|
PostID: post.ID,
|
|
RootID: rootID,
|
|
Title: post.Title,
|
|
Body: post.Body,
|
|
City: post.City,
|
|
AuthorID: post.AuthorID,
|
|
AuthorName: post.AuthorName,
|
|
AuthorRole: string(post.AuthorRole),
|
|
Permalink: events.Permalink(s.cfg.BaseURL, rootID, post.ID),
|
|
}
|
|
if post.ParentID != nil {
|
|
ev.ParentID = *post.ParentID
|
|
}
|
|
if author != nil {
|
|
if ev.AuthorName == "" {
|
|
ev.AuthorName = author.Name
|
|
}
|
|
if ev.AuthorRole == "" {
|
|
ev.AuthorRole = string(author.Role)
|
|
}
|
|
}
|
|
if n := len(post.Images); n > 0 {
|
|
ev.Images = make([]events.Image, 0, n)
|
|
for _, img := range post.Images {
|
|
ev.Images = append(ev.Images, events.Image{
|
|
URL: img.PublicURL,
|
|
Description: img.Description,
|
|
})
|
|
}
|
|
}
|
|
return ev
|
|
}
|