Drop feeds/merge them into user
This commit is contained in:
parent
59373c6380
commit
f12059c760
13 changed files with 78 additions and 920 deletions
|
@ -25,6 +25,7 @@ import (
|
|||
"git.mstar.dev/mstar/linstrom/activitypub/translators"
|
||||
"git.mstar.dev/mstar/linstrom/config"
|
||||
"git.mstar.dev/mstar/linstrom/shared"
|
||||
"git.mstar.dev/mstar/linstrom/storage-new"
|
||||
"git.mstar.dev/mstar/linstrom/storage-new/dbgen"
|
||||
"git.mstar.dev/mstar/linstrom/storage-new/models"
|
||||
webshared "git.mstar.dev/mstar/linstrom/web/shared"
|
||||
|
@ -893,7 +894,7 @@ func handleCreate(w http.ResponseWriter, r *http.Request, object map[string]any)
|
|||
// Includes only creator follower list -> Follower only -> only feeds that explicitly follow creator
|
||||
|
||||
u2u := dbgen.UserToUserRelation
|
||||
targetFeeds := []models.Feed{}
|
||||
targetUserIds := []string{}
|
||||
if sliceutils.Contains(totalNoteTargets, "https://www.w3.org/ns/activitystreams#Public") {
|
||||
// Public post, add to global and following feeds
|
||||
dbNote.AccessLevel = models.NOTE_TARGET_PUBLIC
|
||||
|
@ -905,27 +906,15 @@ func handleCreate(w http.ResponseWriter, r *http.Request, object map[string]any)
|
|||
Msg("Failed to get ids for followers")
|
||||
return false
|
||||
}
|
||||
userFeeds, err := dbgen.Feed.Where(dbgen.Feed.OwnerId.In(followerIds...)).Find()
|
||||
if err != nil {
|
||||
log.Error().
|
||||
Err(err).
|
||||
Str("follow-target", actingUser.ID).
|
||||
Strs("follower-ids", followerIds).
|
||||
Msg("Failed to get feeds for followers")
|
||||
return false
|
||||
}
|
||||
globalFeed, err := dbgen.Feed.Where(dbgen.Feed.Name.Eq(models.GlobalFeedName)).First()
|
||||
if err != nil {
|
||||
log.Error().
|
||||
Err(err).
|
||||
Msg("Failed to get global feed")
|
||||
return false
|
||||
}
|
||||
targetFeeds = slices.Concat(
|
||||
targetFeeds,
|
||||
sliceutils.Map(userFeeds, func(t *models.Feed) models.Feed { return *t }),
|
||||
)
|
||||
targetFeeds = append(targetFeeds, *globalFeed)
|
||||
|
||||
// globalFeed, err := dbgen.Feed.Where(dbgen.Feed.Name.Eq(models.GlobalFeedName)).First()
|
||||
// if err != nil {
|
||||
// log.Error().
|
||||
// Err(err).
|
||||
// Msg("Failed to get global feed")
|
||||
// return false
|
||||
// }
|
||||
targetUserIds = append(followerIds, storage.ServerActorId)
|
||||
} else {
|
||||
if sliceutils.ContainsFunc(totalNoteTargets, func(x string) bool {
|
||||
return strings.HasPrefix(x, actingUser.ID)
|
||||
|
@ -940,35 +929,22 @@ func handleCreate(w http.ResponseWriter, r *http.Request, object map[string]any)
|
|||
Msg("Failed to get ids for followers")
|
||||
return false
|
||||
}
|
||||
userFeeds, err := dbgen.Feed.Where(dbgen.Feed.OwnerId.In(followerIds...)).Find()
|
||||
if err != nil {
|
||||
log.Error().
|
||||
Err(err).
|
||||
Str("follow-target", actingUser.ID).
|
||||
Strs("follower-ids", followerIds).
|
||||
Msg("Failed to get feeds for followers")
|
||||
return false
|
||||
}
|
||||
targetFeeds = sliceutils.Map(userFeeds, func(t *models.Feed) models.Feed { return *t })
|
||||
targetUserIds = followerIds
|
||||
} else {
|
||||
// Neither followers collection url nor public marker, private message
|
||||
dbNote.AccessLevel = models.NOTE_TARGET_DM
|
||||
userFeeds, err := dbgen.Feed.
|
||||
LeftJoin(dbgen.User, dbgen.User.ID.EqCol(dbgen.Feed.OwnerId)).
|
||||
LeftJoin(dbgen.RemoteServer, dbgen.RemoteServer.ID.EqCol(dbgen.User.ServerId)).
|
||||
LeftJoin(dbgen.UserRemoteLinks, dbgen.UserRemoteLinks.ID.EqCol(dbgen.User.RemoteInfoId)).
|
||||
Where(dbgen.RemoteServer.IsSelf.Is(true)).Where(
|
||||
dbgen.User.ID.In(totalNoteTargets...),
|
||||
).Or(dbgen.UserRemoteLinks.ApLink.In(totalNoteTargets...)).Find()
|
||||
urm := dbgen.UserRemoteLinks
|
||||
remoteLinks, err := urm.
|
||||
Join(dbgen.User, dbgen.User.ID.EqCol(urm.UserId)).
|
||||
Join(dbgen.RemoteServer, dbgen.RemoteServer.ID.EqCol(dbgen.User.ServerId)).
|
||||
Where(urm.ApLink.In(totalNoteTargets...), dbgen.RemoteServer.IsSelf.Is(true)).Find()
|
||||
if err != nil {
|
||||
log.Error().
|
||||
Err(err).
|
||||
Str("follow-target", actingUser.ID).
|
||||
Strs("targeted-ids", totalNoteTargets).
|
||||
Msg("Failed to get feeds for directly messaged users")
|
||||
log.Error().Err(err).Strs("target-ids", totalNoteTargets).Msg("Failed to get local targets for dm")
|
||||
return false
|
||||
}
|
||||
targetFeeds = sliceutils.Map(userFeeds, func(t *models.Feed) models.Feed { return *t })
|
||||
targetUserIds = sliceutils.Map(remoteLinks, func(t *models.UserRemoteLinks) string {
|
||||
return t.UserId
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -995,11 +971,11 @@ func handleCreate(w http.ResponseWriter, r *http.Request, object map[string]any)
|
|||
return false
|
||||
}
|
||||
|
||||
feedRels := sliceutils.Map(targetFeeds, func(f models.Feed) *models.NoteToFeed {
|
||||
feedRels := sliceutils.Map(targetUserIds, func(f string) *models.NoteToFeed {
|
||||
return &models.NoteToFeed{
|
||||
Reason: string(models.FeedAppearanceReasonFollowUser),
|
||||
NoteId: dbNote.ID,
|
||||
FeedId: uint64(f.ID),
|
||||
Reason: string(models.FeedAppearanceReasonFollowUser),
|
||||
NoteId: dbNote.ID,
|
||||
ForUserId: f,
|
||||
}
|
||||
})
|
||||
err = tx.NoteToFeed.Create(feedRels...)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue