55 lines
1.5 KiB
Go
55 lines
1.5 KiB
Go
package translators
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
|
|
"git.mstar.dev/mstar/linstrom/activitypub"
|
|
"git.mstar.dev/mstar/linstrom/config"
|
|
"git.mstar.dev/mstar/linstrom/storage-new/dbgen"
|
|
)
|
|
|
|
type ActivityLikeOut struct {
|
|
Context any `json:"@context"`
|
|
Type string `json:"type"`
|
|
Id string `json:"id"`
|
|
Actor string `json:"actor"`
|
|
Object string `json:"object"`
|
|
Content *string `json:"content,omitempty"`
|
|
MkReaction *string `json:"_misskey_reaction,omitempty"`
|
|
Tags []Tag `json:"tag,omitempty"`
|
|
}
|
|
|
|
func LikeFromStorage(ctx context.Context, id string) (*ActivityLikeOut, error) {
|
|
reaction, err := dbgen.Reaction.
|
|
Where(dbgen.Reaction.ID.Eq(id)).
|
|
Preload(dbgen.Reaction.Emote).
|
|
First()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
like := &ActivityLikeOut{
|
|
Type: "Like",
|
|
Id: config.GlobalConfig.General.GetFullPublicUrl() + "/api/activitypub/activity/like/" + id,
|
|
Actor: activitypub.UserIdToApUrl(reaction.ReactorId),
|
|
}
|
|
if strings.HasPrefix(reaction.NoteId, "http") {
|
|
like.Object = reaction.NoteId
|
|
} else {
|
|
like.Object = config.GlobalConfig.General.GetFullPublicUrl() + "/api/activitypub/note/" + reaction.NoteId
|
|
}
|
|
if reaction.Content.Valid {
|
|
like.Content = &reaction.Content.String
|
|
like.MkReaction = &reaction.Content.String
|
|
}
|
|
if reaction.Emote != nil {
|
|
like.Content = &reaction.Emote.Name
|
|
like.MkReaction = &reaction.Emote.Name
|
|
emote, err := EmoteTagFromStorage(ctx, reaction.Emote.ID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
like.Tags = append(like.Tags, *emote)
|
|
}
|
|
return like, nil
|
|
}
|