From 956cbde1bc77605503d8d807ed643e2fd8df1bea Mon Sep 17 00:00:00 2001
From: eson <9673575+githubcontent@user.noreply.gitee.com>
Date: Fri, 20 Oct 2023 15:59:03 +0800
Subject: [PATCH] logo search

---
 model/gmodel/fs_preprocess_logo_logic.go      | 27 ++++++++++++++++++-
 .../prelogosearchsuggestionshandler.go        |  2 +-
 .../logic/prelogosearchsuggestionslogic.go    |  8 ++----
 server/info/internal/types/types.go           |  4 +++
 server_api/info.api                           |  6 ++++-
 5 files changed, 38 insertions(+), 9 deletions(-)

diff --git a/model/gmodel/fs_preprocess_logo_logic.go b/model/gmodel/fs_preprocess_logo_logic.go
index 70300d95..edfe98f5 100644
--- a/model/gmodel/fs_preprocess_logo_logic.go
+++ b/model/gmodel/fs_preprocess_logo_logic.go
@@ -25,8 +25,33 @@ type PreLogoSearchResult struct {
 
 // TODO: 使用model的属性做你想做的
 
-// 搜索建议
+// 搜索
 func (p *FsPreprocessLogoModel) PreLogoSearch(ctx context.Context, zipcode string, keywordsStr string, count int) (resp []PreLogoSearchResult, err error) {
+	keywords := regexp.MustCompile(`\s+`).Split(keywordsStr, -1)
+	for i, v := range keywords {
+		keywords[i] = "+" + v + "*"
+	}
+	sqlstr := fmt.Sprintf("SELECT id,restaurant_name,resource_url,address,zip_code,phone,website,is_branch FROM fs_preprocess_logo WHERE MATCH(restaurant_name) AGAINST(? IN BOOLEAN MODE) and zipcode = ?  limit %d;", count)
+
+	tx := p.db.WithContext(ctx).Model(&FsPreprocessLogo{}).Raw(sqlstr, strings.Join(keywords, " "), zipcode)
+	err = tx.Scan(&resp).Error
+	if err != nil {
+		logx.Error(err)
+		return nil, err
+	}
+
+	for i := range resp {
+		if resp[i].RestaurantType == nil {
+			resp[i].RestaurantType = FsString("")
+		}
+		resp[i].ResourceUrl = FsString(testData[rand.Uint64()%uint64(len(testData))])
+	}
+
+	return resp, nil
+}
+
+// 搜索建议
+func (p *FsPreprocessLogoModel) PreLogoSearchSuggestions(ctx context.Context, keywordsStr string, count int) (resp []PreLogoSearchResult, err error) {
 	keywords := regexp.MustCompile(`\s+`).Split(keywordsStr, -1)
 	for i, v := range keywords {
 		keywords[i] = "+" + v + "*"
diff --git a/server/info/internal/handler/prelogosearchsuggestionshandler.go b/server/info/internal/handler/prelogosearchsuggestionshandler.go
index 271d73c8..6b5764b9 100644
--- a/server/info/internal/handler/prelogosearchsuggestionshandler.go
+++ b/server/info/internal/handler/prelogosearchsuggestionshandler.go
@@ -14,7 +14,7 @@ import (
 func PreLogoSearchSuggestionsHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
 	return func(w http.ResponseWriter, r *http.Request) {
 
-		var req types.PreLogoSearchRequest
+		var req types.PreLogoSearchSuggestionsRequest
 		userinfo, err := basic.RequestParse(w, r, svcCtx, &req)
 		if err != nil {
 			return
diff --git a/server/info/internal/logic/prelogosearchsuggestionslogic.go b/server/info/internal/logic/prelogosearchsuggestionslogic.go
index 5c2586d8..d23e6021 100644
--- a/server/info/internal/logic/prelogosearchsuggestionslogic.go
+++ b/server/info/internal/logic/prelogosearchsuggestionslogic.go
@@ -30,18 +30,14 @@ func NewPreLogoSearchSuggestionsLogic(ctx context.Context, svcCtx *svc.ServiceCo
 // func (l *PreLogoSearchSuggestionsLogic) BeforeLogic(w http.ResponseWriter, r *http.Request) {
 // }
 
-func (l *PreLogoSearchSuggestionsLogic) PreLogoSearchSuggestions(req *types.PreLogoSearchRequest, userinfo *auth.UserInfo) (resp *basic.Response) {
+func (l *PreLogoSearchSuggestionsLogic) PreLogoSearchSuggestions(req *types.PreLogoSearchSuggestionsRequest, userinfo *auth.UserInfo) (resp *basic.Response) {
 	// 返回值必须调用Set重新返回, resp可以空指针调用 resp.SetStatus(basic.CodeOK, data)
 	// userinfo 传入值时, 一定不为null
 	if !userinfo.IsOnlooker() {
 		return resp.SetStatus(basic.CodeSearchAuthErr)
 	}
 
-	if len(req.ZipCode) < 4 {
-		return resp.SetStatus(basic.CodeSearchZipCodeErr)
-	}
-
-	result, err := l.svcCtx.AllModels.FsPreprocessLogo.PreLogoSearch(l.ctx, req.ZipCode, req.Keywords, 5)
+	result, err := l.svcCtx.AllModels.FsPreprocessLogo.PreLogoSearchSuggestions(l.ctx, req.Keywords, 5)
 	if err != nil {
 		return resp.SetStatus(basic.CodeApiErr, err)
 	}
diff --git a/server/info/internal/types/types.go b/server/info/internal/types/types.go
index 73884ef2..11bfc790 100644
--- a/server/info/internal/types/types.go
+++ b/server/info/internal/types/types.go
@@ -12,6 +12,10 @@ type ContactUsRequest struct {
 	Message string `json:"message"`
 }
 
+type PreLogoSearchSuggestionsRequest struct {
+	Keywords string `json:"keywords"` // 关键字
+}
+
 type PreLogoSearchRequest struct {
 	ZipCode  string `json:"zip_code"` // 邮编
 	Keywords string `json:"keywords"` // 关键字
diff --git a/server_api/info.api b/server_api/info.api
index 21beb3af..20e6d88c 100644
--- a/server_api/info.api
+++ b/server_api/info.api
@@ -42,7 +42,7 @@ service info {
 	
 	// 搜索建议
 	@handler PreLogoSearchSuggestionsHandler
-	post /api/info/prelogo/search/suggestions(PreLogoSearchRequest) returns (response);
+	post /api/info/prelogo/search/suggestions(PreLogoSearchSuggestionsRequest) returns (response);
 	
 	// 搜索
 	@handler PreLogoSearchHandler
@@ -60,6 +60,10 @@ type (
 		Message string `json:"message"`
 	}
 
+	PreLogoSearchSuggestionsRequest {
+		Keywords string `json:"keywords"` // 关键字
+	}
+
 	PreLogoSearchRequest {
 		ZipCode  string `json:"zip_code"` // 邮编
 		Keywords string `json:"keywords"` // 关键字