From 4f4a765e7d0bbfdfecc0c52ae4be35f8d3b737ca Mon Sep 17 00:00:00 2001 From: Joram Wilander Date: Tue, 23 Jan 2018 11:04:44 -0500 Subject: ABC-90 Add POST /emoji/search and GET /emoji/autocomplete API endpoints (#8125) * Add POST /emoji/search and GET /emoji/autocomplete API endpoints * Add constant to be clearer --- store/sqlstore/emoji_store.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'store/sqlstore') diff --git a/store/sqlstore/emoji_store.go b/store/sqlstore/emoji_store.go index 734190dbb..afd87b83d 100644 --- a/store/sqlstore/emoji_store.go +++ b/store/sqlstore/emoji_store.go @@ -46,6 +46,7 @@ func (es SqlEmojiStore) CreateIndexesIfNotExists() { es.CreateIndexIfNotExists("idx_emoji_update_at", "Emoji", "UpdateAt") es.CreateIndexIfNotExists("idx_emoji_create_at", "Emoji", "CreateAt") es.CreateIndexIfNotExists("idx_emoji_delete_at", "Emoji", "DeleteAt") + es.CreateIndexIfNotExists("idx_emoji_name", "Emoji", "Name") } func (es SqlEmojiStore) Save(emoji *model.Emoji) store.StoreChannel { @@ -162,3 +163,31 @@ func (es SqlEmojiStore) Delete(id string, time int64) store.StoreChannel { emojiCache.Remove(id) }) } + +func (es SqlEmojiStore) Search(name string, prefixOnly bool, limit int) store.StoreChannel { + return store.Do(func(result *store.StoreResult) { + var emojis []*model.Emoji + + term := "" + if !prefixOnly { + term = "%" + } + + term += name + "%" + + if _, err := es.GetReplica().Select(&emojis, + `SELECT + * + FROM + Emoji + WHERE + Name LIKE :Name + AND DeleteAt = 0 + ORDER BY Name + LIMIT :Limit`, map[string]interface{}{"Name": term, "Limit": limit}); err != nil { + result.Err = model.NewAppError("SqlEmojiStore.Search", "store.sql_emoji.get_by_name.app_error", nil, "name="+name+", "+err.Error(), http.StatusInternalServerError) + } else { + result.Data = emojis + } + }) +} -- cgit v1.2.3-1-g7c22