From fc4f7e82f997c11497ce818d4fa13e561c780ae1 Mon Sep 17 00:00:00 2001
From: Lunny Xiao <xiaolunwen@gmail.com>
Date: Sat, 25 Feb 2017 21:42:20 +0800
Subject: [PATCH] refactor for searching user (#1038)

* refactor for searching user

* fix like bug

* better format for builder cond
---
 models/user.go | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/models/user.go b/models/user.go
index d0f711448d..55cffe1952 100644
--- a/models/user.go
+++ b/models/user.go
@@ -23,6 +23,7 @@ import (
 	"unicode/utf8"
 
 	"github.com/Unknwon/com"
+	"github.com/go-xorm/builder"
 	"github.com/go-xorm/xorm"
 	"github.com/nfnt/resize"
 	"golang.org/x/crypto/pbkdf2"
@@ -1235,27 +1236,28 @@ func SearchUserByName(opts *SearchUserOptions) (users []*User, _ int64, _ error)
 		opts.Page = 1
 	}
 
-	searchQuery := "%" + opts.Keyword + "%"
 	users = make([]*User, 0, opts.PageSize)
+
 	// Append conditions
-	sess := x.
-		Where("LOWER(lower_name) LIKE ?", searchQuery).
-		Or("LOWER(full_name) LIKE ?", searchQuery).
-		And("type = ?", opts.Type)
+	cond := builder.And(
+		builder.Eq{"type": opts.Type},
+		builder.Or(
+			builder.Like{"lower_name", opts.Keyword},
+			builder.Like{"LOWER(full_name)", opts.Keyword},
+		),
+	)
 
-	var countSess xorm.Session
-	countSess = *sess
-	count, err := countSess.Count(new(User))
+	count, err := x.Where(cond).Count(new(User))
 	if err != nil {
 		return nil, 0, fmt.Errorf("Count: %v", err)
 	}
 
+	sess := x.Where(cond).
+		Limit(opts.PageSize, (opts.Page-1)*opts.PageSize)
 	if len(opts.OrderBy) > 0 {
 		sess.OrderBy(opts.OrderBy)
 	}
-	return users, count, sess.
-		Limit(opts.PageSize, (opts.Page-1)*opts.PageSize).
-		Find(&users)
+	return users, count, sess.Find(&users)
 }
 
 // ___________    .__  .__