63 lines
1.7 KiB
Go
63 lines
1.7 KiB
Go
package v1
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
v1pb "github.com/usememos/memos/proto/gen/api/v1"
|
|
"github.com/usememos/memos/store"
|
|
)
|
|
|
|
func (s *APIV1Service) buildUpdatedMemoState(ctx context.Context, memoID int32) (*store.Memo, *store.Memo, *v1pb.Memo, error) {
|
|
memo, err := s.Store.GetMemo(ctx, &store.FindMemo{ID: &memoID})
|
|
if err != nil {
|
|
return nil, nil, nil, errors.Wrap(err, "failed to get memo")
|
|
}
|
|
if memo == nil {
|
|
return nil, nil, nil, errors.New("memo not found")
|
|
}
|
|
|
|
reactions, err := s.Store.ListReactions(ctx, &store.FindReaction{
|
|
MemoID: &memo.ID,
|
|
})
|
|
if err != nil {
|
|
return nil, nil, nil, errors.Wrap(err, "failed to list reactions")
|
|
}
|
|
attachments, err := s.Store.ListAttachments(ctx, &store.FindAttachment{
|
|
MemoID: &memo.ID,
|
|
})
|
|
if err != nil {
|
|
return nil, nil, nil, errors.Wrap(err, "failed to list attachments")
|
|
}
|
|
relations, err := s.loadMemoRelations(ctx, memo)
|
|
if err != nil {
|
|
return nil, nil, nil, errors.Wrap(err, "failed to load memo relations")
|
|
}
|
|
memoMessage, err := s.convertMemoFromStore(ctx, memo, reactions, attachments, relations)
|
|
if err != nil {
|
|
return nil, nil, nil, errors.Wrap(err, "failed to convert memo")
|
|
}
|
|
|
|
var commentContext *store.Memo
|
|
if memo.ParentUID != nil {
|
|
commentContext, err = s.Store.GetMemo(ctx, &store.FindMemo{UID: memo.ParentUID})
|
|
if err != nil {
|
|
return nil, nil, nil, errors.Wrap(err, "failed to get comment context")
|
|
}
|
|
}
|
|
|
|
return memo, commentContext, memoMessage, nil
|
|
}
|
|
|
|
func (s *APIV1Service) dispatchMemoUpdatedSideEffects(
|
|
ctx context.Context,
|
|
memoMessage *v1pb.Memo,
|
|
) {
|
|
if err := s.DispatchMemoUpdatedWebhook(ctx, memoMessage); err != nil {
|
|
slog.Warn("Failed to dispatch memo updated webhook", slog.Any("err", err))
|
|
}
|
|
|
|
s.SSEHub.publishMemoChanged()
|
|
}
|