Fixed bug around channel file sidebar (#27705)
* Fixed the issue for DB layer, ES to go * Handled channel bookmarks * Handled Bleve * Lint fix * Added channel bookmark test * Skip bleve test * Used common function * SKipping ES as indexing logic in unavailable in test
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
d8b01bde2e
Коммит
eb6336ce7a
@@ -183,6 +183,16 @@ var searchFileInfoStoreTests = []searchTest{
|
|||||||
Fn: testFileInfoSearchEmailsWithoutQuotes,
|
Fn: testFileInfoSearchEmailsWithoutQuotes,
|
||||||
Tags: []string{EngineElasticSearch},
|
Tags: []string{EngineElasticSearch},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "Should not search files not attached to a post",
|
||||||
|
Fn: testFileInfoSearchNoResultForPostlessFileInfos,
|
||||||
|
Tags: []string{EnginePostgres, EngineMySQL},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "Should search files part of channel bookmarks",
|
||||||
|
Fn: testFileInfoSearchShowChannelBookmarkFiles,
|
||||||
|
Tags: []string{EnginePostgres, EngineMySQL},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSearchFileInfoStore(t *testing.T, s store.Store, testEngine *SearchTestEngine) {
|
func TestSearchFileInfoStore(t *testing.T, s store.Store, testEngine *SearchTestEngine) {
|
||||||
@@ -1645,3 +1655,34 @@ func testFileInfoSearchEmailsWithoutQuotes(t *testing.T, th *SearchTestHelper) {
|
|||||||
require.Len(t, results.FileInfos, 1)
|
require.Len(t, results.FileInfos, 1)
|
||||||
th.checkFileInfoInSearchResults(t, p1.Id, results.FileInfos)
|
th.checkFileInfoInSearchResults(t, p1.Id, results.FileInfos)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testFileInfoSearchNoResultForPostlessFileInfos(t *testing.T, th *SearchTestHelper) {
|
||||||
|
_, err := th.createFileInfo(th.User.Id, "", th.ChannelBasic.Id, "message test@test.com", "message test@test.com", "jpg", "image/jpeg", 0, 0)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
defer th.deleteUserFileInfos(th.User.Id)
|
||||||
|
|
||||||
|
params := &model.SearchParams{
|
||||||
|
InChannels: []string{th.ChannelBasic.Id},
|
||||||
|
}
|
||||||
|
results, err := th.Store.FileInfo().Search(th.Context, []*model.SearchParams{params}, th.User.Id, th.Team.Id, 0, 20)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.Len(t, results.FileInfos, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
func testFileInfoSearchShowChannelBookmarkFiles(t *testing.T, th *SearchTestHelper) {
|
||||||
|
file, err := th.createFileInfo("bookmark", "", th.ChannelBasic.Id, "message test@test.com", "message test@test.com", "jpg", "image/jpeg", 0, 0)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
defer th.deleteUserFileInfos("bookmark")
|
||||||
|
|
||||||
|
params := &model.SearchParams{
|
||||||
|
InChannels: []string{th.ChannelBasic.Id},
|
||||||
|
}
|
||||||
|
results, err := th.Store.FileInfo().Search(th.Context, []*model.SearchParams{params}, th.User.Id, th.Team.Id, 0, 20)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.Len(t, results.FileInfos, 1)
|
||||||
|
require.Equal(t, "message test@test.com", results.FileInfos[file.Id].Name)
|
||||||
|
}
|
||||||
|
|||||||
@@ -514,6 +514,10 @@ func (fs SqlFileInfoStore) Search(rctx request.CTX, paramsList []*model.SearchPa
|
|||||||
LeftJoin("ChannelMembers as CM ON C.Id=CM.ChannelId").
|
LeftJoin("ChannelMembers as CM ON C.Id=CM.ChannelId").
|
||||||
Where(sq.Or{sq.Eq{"C.TeamId": teamId}, sq.Eq{"C.TeamId": ""}}).
|
Where(sq.Or{sq.Eq{"C.TeamId": teamId}, sq.Eq{"C.TeamId": ""}}).
|
||||||
Where(sq.Eq{"FileInfo.DeleteAt": 0}).
|
Where(sq.Eq{"FileInfo.DeleteAt": 0}).
|
||||||
|
Where(sq.Or{
|
||||||
|
sq.Eq{"FileInfo.CreatorId": model.BookmarkFileOwner},
|
||||||
|
sq.NotEq{"FileInfo.PostId": ""},
|
||||||
|
}).
|
||||||
OrderBy("FileInfo.CreateAt DESC").
|
OrderBy("FileInfo.CreateAt DESC").
|
||||||
Limit(100)
|
Limit(100)
|
||||||
|
|
||||||
|
|||||||
@@ -472,7 +472,7 @@ func (worker *BleveIndexerWorker) BulkIndexFiles(files []*model.FileForIndexing,
|
|||||||
batch := worker.engine.FileIndex.NewBatch()
|
batch := worker.engine.FileIndex.NewBatch()
|
||||||
|
|
||||||
for _, file := range files {
|
for _, file := range files {
|
||||||
if file.DeleteAt == 0 {
|
if file.ShouldIndex() {
|
||||||
searchFile := bleveengine.BLVFileFromFileForIndexing(file)
|
searchFile := bleveengine.BLVFileFromFileForIndexing(file)
|
||||||
batch.Index(searchFile.Id, searchFile)
|
batch.Index(searchFile.Id, searchFile)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -260,6 +260,22 @@ type FileForIndexing struct {
|
|||||||
Content string `json:"content"`
|
Content string `json:"content"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ShouldIndex tells if a file should be indexed or not.
|
||||||
|
// index files which are-
|
||||||
|
// a. not deleted
|
||||||
|
// b. have an associated post ID, if no post ID, then,
|
||||||
|
// b.i. the file should belong to the channel's bookmarks, as indicated by the "CreatorId" field.
|
||||||
|
//
|
||||||
|
// Files not passing this criteria will be deleted from ES index.
|
||||||
|
// We're deleting those files from ES index instead of simply skipping them while fetching a batch of files
|
||||||
|
// because existing ES indexes might have these files already indexed, so we need to remove them from index.
|
||||||
|
func (file *FileForIndexing) ShouldIndex() bool {
|
||||||
|
// NOTE - this function is used in server as well as Enterprise code.
|
||||||
|
// Make sure to update public package dependency in both server and Enterprise code when
|
||||||
|
// updating the logic here and to test both places.
|
||||||
|
return file != nil && file.DeleteAt == 0 && (file.PostId != "" || file.CreatorId == BookmarkFileOwner)
|
||||||
|
}
|
||||||
|
|
||||||
// ShallowCopy is an utility function to shallow copy a Post to the given
|
// ShallowCopy is an utility function to shallow copy a Post to the given
|
||||||
// destination without touching the internal RWMutex.
|
// destination without touching the internal RWMutex.
|
||||||
func (o *Post) ShallowCopy(dst *Post) error {
|
func (o *Post) ShallowCopy(dst *Post) error {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user