MM-30304 - Handle collapsed threads in page apis (#17064)
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
f2e27a39da
Коммит
4aa6c863c3
@@ -210,7 +210,7 @@ func getPostsForChannel(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
w.Header().Set(model.HEADER_ETAG_SERVER, etag)
|
w.Header().Set(model.HEADER_ETAG_SERVER, etag)
|
||||||
}
|
}
|
||||||
|
|
||||||
c.App.AddCursorIdsForPostList(list, afterPost, beforePost, since, page, perPage)
|
c.App.AddCursorIdsForPostList(list, afterPost, beforePost, since, page, perPage, collapsedThreads)
|
||||||
clientPostList := c.App.PreparePostListForClient(list)
|
clientPostList := c.App.PreparePostListForClient(list)
|
||||||
|
|
||||||
w.Write([]byte(clientPostList.ToJson()))
|
w.Write([]byte(clientPostList.ToJson()))
|
||||||
@@ -264,8 +264,8 @@ func getPostsForChannelAroundLastUnread(c *Context, w http.ResponseWriter, r *ht
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
postList.NextPostId = c.App.GetNextPostIdFromPostList(postList)
|
postList.NextPostId = c.App.GetNextPostIdFromPostList(postList, collapsedThreads)
|
||||||
postList.PrevPostId = c.App.GetPrevPostIdFromPostList(postList)
|
postList.PrevPostId = c.App.GetPrevPostIdFromPostList(postList, collapsedThreads)
|
||||||
|
|
||||||
clientPostList := c.App.PreparePostListForClient(postList)
|
clientPostList := c.App.PreparePostListForClient(postList)
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ type AppIface interface {
|
|||||||
// AddCursorIdsForPostList adds NextPostId and PrevPostId as cursor to the PostList.
|
// AddCursorIdsForPostList adds NextPostId and PrevPostId as cursor to the PostList.
|
||||||
// The conditional blocks ensure that it sets those cursor IDs immediately as afterPost, beforePost or empty,
|
// The conditional blocks ensure that it sets those cursor IDs immediately as afterPost, beforePost or empty,
|
||||||
// and only query to database whenever necessary.
|
// and only query to database whenever necessary.
|
||||||
AddCursorIdsForPostList(originalList *model.PostList, afterPost, beforePost string, since int64, page, perPage int)
|
AddCursorIdsForPostList(originalList *model.PostList, afterPost, beforePost string, since int64, page, perPage int, collapsedThreads bool)
|
||||||
// AddPublicKey will add plugin public key to the config. Overwrites the previous file
|
// AddPublicKey will add plugin public key to the config. Overwrites the previous file
|
||||||
AddPublicKey(name string, key io.Reader) *model.AppError
|
AddPublicKey(name string, key io.Reader) *model.AppError
|
||||||
// Caller must close the first return value
|
// Caller must close the first return value
|
||||||
@@ -610,7 +610,7 @@ type AppIface interface {
|
|||||||
GetMessageForNotification(post *model.Post, translateFunc i18n.TranslateFunc) string
|
GetMessageForNotification(post *model.Post, translateFunc i18n.TranslateFunc) string
|
||||||
GetMultipleEmojiByName(names []string) ([]*model.Emoji, *model.AppError)
|
GetMultipleEmojiByName(names []string) ([]*model.Emoji, *model.AppError)
|
||||||
GetNewUsersForTeamPage(teamID string, page, perPage int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError)
|
GetNewUsersForTeamPage(teamID string, page, perPage int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError)
|
||||||
GetNextPostIdFromPostList(postList *model.PostList) string
|
GetNextPostIdFromPostList(postList *model.PostList, collapsedThreads bool) string
|
||||||
GetNotificationNameFormat(user *model.User) string
|
GetNotificationNameFormat(user *model.User) string
|
||||||
GetNumberOfChannelsOnTeam(teamID string) (int, *model.AppError)
|
GetNumberOfChannelsOnTeam(teamID string) (int, *model.AppError)
|
||||||
GetOAuthAccessTokenForCodeFlow(clientId, grantType, redirectUri, code, secret, refreshToken string) (*model.AccessResponse, *model.AppError)
|
GetOAuthAccessTokenForCodeFlow(clientId, grantType, redirectUri, code, secret, refreshToken string) (*model.AccessResponse, *model.AppError)
|
||||||
@@ -636,9 +636,9 @@ type AppIface interface {
|
|||||||
GetPinnedPosts(channelID string) (*model.PostList, *model.AppError)
|
GetPinnedPosts(channelID string) (*model.PostList, *model.AppError)
|
||||||
GetPluginKey(pluginID string, key string) ([]byte, *model.AppError)
|
GetPluginKey(pluginID string, key string) ([]byte, *model.AppError)
|
||||||
GetPlugins() (*model.PluginsResponse, *model.AppError)
|
GetPlugins() (*model.PluginsResponse, *model.AppError)
|
||||||
GetPostAfterTime(channelID string, time int64) (*model.Post, *model.AppError)
|
GetPostAfterTime(channelID string, time int64, collapsedThreads bool) (*model.Post, *model.AppError)
|
||||||
GetPostIdAfterTime(channelID string, time int64) (string, *model.AppError)
|
GetPostIdAfterTime(channelID string, time int64, collapsedThreads bool) (string, *model.AppError)
|
||||||
GetPostIdBeforeTime(channelID string, time int64) (string, *model.AppError)
|
GetPostIdBeforeTime(channelID string, time int64, collapsedThreads bool) (string, *model.AppError)
|
||||||
GetPostThread(postID string, skipFetchThreads, collapsedThreads, collapsedThreadsExtended bool) (*model.PostList, *model.AppError)
|
GetPostThread(postID string, skipFetchThreads, collapsedThreads, collapsedThreadsExtended bool) (*model.PostList, *model.AppError)
|
||||||
GetPosts(channelID string, offset int, limit int) (*model.PostList, *model.AppError)
|
GetPosts(channelID string, offset int, limit int) (*model.PostList, *model.AppError)
|
||||||
GetPostsAfterPost(options model.GetPostsOptions) (*model.PostList, *model.AppError)
|
GetPostsAfterPost(options model.GetPostsOptions) (*model.PostList, *model.AppError)
|
||||||
@@ -651,7 +651,7 @@ type AppIface interface {
|
|||||||
GetPreferenceByCategoryAndNameForUser(userID string, category string, preferenceName string) (*model.Preference, *model.AppError)
|
GetPreferenceByCategoryAndNameForUser(userID string, category string, preferenceName string) (*model.Preference, *model.AppError)
|
||||||
GetPreferenceByCategoryForUser(userID string, category string) (model.Preferences, *model.AppError)
|
GetPreferenceByCategoryForUser(userID string, category string) (model.Preferences, *model.AppError)
|
||||||
GetPreferencesForUser(userID string) (model.Preferences, *model.AppError)
|
GetPreferencesForUser(userID string) (model.Preferences, *model.AppError)
|
||||||
GetPrevPostIdFromPostList(postList *model.PostList) string
|
GetPrevPostIdFromPostList(postList *model.PostList, collapsedThreads bool) string
|
||||||
GetPrivateChannelsForTeam(teamID string, offset int, limit int) (*model.ChannelList, *model.AppError)
|
GetPrivateChannelsForTeam(teamID string, offset int, limit int) (*model.ChannelList, *model.AppError)
|
||||||
GetProfileImage(user *model.User) ([]byte, bool, *model.AppError)
|
GetProfileImage(user *model.User) ([]byte, bool, *model.AppError)
|
||||||
GetPublicChannelsByIdsForTeam(teamID string, channelIDs []string) (*model.ChannelList, *model.AppError)
|
GetPublicChannelsByIdsForTeam(teamID string, channelIDs []string) (*model.ChannelList, *model.AppError)
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ func (a *OpenTracingAppLayer) AddConfigListener(listener func(*model.Config, *mo
|
|||||||
return resultVar0
|
return resultVar0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *OpenTracingAppLayer) AddCursorIdsForPostList(originalList *model.PostList, afterPost string, beforePost string, since int64, page int, perPage int) {
|
func (a *OpenTracingAppLayer) AddCursorIdsForPostList(originalList *model.PostList, afterPost string, beforePost string, since int64, page int, perPage int, collapsedThreads bool) {
|
||||||
origCtx := a.ctx
|
origCtx := a.ctx
|
||||||
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.AddCursorIdsForPostList")
|
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.AddCursorIdsForPostList")
|
||||||
|
|
||||||
@@ -144,7 +144,7 @@ func (a *OpenTracingAppLayer) AddCursorIdsForPostList(originalList *model.PostLi
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
defer span.Finish()
|
defer span.Finish()
|
||||||
a.app.AddCursorIdsForPostList(originalList, afterPost, beforePost, since, page, perPage)
|
a.app.AddCursorIdsForPostList(originalList, afterPost, beforePost, since, page, perPage, collapsedThreads)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *OpenTracingAppLayer) AddDirectChannels(teamID string, user *model.User) *model.AppError {
|
func (a *OpenTracingAppLayer) AddDirectChannels(teamID string, user *model.User) *model.AppError {
|
||||||
@@ -6432,7 +6432,7 @@ func (a *OpenTracingAppLayer) GetNewUsersForTeamPage(teamID string, page int, pe
|
|||||||
return resultVar0, resultVar1
|
return resultVar0, resultVar1
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *OpenTracingAppLayer) GetNextPostIdFromPostList(postList *model.PostList) string {
|
func (a *OpenTracingAppLayer) GetNextPostIdFromPostList(postList *model.PostList, collapsedThreads bool) string {
|
||||||
origCtx := a.ctx
|
origCtx := a.ctx
|
||||||
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.GetNextPostIdFromPostList")
|
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.GetNextPostIdFromPostList")
|
||||||
|
|
||||||
@@ -6444,7 +6444,7 @@ func (a *OpenTracingAppLayer) GetNextPostIdFromPostList(postList *model.PostList
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
defer span.Finish()
|
defer span.Finish()
|
||||||
resultVar0 := a.app.GetNextPostIdFromPostList(postList)
|
resultVar0 := a.app.GetNextPostIdFromPostList(postList, collapsedThreads)
|
||||||
|
|
||||||
return resultVar0
|
return resultVar0
|
||||||
}
|
}
|
||||||
@@ -7072,7 +7072,7 @@ func (a *OpenTracingAppLayer) GetPluginsEnvironment() *plugin.Environment {
|
|||||||
return resultVar0
|
return resultVar0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *OpenTracingAppLayer) GetPostAfterTime(channelID string, time int64) (*model.Post, *model.AppError) {
|
func (a *OpenTracingAppLayer) GetPostAfterTime(channelID string, time int64, collapsedThreads bool) (*model.Post, *model.AppError) {
|
||||||
origCtx := a.ctx
|
origCtx := a.ctx
|
||||||
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.GetPostAfterTime")
|
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.GetPostAfterTime")
|
||||||
|
|
||||||
@@ -7084,7 +7084,7 @@ func (a *OpenTracingAppLayer) GetPostAfterTime(channelID string, time int64) (*m
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
defer span.Finish()
|
defer span.Finish()
|
||||||
resultVar0, resultVar1 := a.app.GetPostAfterTime(channelID, time)
|
resultVar0, resultVar1 := a.app.GetPostAfterTime(channelID, time, collapsedThreads)
|
||||||
|
|
||||||
if resultVar1 != nil {
|
if resultVar1 != nil {
|
||||||
span.LogFields(spanlog.Error(resultVar1))
|
span.LogFields(spanlog.Error(resultVar1))
|
||||||
@@ -7094,7 +7094,7 @@ func (a *OpenTracingAppLayer) GetPostAfterTime(channelID string, time int64) (*m
|
|||||||
return resultVar0, resultVar1
|
return resultVar0, resultVar1
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *OpenTracingAppLayer) GetPostIdAfterTime(channelID string, time int64) (string, *model.AppError) {
|
func (a *OpenTracingAppLayer) GetPostIdAfterTime(channelID string, time int64, collapsedThreads bool) (string, *model.AppError) {
|
||||||
origCtx := a.ctx
|
origCtx := a.ctx
|
||||||
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.GetPostIdAfterTime")
|
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.GetPostIdAfterTime")
|
||||||
|
|
||||||
@@ -7106,7 +7106,7 @@ func (a *OpenTracingAppLayer) GetPostIdAfterTime(channelID string, time int64) (
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
defer span.Finish()
|
defer span.Finish()
|
||||||
resultVar0, resultVar1 := a.app.GetPostIdAfterTime(channelID, time)
|
resultVar0, resultVar1 := a.app.GetPostIdAfterTime(channelID, time, collapsedThreads)
|
||||||
|
|
||||||
if resultVar1 != nil {
|
if resultVar1 != nil {
|
||||||
span.LogFields(spanlog.Error(resultVar1))
|
span.LogFields(spanlog.Error(resultVar1))
|
||||||
@@ -7116,7 +7116,7 @@ func (a *OpenTracingAppLayer) GetPostIdAfterTime(channelID string, time int64) (
|
|||||||
return resultVar0, resultVar1
|
return resultVar0, resultVar1
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *OpenTracingAppLayer) GetPostIdBeforeTime(channelID string, time int64) (string, *model.AppError) {
|
func (a *OpenTracingAppLayer) GetPostIdBeforeTime(channelID string, time int64, collapsedThreads bool) (string, *model.AppError) {
|
||||||
origCtx := a.ctx
|
origCtx := a.ctx
|
||||||
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.GetPostIdBeforeTime")
|
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.GetPostIdBeforeTime")
|
||||||
|
|
||||||
@@ -7128,7 +7128,7 @@ func (a *OpenTracingAppLayer) GetPostIdBeforeTime(channelID string, time int64)
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
defer span.Finish()
|
defer span.Finish()
|
||||||
resultVar0, resultVar1 := a.app.GetPostIdBeforeTime(channelID, time)
|
resultVar0, resultVar1 := a.app.GetPostIdBeforeTime(channelID, time, collapsedThreads)
|
||||||
|
|
||||||
if resultVar1 != nil {
|
if resultVar1 != nil {
|
||||||
span.LogFields(spanlog.Error(resultVar1))
|
span.LogFields(spanlog.Error(resultVar1))
|
||||||
@@ -7397,7 +7397,7 @@ func (a *OpenTracingAppLayer) GetPreferencesForUser(userID string) (model.Prefer
|
|||||||
return resultVar0, resultVar1
|
return resultVar0, resultVar1
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *OpenTracingAppLayer) GetPrevPostIdFromPostList(postList *model.PostList) string {
|
func (a *OpenTracingAppLayer) GetPrevPostIdFromPostList(postList *model.PostList, collapsedThreads bool) string {
|
||||||
origCtx := a.ctx
|
origCtx := a.ctx
|
||||||
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.GetPrevPostIdFromPostList")
|
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.GetPrevPostIdFromPostList")
|
||||||
|
|
||||||
@@ -7409,7 +7409,7 @@ func (a *OpenTracingAppLayer) GetPrevPostIdFromPostList(postList *model.PostList
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
defer span.Finish()
|
defer span.Finish()
|
||||||
resultVar0 := a.app.GetPrevPostIdFromPostList(postList)
|
resultVar0 := a.app.GetPrevPostIdFromPostList(postList, collapsedThreads)
|
||||||
|
|
||||||
return resultVar0
|
return resultVar0
|
||||||
}
|
}
|
||||||
|
|||||||
28
app/post.go
28
app/post.go
@@ -876,8 +876,8 @@ func (a *App) GetPostsAroundPost(before bool, options model.GetPostsOptions) (*m
|
|||||||
return postList, nil
|
return postList, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetPostAfterTime(channelID string, time int64) (*model.Post, *model.AppError) {
|
func (a *App) GetPostAfterTime(channelID string, time int64, collapsedThreads bool) (*model.Post, *model.AppError) {
|
||||||
post, err := a.Srv().Store.Post().GetPostAfterTime(channelID, time)
|
post, err := a.Srv().Store.Post().GetPostAfterTime(channelID, time, collapsedThreads)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetPostAfterTime", "app.post.get_post_after_time.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetPostAfterTime", "app.post.get_post_after_time.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -885,8 +885,8 @@ func (a *App) GetPostAfterTime(channelID string, time int64) (*model.Post, *mode
|
|||||||
return post, nil
|
return post, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetPostIdAfterTime(channelID string, time int64) (string, *model.AppError) {
|
func (a *App) GetPostIdAfterTime(channelID string, time int64, collapsedThreads bool) (string, *model.AppError) {
|
||||||
postID, err := a.Srv().Store.Post().GetPostIdAfterTime(channelID, time)
|
postID, err := a.Srv().Store.Post().GetPostIdAfterTime(channelID, time, collapsedThreads)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", model.NewAppError("GetPostIdAfterTime", "app.post.get_post_id_around.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return "", model.NewAppError("GetPostIdAfterTime", "app.post.get_post_id_around.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -894,8 +894,8 @@ func (a *App) GetPostIdAfterTime(channelID string, time int64) (string, *model.A
|
|||||||
return postID, nil
|
return postID, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetPostIdBeforeTime(channelID string, time int64) (string, *model.AppError) {
|
func (a *App) GetPostIdBeforeTime(channelID string, time int64, collapsedThreads bool) (string, *model.AppError) {
|
||||||
postID, err := a.Srv().Store.Post().GetPostIdBeforeTime(channelID, time)
|
postID, err := a.Srv().Store.Post().GetPostIdBeforeTime(channelID, time, collapsedThreads)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", model.NewAppError("GetPostIdBeforeTime", "app.post.get_post_id_around.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return "", model.NewAppError("GetPostIdBeforeTime", "app.post.get_post_id_around.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -903,11 +903,11 @@ func (a *App) GetPostIdBeforeTime(channelID string, time int64) (string, *model.
|
|||||||
return postID, nil
|
return postID, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetNextPostIdFromPostList(postList *model.PostList) string {
|
func (a *App) GetNextPostIdFromPostList(postList *model.PostList, collapsedThreads bool) string {
|
||||||
if len(postList.Order) > 0 {
|
if len(postList.Order) > 0 {
|
||||||
firstPostId := postList.Order[0]
|
firstPostId := postList.Order[0]
|
||||||
firstPost := postList.Posts[firstPostId]
|
firstPost := postList.Posts[firstPostId]
|
||||||
nextPostId, err := a.GetPostIdAfterTime(firstPost.ChannelId, firstPost.CreateAt)
|
nextPostId, err := a.GetPostIdAfterTime(firstPost.ChannelId, firstPost.CreateAt, collapsedThreads)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mlog.Warn("GetNextPostIdFromPostList: failed in getting next post", mlog.Err(err))
|
mlog.Warn("GetNextPostIdFromPostList: failed in getting next post", mlog.Err(err))
|
||||||
}
|
}
|
||||||
@@ -918,11 +918,11 @@ func (a *App) GetNextPostIdFromPostList(postList *model.PostList) string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetPrevPostIdFromPostList(postList *model.PostList) string {
|
func (a *App) GetPrevPostIdFromPostList(postList *model.PostList, collapsedThreads bool) string {
|
||||||
if len(postList.Order) > 0 {
|
if len(postList.Order) > 0 {
|
||||||
lastPostId := postList.Order[len(postList.Order)-1]
|
lastPostId := postList.Order[len(postList.Order)-1]
|
||||||
lastPost := postList.Posts[lastPostId]
|
lastPost := postList.Posts[lastPostId]
|
||||||
previousPostId, err := a.GetPostIdBeforeTime(lastPost.ChannelId, lastPost.CreateAt)
|
previousPostId, err := a.GetPostIdBeforeTime(lastPost.ChannelId, lastPost.CreateAt, collapsedThreads)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mlog.Warn("GetPrevPostIdFromPostList: failed in getting previous post", mlog.Err(err))
|
mlog.Warn("GetPrevPostIdFromPostList: failed in getting previous post", mlog.Err(err))
|
||||||
}
|
}
|
||||||
@@ -936,7 +936,7 @@ func (a *App) GetPrevPostIdFromPostList(postList *model.PostList) string {
|
|||||||
// AddCursorIdsForPostList adds NextPostId and PrevPostId as cursor to the PostList.
|
// AddCursorIdsForPostList adds NextPostId and PrevPostId as cursor to the PostList.
|
||||||
// The conditional blocks ensure that it sets those cursor IDs immediately as afterPost, beforePost or empty,
|
// The conditional blocks ensure that it sets those cursor IDs immediately as afterPost, beforePost or empty,
|
||||||
// and only query to database whenever necessary.
|
// and only query to database whenever necessary.
|
||||||
func (a *App) AddCursorIdsForPostList(originalList *model.PostList, afterPost, beforePost string, since int64, page, perPage int) {
|
func (a *App) AddCursorIdsForPostList(originalList *model.PostList, afterPost, beforePost string, since int64, page, perPage int, collapsedThreads bool) {
|
||||||
prevPostIdSet := false
|
prevPostIdSet := false
|
||||||
prevPostId := ""
|
prevPostId := ""
|
||||||
nextPostIdSet := false
|
nextPostIdSet := false
|
||||||
@@ -966,11 +966,11 @@ func (a *App) AddCursorIdsForPostList(originalList *model.PostList, afterPost, b
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !nextPostIdSet {
|
if !nextPostIdSet {
|
||||||
nextPostId = a.GetNextPostIdFromPostList(originalList)
|
nextPostId = a.GetNextPostIdFromPostList(originalList, collapsedThreads)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !prevPostIdSet {
|
if !prevPostIdSet {
|
||||||
prevPostId = a.GetPrevPostIdFromPostList(originalList)
|
prevPostId = a.GetPrevPostIdFromPostList(originalList, collapsedThreads)
|
||||||
}
|
}
|
||||||
|
|
||||||
originalList.NextPostId = nextPostId
|
originalList.NextPostId = nextPostId
|
||||||
@@ -985,7 +985,7 @@ func (a *App) GetPostsForChannelAroundLastUnread(channelID, userID string, limit
|
|||||||
return model.NewPostList(), nil
|
return model.NewPostList(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
lastUnreadPostId, err := a.GetPostIdAfterTime(channelID, member.LastViewedAt)
|
lastUnreadPostId, err := a.GetPostIdAfterTime(channelID, member.LastViewedAt, collapsedThreads)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if lastUnreadPostId == "" {
|
} else if lastUnreadPostId == "" {
|
||||||
|
|||||||
@@ -5112,7 +5112,7 @@ func (s *OpenTracingLayerPostStore) GetParentsForExportAfter(limit int, afterID
|
|||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *OpenTracingLayerPostStore) GetPostAfterTime(channelID string, time int64) (*model.Post, error) {
|
func (s *OpenTracingLayerPostStore) GetPostAfterTime(channelID string, time int64, collapsedThreads bool) (*model.Post, error) {
|
||||||
origCtx := s.Root.Store.Context()
|
origCtx := s.Root.Store.Context()
|
||||||
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "PostStore.GetPostAfterTime")
|
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "PostStore.GetPostAfterTime")
|
||||||
s.Root.Store.SetContext(newCtx)
|
s.Root.Store.SetContext(newCtx)
|
||||||
@@ -5121,7 +5121,7 @@ func (s *OpenTracingLayerPostStore) GetPostAfterTime(channelID string, time int6
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
defer span.Finish()
|
defer span.Finish()
|
||||||
result, err := s.PostStore.GetPostAfterTime(channelID, time)
|
result, err := s.PostStore.GetPostAfterTime(channelID, time, collapsedThreads)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
span.LogFields(spanlog.Error(err))
|
span.LogFields(spanlog.Error(err))
|
||||||
ext.Error.Set(span, true)
|
ext.Error.Set(span, true)
|
||||||
@@ -5130,7 +5130,7 @@ func (s *OpenTracingLayerPostStore) GetPostAfterTime(channelID string, time int6
|
|||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *OpenTracingLayerPostStore) GetPostIdAfterTime(channelID string, time int64) (string, error) {
|
func (s *OpenTracingLayerPostStore) GetPostIdAfterTime(channelID string, time int64, collapsedThreads bool) (string, error) {
|
||||||
origCtx := s.Root.Store.Context()
|
origCtx := s.Root.Store.Context()
|
||||||
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "PostStore.GetPostIdAfterTime")
|
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "PostStore.GetPostIdAfterTime")
|
||||||
s.Root.Store.SetContext(newCtx)
|
s.Root.Store.SetContext(newCtx)
|
||||||
@@ -5139,7 +5139,7 @@ func (s *OpenTracingLayerPostStore) GetPostIdAfterTime(channelID string, time in
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
defer span.Finish()
|
defer span.Finish()
|
||||||
result, err := s.PostStore.GetPostIdAfterTime(channelID, time)
|
result, err := s.PostStore.GetPostIdAfterTime(channelID, time, collapsedThreads)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
span.LogFields(spanlog.Error(err))
|
span.LogFields(spanlog.Error(err))
|
||||||
ext.Error.Set(span, true)
|
ext.Error.Set(span, true)
|
||||||
@@ -5148,7 +5148,7 @@ func (s *OpenTracingLayerPostStore) GetPostIdAfterTime(channelID string, time in
|
|||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *OpenTracingLayerPostStore) GetPostIdBeforeTime(channelID string, time int64) (string, error) {
|
func (s *OpenTracingLayerPostStore) GetPostIdBeforeTime(channelID string, time int64, collapsedThreads bool) (string, error) {
|
||||||
origCtx := s.Root.Store.Context()
|
origCtx := s.Root.Store.Context()
|
||||||
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "PostStore.GetPostIdBeforeTime")
|
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "PostStore.GetPostIdBeforeTime")
|
||||||
s.Root.Store.SetContext(newCtx)
|
s.Root.Store.SetContext(newCtx)
|
||||||
@@ -5157,7 +5157,7 @@ func (s *OpenTracingLayerPostStore) GetPostIdBeforeTime(channelID string, time i
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
defer span.Finish()
|
defer span.Finish()
|
||||||
result, err := s.PostStore.GetPostIdBeforeTime(channelID, time)
|
result, err := s.PostStore.GetPostIdBeforeTime(channelID, time, collapsedThreads)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
span.LogFields(spanlog.Error(err))
|
span.LogFields(spanlog.Error(err))
|
||||||
ext.Error.Set(span, true)
|
ext.Error.Set(span, true)
|
||||||
|
|||||||
@@ -5514,11 +5514,11 @@ func (s *RetryLayerPostStore) GetParentsForExportAfter(limit int, afterID string
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *RetryLayerPostStore) GetPostAfterTime(channelID string, time int64) (*model.Post, error) {
|
func (s *RetryLayerPostStore) GetPostAfterTime(channelID string, time int64, collapsedThreads bool) (*model.Post, error) {
|
||||||
|
|
||||||
tries := 0
|
tries := 0
|
||||||
for {
|
for {
|
||||||
result, err := s.PostStore.GetPostAfterTime(channelID, time)
|
result, err := s.PostStore.GetPostAfterTime(channelID, time, collapsedThreads)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
@@ -5534,11 +5534,11 @@ func (s *RetryLayerPostStore) GetPostAfterTime(channelID string, time int64) (*m
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *RetryLayerPostStore) GetPostIdAfterTime(channelID string, time int64) (string, error) {
|
func (s *RetryLayerPostStore) GetPostIdAfterTime(channelID string, time int64, collapsedThreads bool) (string, error) {
|
||||||
|
|
||||||
tries := 0
|
tries := 0
|
||||||
for {
|
for {
|
||||||
result, err := s.PostStore.GetPostIdAfterTime(channelID, time)
|
result, err := s.PostStore.GetPostIdAfterTime(channelID, time, collapsedThreads)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
@@ -5554,11 +5554,11 @@ func (s *RetryLayerPostStore) GetPostIdAfterTime(channelID string, time int64) (
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *RetryLayerPostStore) GetPostIdBeforeTime(channelID string, time int64) (string, error) {
|
func (s *RetryLayerPostStore) GetPostIdBeforeTime(channelID string, time int64, collapsedThreads bool) (string, error) {
|
||||||
|
|
||||||
tries := 0
|
tries := 0
|
||||||
for {
|
for {
|
||||||
result, err := s.PostStore.GetPostIdBeforeTime(channelID, time)
|
result, err := s.PostStore.GetPostIdBeforeTime(channelID, time, collapsedThreads)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1026,15 +1026,15 @@ func (s *SqlPostStore) getPostsAround(before bool, options model.GetPostsOptions
|
|||||||
return list, nil
|
return list, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SqlPostStore) GetPostIdBeforeTime(channelId string, time int64) (string, error) {
|
func (s *SqlPostStore) GetPostIdBeforeTime(channelId string, time int64, collapsedThreads bool) (string, error) {
|
||||||
return s.getPostIdAroundTime(channelId, time, true)
|
return s.getPostIdAroundTime(channelId, time, true, collapsedThreads)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SqlPostStore) GetPostIdAfterTime(channelId string, time int64) (string, error) {
|
func (s *SqlPostStore) GetPostIdAfterTime(channelId string, time int64, collapsedThreads bool) (string, error) {
|
||||||
return s.getPostIdAroundTime(channelId, time, false)
|
return s.getPostIdAroundTime(channelId, time, false, collapsedThreads)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SqlPostStore) getPostIdAroundTime(channelId string, time int64, before bool) (string, error) {
|
func (s *SqlPostStore) getPostIdAroundTime(channelId string, time int64, before bool, collapsedThreads bool) (string, error) {
|
||||||
var direction sq.Sqlizer
|
var direction sq.Sqlizer
|
||||||
var sort string
|
var sort string
|
||||||
if before {
|
if before {
|
||||||
@@ -1053,14 +1053,18 @@ func (s *SqlPostStore) getPostIdAroundTime(channelId string, time int64, before
|
|||||||
table += " USE INDEX(idx_posts_channel_id_delete_at_create_at)"
|
table += " USE INDEX(idx_posts_channel_id_delete_at_create_at)"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
conditions := sq.And{
|
||||||
|
direction,
|
||||||
|
sq.Eq{"ChannelId": channelId},
|
||||||
|
sq.Eq{"DeleteAt": int(0)},
|
||||||
|
}
|
||||||
|
if collapsedThreads {
|
||||||
|
conditions = sq.And{conditions, sq.Eq{"RootId": ""}}
|
||||||
|
}
|
||||||
query := s.getQueryBuilder().
|
query := s.getQueryBuilder().
|
||||||
Select("Id").
|
Select("Id").
|
||||||
From(table).
|
From(table).
|
||||||
Where(sq.And{
|
Where(conditions).
|
||||||
direction,
|
|
||||||
sq.Eq{"ChannelId": channelId},
|
|
||||||
sq.Eq{"DeleteAt": int(0)},
|
|
||||||
}).
|
|
||||||
// Adding ChannelId and DeleteAt order columns
|
// Adding ChannelId and DeleteAt order columns
|
||||||
// to let mysql choose the "idx_posts_channel_id_delete_at_create_at" index always.
|
// to let mysql choose the "idx_posts_channel_id_delete_at_create_at" index always.
|
||||||
// See MM-23369.
|
// See MM-23369.
|
||||||
@@ -1082,7 +1086,7 @@ func (s *SqlPostStore) getPostIdAroundTime(channelId string, time int64, before
|
|||||||
return postId, nil
|
return postId, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SqlPostStore) GetPostAfterTime(channelId string, time int64) (*model.Post, error) {
|
func (s *SqlPostStore) GetPostAfterTime(channelId string, time int64, collapsedThreads bool) (*model.Post, error) {
|
||||||
table := "Posts"
|
table := "Posts"
|
||||||
// We force MySQL to use the right index to prevent it from accidentally
|
// We force MySQL to use the right index to prevent it from accidentally
|
||||||
// using the index_merge_intersection optimization.
|
// using the index_merge_intersection optimization.
|
||||||
@@ -1090,15 +1094,18 @@ func (s *SqlPostStore) GetPostAfterTime(channelId string, time int64) (*model.Po
|
|||||||
if s.DriverName() == model.DATABASE_DRIVER_MYSQL {
|
if s.DriverName() == model.DATABASE_DRIVER_MYSQL {
|
||||||
table += " USE INDEX(idx_posts_channel_id_delete_at_create_at)"
|
table += " USE INDEX(idx_posts_channel_id_delete_at_create_at)"
|
||||||
}
|
}
|
||||||
|
conditions := sq.And{
|
||||||
|
sq.Gt{"CreateAt": time},
|
||||||
|
sq.Eq{"ChannelId": channelId},
|
||||||
|
sq.Eq{"DeleteAt": int(0)},
|
||||||
|
}
|
||||||
|
if collapsedThreads {
|
||||||
|
conditions = sq.And{conditions, sq.Eq{"RootId": ""}}
|
||||||
|
}
|
||||||
query := s.getQueryBuilder().
|
query := s.getQueryBuilder().
|
||||||
Select("*").
|
Select("*").
|
||||||
From(table).
|
From(table).
|
||||||
Where(sq.And{
|
Where(conditions).
|
||||||
sq.Gt{"CreateAt": time},
|
|
||||||
sq.Eq{"ChannelId": channelId},
|
|
||||||
sq.Eq{"DeleteAt": int(0)},
|
|
||||||
}).
|
|
||||||
// Adding ChannelId and DeleteAt order columns
|
// Adding ChannelId and DeleteAt order columns
|
||||||
// to let mysql choose the "idx_posts_channel_id_delete_at_create_at" index always.
|
// to let mysql choose the "idx_posts_channel_id_delete_at_create_at" index always.
|
||||||
// See MM-23369.
|
// See MM-23369.
|
||||||
|
|||||||
@@ -287,9 +287,9 @@ type PostStore interface {
|
|||||||
GetPostsBefore(options model.GetPostsOptions) (*model.PostList, error)
|
GetPostsBefore(options model.GetPostsOptions) (*model.PostList, error)
|
||||||
GetPostsAfter(options model.GetPostsOptions) (*model.PostList, error)
|
GetPostsAfter(options model.GetPostsOptions) (*model.PostList, error)
|
||||||
GetPostsSince(options model.GetPostsSinceOptions, allowFromCache bool) (*model.PostList, error)
|
GetPostsSince(options model.GetPostsSinceOptions, allowFromCache bool) (*model.PostList, error)
|
||||||
GetPostAfterTime(channelID string, time int64) (*model.Post, error)
|
GetPostAfterTime(channelID string, time int64, collapsedThreads bool) (*model.Post, error)
|
||||||
GetPostIdAfterTime(channelID string, time int64) (string, error)
|
GetPostIdAfterTime(channelID string, time int64, collapsedThreads bool) (string, error)
|
||||||
GetPostIdBeforeTime(channelID string, time int64) (string, error)
|
GetPostIdBeforeTime(channelID string, time int64, collapsedThreads bool) (string, error)
|
||||||
GetEtag(channelID string, allowFromCache bool, collapsedThreads bool) string
|
GetEtag(channelID string, allowFromCache bool, collapsedThreads bool) string
|
||||||
Search(teamID string, userId string, params *model.SearchParams) (*model.PostList, error)
|
Search(teamID string, userId string, params *model.SearchParams) (*model.PostList, error)
|
||||||
AnalyticsUserCountsWithPostsByDay(teamID string) (model.AnalyticsRows, error)
|
AnalyticsUserCountsWithPostsByDay(teamID string) (model.AnalyticsRows, error)
|
||||||
|
|||||||
@@ -310,13 +310,13 @@ func (_m *PostStore) GetParentsForExportAfter(limit int, afterID string) ([]*mod
|
|||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPostAfterTime provides a mock function with given fields: channelID, time
|
// GetPostAfterTime provides a mock function with given fields: channelID, time, collapsedThreads
|
||||||
func (_m *PostStore) GetPostAfterTime(channelID string, time int64) (*model.Post, error) {
|
func (_m *PostStore) GetPostAfterTime(channelID string, time int64, collapsedThreads bool) (*model.Post, error) {
|
||||||
ret := _m.Called(channelID, time)
|
ret := _m.Called(channelID, time, collapsedThreads)
|
||||||
|
|
||||||
var r0 *model.Post
|
var r0 *model.Post
|
||||||
if rf, ok := ret.Get(0).(func(string, int64) *model.Post); ok {
|
if rf, ok := ret.Get(0).(func(string, int64, bool) *model.Post); ok {
|
||||||
r0 = rf(channelID, time)
|
r0 = rf(channelID, time, collapsedThreads)
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(*model.Post)
|
r0 = ret.Get(0).(*model.Post)
|
||||||
@@ -324,8 +324,8 @@ func (_m *PostStore) GetPostAfterTime(channelID string, time int64) (*model.Post
|
|||||||
}
|
}
|
||||||
|
|
||||||
var r1 error
|
var r1 error
|
||||||
if rf, ok := ret.Get(1).(func(string, int64) error); ok {
|
if rf, ok := ret.Get(1).(func(string, int64, bool) error); ok {
|
||||||
r1 = rf(channelID, time)
|
r1 = rf(channelID, time, collapsedThreads)
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
@@ -333,20 +333,20 @@ func (_m *PostStore) GetPostAfterTime(channelID string, time int64) (*model.Post
|
|||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPostIdAfterTime provides a mock function with given fields: channelID, time
|
// GetPostIdAfterTime provides a mock function with given fields: channelID, time, collapsedThreads
|
||||||
func (_m *PostStore) GetPostIdAfterTime(channelID string, time int64) (string, error) {
|
func (_m *PostStore) GetPostIdAfterTime(channelID string, time int64, collapsedThreads bool) (string, error) {
|
||||||
ret := _m.Called(channelID, time)
|
ret := _m.Called(channelID, time, collapsedThreads)
|
||||||
|
|
||||||
var r0 string
|
var r0 string
|
||||||
if rf, ok := ret.Get(0).(func(string, int64) string); ok {
|
if rf, ok := ret.Get(0).(func(string, int64, bool) string); ok {
|
||||||
r0 = rf(channelID, time)
|
r0 = rf(channelID, time, collapsedThreads)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(string)
|
r0 = ret.Get(0).(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
var r1 error
|
var r1 error
|
||||||
if rf, ok := ret.Get(1).(func(string, int64) error); ok {
|
if rf, ok := ret.Get(1).(func(string, int64, bool) error); ok {
|
||||||
r1 = rf(channelID, time)
|
r1 = rf(channelID, time, collapsedThreads)
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
@@ -354,20 +354,20 @@ func (_m *PostStore) GetPostIdAfterTime(channelID string, time int64) (string, e
|
|||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPostIdBeforeTime provides a mock function with given fields: channelID, time
|
// GetPostIdBeforeTime provides a mock function with given fields: channelID, time, collapsedThreads
|
||||||
func (_m *PostStore) GetPostIdBeforeTime(channelID string, time int64) (string, error) {
|
func (_m *PostStore) GetPostIdBeforeTime(channelID string, time int64, collapsedThreads bool) (string, error) {
|
||||||
ret := _m.Called(channelID, time)
|
ret := _m.Called(channelID, time, collapsedThreads)
|
||||||
|
|
||||||
var r0 string
|
var r0 string
|
||||||
if rf, ok := ret.Get(0).(func(string, int64) string); ok {
|
if rf, ok := ret.Get(0).(func(string, int64, bool) string); ok {
|
||||||
r0 = rf(channelID, time)
|
r0 = rf(channelID, time, collapsedThreads)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(string)
|
r0 = ret.Get(0).(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
var r1 error
|
var r1 error
|
||||||
if rf, ok := ret.Get(1).(func(string, int64) error); ok {
|
if rf, ok := ret.Get(1).(func(string, int64, bool) error); ok {
|
||||||
r1 = rf(channelID, time)
|
r1 = rf(channelID, time, collapsedThreads)
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1579,39 +1579,39 @@ func testPostStoreGetPostBeforeAfter(t *testing.T, ss store.Store) {
|
|||||||
_, err = ss.Post().Save(o2a)
|
_, err = ss.Post().Save(o2a)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
rPostId1, err := ss.Post().GetPostIdBeforeTime(channelId, o0a.CreateAt)
|
rPostId1, err := ss.Post().GetPostIdBeforeTime(channelId, o0a.CreateAt, false)
|
||||||
require.Equal(t, rPostId1, o1.Id, "should return before post o1")
|
require.Equal(t, rPostId1, o1.Id, "should return before post o1")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
rPostId1, err = ss.Post().GetPostIdAfterTime(channelId, o0b.CreateAt)
|
rPostId1, err = ss.Post().GetPostIdAfterTime(channelId, o0b.CreateAt, false)
|
||||||
require.Equal(t, rPostId1, o2.Id, "should return before post o2")
|
require.Equal(t, rPostId1, o2.Id, "should return before post o2")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
rPost1, err := ss.Post().GetPostAfterTime(channelId, o0b.CreateAt)
|
rPost1, err := ss.Post().GetPostAfterTime(channelId, o0b.CreateAt, false)
|
||||||
require.Equal(t, rPost1.Id, o2.Id, "should return before post o2")
|
require.Equal(t, rPost1.Id, o2.Id, "should return before post o2")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
rPostId2, err := ss.Post().GetPostIdBeforeTime(channelId, o0.CreateAt)
|
rPostId2, err := ss.Post().GetPostIdBeforeTime(channelId, o0.CreateAt, false)
|
||||||
require.Empty(t, rPostId2, "should return no post")
|
require.Empty(t, rPostId2, "should return no post")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
rPostId2, err = ss.Post().GetPostIdAfterTime(channelId, o0.CreateAt)
|
rPostId2, err = ss.Post().GetPostIdAfterTime(channelId, o0.CreateAt, false)
|
||||||
require.Equal(t, rPostId2, o1.Id, "should return before post o1")
|
require.Equal(t, rPostId2, o1.Id, "should return before post o1")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
rPost2, err := ss.Post().GetPostAfterTime(channelId, o0.CreateAt)
|
rPost2, err := ss.Post().GetPostAfterTime(channelId, o0.CreateAt, false)
|
||||||
require.Equal(t, rPost2.Id, o1.Id, "should return before post o1")
|
require.Equal(t, rPost2.Id, o1.Id, "should return before post o1")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
rPostId3, err := ss.Post().GetPostIdBeforeTime(channelId, o2a.CreateAt)
|
rPostId3, err := ss.Post().GetPostIdBeforeTime(channelId, o2a.CreateAt, false)
|
||||||
require.Equal(t, rPostId3, o2.Id, "should return before post o2")
|
require.Equal(t, rPostId3, o2.Id, "should return before post o2")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
rPostId3, err = ss.Post().GetPostIdAfterTime(channelId, o2a.CreateAt)
|
rPostId3, err = ss.Post().GetPostIdAfterTime(channelId, o2a.CreateAt, false)
|
||||||
require.Empty(t, rPostId3, "should return no post")
|
require.Empty(t, rPostId3, "should return no post")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
rPost3, err := ss.Post().GetPostAfterTime(channelId, o2a.CreateAt)
|
rPost3, err := ss.Post().GetPostAfterTime(channelId, o2a.CreateAt, false)
|
||||||
require.Empty(t, rPost3, "should return no post")
|
require.Empty(t, rPost3, "should return no post")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4636,10 +4636,10 @@ func (s *TimerLayerPostStore) GetParentsForExportAfter(limit int, afterID string
|
|||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *TimerLayerPostStore) GetPostAfterTime(channelID string, time int64) (*model.Post, error) {
|
func (s *TimerLayerPostStore) GetPostAfterTime(channelID string, time int64, collapsedThreads bool) (*model.Post, error) {
|
||||||
start := timemodule.Now()
|
start := timemodule.Now()
|
||||||
|
|
||||||
result, err := s.PostStore.GetPostAfterTime(channelID, time)
|
result, err := s.PostStore.GetPostAfterTime(channelID, time, collapsedThreads)
|
||||||
|
|
||||||
elapsed := float64(timemodule.Since(start)) / float64(timemodule.Second)
|
elapsed := float64(timemodule.Since(start)) / float64(timemodule.Second)
|
||||||
if s.Root.Metrics != nil {
|
if s.Root.Metrics != nil {
|
||||||
@@ -4652,10 +4652,10 @@ func (s *TimerLayerPostStore) GetPostAfterTime(channelID string, time int64) (*m
|
|||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *TimerLayerPostStore) GetPostIdAfterTime(channelID string, time int64) (string, error) {
|
func (s *TimerLayerPostStore) GetPostIdAfterTime(channelID string, time int64, collapsedThreads bool) (string, error) {
|
||||||
start := timemodule.Now()
|
start := timemodule.Now()
|
||||||
|
|
||||||
result, err := s.PostStore.GetPostIdAfterTime(channelID, time)
|
result, err := s.PostStore.GetPostIdAfterTime(channelID, time, collapsedThreads)
|
||||||
|
|
||||||
elapsed := float64(timemodule.Since(start)) / float64(timemodule.Second)
|
elapsed := float64(timemodule.Since(start)) / float64(timemodule.Second)
|
||||||
if s.Root.Metrics != nil {
|
if s.Root.Metrics != nil {
|
||||||
@@ -4668,10 +4668,10 @@ func (s *TimerLayerPostStore) GetPostIdAfterTime(channelID string, time int64) (
|
|||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *TimerLayerPostStore) GetPostIdBeforeTime(channelID string, time int64) (string, error) {
|
func (s *TimerLayerPostStore) GetPostIdBeforeTime(channelID string, time int64, collapsedThreads bool) (string, error) {
|
||||||
start := timemodule.Now()
|
start := timemodule.Now()
|
||||||
|
|
||||||
result, err := s.PostStore.GetPostIdBeforeTime(channelID, time)
|
result, err := s.PostStore.GetPostIdBeforeTime(channelID, time, collapsedThreads)
|
||||||
|
|
||||||
elapsed := float64(timemodule.Since(start)) / float64(timemodule.Second)
|
elapsed := float64(timemodule.Since(start)) / float64(timemodule.Second)
|
||||||
if s.Root.Metrics != nil {
|
if s.Root.Metrics != nil {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user