github.com/adacta-ru/mattermost-server/v6@v6.0.0/services/searchengine/bleveengine/common.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See LICENSE.txt for license information.
     3  
     4  package bleveengine
     5  
     6  import (
     7  	"strings"
     8  
     9  	"github.com/adacta-ru/mattermost-server/v6/model"
    10  	"github.com/adacta-ru/mattermost-server/v6/services/searchengine"
    11  )
    12  
    13  type BLVChannel struct {
    14  	Id          string
    15  	TeamId      []string
    16  	NameSuggest []string
    17  }
    18  
    19  type BLVUser struct {
    20  	Id                         string
    21  	SuggestionsWithFullname    []string
    22  	SuggestionsWithoutFullname []string
    23  	TeamsIds                   []string
    24  	ChannelsIds                []string
    25  }
    26  
    27  type BLVPost struct {
    28  	Id          string
    29  	TeamId      string
    30  	ChannelId   string
    31  	UserId      string
    32  	CreateAt    int64
    33  	Message     string
    34  	Type        string
    35  	Hashtags    []string
    36  	Attachments string
    37  }
    38  
    39  func BLVChannelFromChannel(channel *model.Channel) *BLVChannel {
    40  	displayNameInputs := searchengine.GetSuggestionInputsSplitBy(channel.DisplayName, " ")
    41  	nameInputs := searchengine.GetSuggestionInputsSplitByMultiple(channel.Name, []string{"-", "_"})
    42  
    43  	return &BLVChannel{
    44  		Id:          channel.Id,
    45  		TeamId:      []string{channel.TeamId},
    46  		NameSuggest: append(displayNameInputs, nameInputs...),
    47  	}
    48  }
    49  
    50  func BLVUserFromUserAndTeams(user *model.User, teamsIds, channelsIds []string) *BLVUser {
    51  	usernameSuggestions := searchengine.GetSuggestionInputsSplitByMultiple(user.Username, []string{".", "-", "_"})
    52  
    53  	fullnameStrings := []string{}
    54  	if user.FirstName != "" {
    55  		fullnameStrings = append(fullnameStrings, user.FirstName)
    56  	}
    57  	if user.LastName != "" {
    58  		fullnameStrings = append(fullnameStrings, user.LastName)
    59  	}
    60  
    61  	fullnameSuggestions := []string{}
    62  	if len(fullnameStrings) > 0 {
    63  		fullname := strings.Join(fullnameStrings, " ")
    64  		fullnameSuggestions = searchengine.GetSuggestionInputsSplitBy(fullname, " ")
    65  	}
    66  
    67  	nicknameSuggesitons := []string{}
    68  	if user.Nickname != "" {
    69  		nicknameSuggesitons = searchengine.GetSuggestionInputsSplitBy(user.Nickname, " ")
    70  	}
    71  
    72  	usernameAndNicknameSuggestions := append(usernameSuggestions, nicknameSuggesitons...)
    73  
    74  	return &BLVUser{
    75  		Id:                         user.Id,
    76  		SuggestionsWithFullname:    append(usernameAndNicknameSuggestions, fullnameSuggestions...),
    77  		SuggestionsWithoutFullname: usernameAndNicknameSuggestions,
    78  		TeamsIds:                   teamsIds,
    79  		ChannelsIds:                channelsIds,
    80  	}
    81  }
    82  
    83  func BLVUserFromUserForIndexing(userForIndexing *model.UserForIndexing) *BLVUser {
    84  	user := &model.User{
    85  		Id:        userForIndexing.Id,
    86  		Username:  userForIndexing.Username,
    87  		Nickname:  userForIndexing.Nickname,
    88  		FirstName: userForIndexing.FirstName,
    89  		LastName:  userForIndexing.LastName,
    90  		CreateAt:  userForIndexing.CreateAt,
    91  		DeleteAt:  userForIndexing.DeleteAt,
    92  	}
    93  
    94  	return BLVUserFromUserAndTeams(user, userForIndexing.TeamsIds, userForIndexing.ChannelsIds)
    95  }
    96  
    97  func BLVPostFromPost(post *model.Post, teamId string) *BLVPost {
    98  	p := &model.PostForIndexing{
    99  		TeamId: teamId,
   100  	}
   101  	post.ShallowCopy(&p.Post)
   102  	return BLVPostFromPostForIndexing(p)
   103  }
   104  
   105  func BLVPostFromPostForIndexing(post *model.PostForIndexing) *BLVPost {
   106  	return &BLVPost{
   107  		Id:        post.Id,
   108  		TeamId:    post.TeamId,
   109  		ChannelId: post.ChannelId,
   110  		UserId:    post.UserId,
   111  		CreateAt:  post.CreateAt,
   112  		Message:   post.Message,
   113  		Type:      post.Type,
   114  		Hashtags:  strings.Fields(post.Hashtags),
   115  	}
   116  }