Skip to content
This repository was archived by the owner on Feb 4, 2021. It is now read-only.

Commit f2cd80c

Browse files
authored
Merge pull request #84 from ProgrammingLab/gedorinku/forward_match_users
ユーザーの前方一致検索
2 parents c97a04a + cd4d14d commit f2cd80c

File tree

11 files changed

+140
-118
lines changed

11 files changed

+140
-118
lines changed

api/achievements.validator.pb.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/entries.validator.pb.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/protos/users.proto

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ enum Authority {
9191
message ListUsersRequest {
9292
uint32 page_token = 1;
9393
int32 page_size = 2;
94-
bool include_private_users = 3;
94+
reserved 3;
95+
string query = 4 [(validator.field) = {length_lt: 128}];
9596
}
9697

9798
message ListUsersResponse {

api/roles.validator.pb.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/users.pb.go

Lines changed: 109 additions & 100 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/users.swagger.json

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,10 @@
7474
"format": "int32"
7575
},
7676
{
77-
"name": "include_private_users",
77+
"name": "query",
7878
"in": "query",
7979
"required": false,
80-
"type": "boolean",
81-
"format": "boolean"
80+
"type": "string"
8281
}
8382
],
8483
"tags": [
@@ -181,11 +180,10 @@
181180
"format": "int32"
182181
},
183182
{
184-
"name": "include_private_users",
183+
"name": "query",
185184
"in": "query",
186185
"required": false,
187-
"type": "boolean",
188-
"format": "boolean"
186+
"type": "string"
189187
}
190188
],
191189
"tags": [

api/users.validator.pb.go

Lines changed: 4 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/job/github_job.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ func githubJob(ctx context.Context, store di.StoreComponent, cfg *config.Config)
4848
to := time.Now().UTC()
4949
from := to.AddDate(0, 0, -contributionsFromDay).Round(time.Hour * 24)
5050
for next != 0 {
51-
users, nxt, err := us.ListPublicUsers(next, 100)
51+
users, nxt, err := us.ListPublicUsers("", next, 100)
5252
next = nxt
5353
if err != nil {
5454
return err

app/server/users_server.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,9 @@ func (s *userServiceServerImpl) listUsers(ctx context.Context, req *api_pb.ListU
9191
err error
9292
)
9393
if includePrivateUsers {
94-
u, next, err = us.ListPrivateUsers(model.UserID(req.GetPageToken()), int(size))
94+
u, next, err = us.ListPrivateUsers(req.GetQuery(), model.UserID(req.GetPageToken()), int(size))
9595
} else {
96-
u, next, err = us.ListPublicUsers(model.UserID(req.GetPageToken()), int(size))
96+
u, next, err = us.ListPublicUsers(req.GetQuery(), model.UserID(req.GetPageToken()), int(size))
9797
}
9898
if err != nil {
9999
return nil, err

infra/store/user/user_store.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ func (s *userStoreImpl) GetUserWithPrivate(userID model.UserID) (*record.User, e
9595
return u, nil
9696
}
9797

98-
func (s *userStoreImpl) ListPublicUsers(minUserID model.UserID, limit int) ([]*record.User, model.UserID, error) {
98+
func (s *userStoreImpl) ListPublicUsers(subName string, minUserID model.UserID, limit int) ([]*record.User, model.UserID, error) {
9999
mods := []qm.QueryMod{
100100
qm.Load("Profile.Role"),
101101
qm.Load("Profile.Department"),
@@ -105,6 +105,7 @@ func (s *userStoreImpl) ListPublicUsers(minUserID model.UserID, limit int) ([]*r
105105
qm.Limit(limit + 1),
106106
qm.OrderBy("users.id"),
107107
}
108+
mods = append(mods, s.subNameQuery(subName)...)
108109

109110
u, err := record.Users(mods...).All(s.ctx, s.db)
110111
if err != nil {
@@ -117,14 +118,15 @@ func (s *userStoreImpl) ListPublicUsers(minUserID model.UserID, limit int) ([]*r
117118
return u[:limit], model.UserID(u[limit].ID), nil
118119
}
119120

120-
func (s *userStoreImpl) ListPrivateUsers(minUserID model.UserID, limit int) ([]*record.User, model.UserID, error) {
121+
func (s *userStoreImpl) ListPrivateUsers(subName string, minUserID model.UserID, limit int) ([]*record.User, model.UserID, error) {
121122
mods := []qm.QueryMod{
122123
qm.Load("Profile.Role"),
123124
qm.Load("Profile.Department"),
124125
qm.Where("? <= users.id", minUserID),
125126
qm.Limit(limit + 1),
126127
qm.OrderBy("users.id"),
127128
}
129+
mods = append(mods, s.subNameQuery(subName)...)
128130

129131
u, err := record.Users(mods...).All(s.ctx, s.db)
130132
if err != nil {
@@ -203,3 +205,12 @@ func (s *userStoreImpl) selectQuery(scope model.ProfileScope) string {
203205
}
204206
return q
205207
}
208+
209+
func (s *userStoreImpl) subNameQuery(subName string) []qm.QueryMod {
210+
if len(subName) == 0 {
211+
return nil
212+
}
213+
return []qm.QueryMod{
214+
qm.Where("users.name LIKE ? || '%'", subName),
215+
}
216+
}

0 commit comments

Comments
 (0)