From 3d1b9e79734f5aa9005f5eb3193262896c0acc31 Mon Sep 17 00:00:00 2001 From: ivy1996-encode <15055461510@163.com> Date: Mon, 15 Mar 2021 18:51:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=9F=A5=E8=AF=A2=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- relations.go | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++ user.go | 49 ++++++++++++++++++++++++++ 2 files changed, 147 insertions(+) diff --git a/relations.go b/relations.go index bed5618..d1e2e46 100644 --- a/relations.go +++ b/relations.go @@ -36,7 +36,55 @@ func (f Friends) Count() int { return len(f) } +func (f Friends) SearchByUserName(username string) (results Friends, found bool) { + for _, friend := range f { + if friend.UserName == username { + found = true + results = append(results, friend) + } + } + return +} + +func (f Friends) SearchByNickName(nickName string) (results Friends, found bool) { + for _, friend := range f { + if friend.NickName == nickName { + found = true + results = append(results, friend) + } + } + return +} + +func (f Friends) SearchByRemarkName(remarkName string) (results Friends, found bool) { + for _, friend := range f { + if friend.User.RemarkName == remarkName { + found = true + results = append(results, friend) + } + } + return +} + func (f Friends) Search(cond Cond) (friends Friends, found bool) { + if len(cond) == 1 { + for k, v := range cond { + switch k { + case "UserName": + if value, ok := v.(string); ok { + return f.SearchByNickName(value) + } + case "NickName": + if value, ok := v.(string); ok { + return f.SearchByNickName(value) + } + case "RemarkName": + if value, ok := v.(string); ok { + return f.SearchByUserName(value) + } + } + } + } for _, member := range f { value := reflect.ValueOf(member).Elem() for k, v := range cond { @@ -106,7 +154,57 @@ func (g Groups) Count() int { return len(g) } +func (g Groups) SearchByUserName(username string) (results Groups, found bool) { + for _, group := range g { + if group.UserName == username { + found = true + results = append(results, group) + } + } + return +} + +func (g Groups) SearchByNickName(nickName string) (results Groups, found bool) { + for _, group := range g { + if group.NickName == nickName { + found = true + results = append(results, group) + } + } + return +} + +func (g Groups) SearchByRemarkName(remarkName string) (results Groups, found bool) { + for _, group := range g { + if group.User.RemarkName == remarkName { + found = true + results = append(results, group) + } + } + return +} + func (g Groups) Search(cond Cond) (groups Groups, found bool) { + + if len(cond) == 1 { + for k, v := range cond { + switch k { + case "UserName": + if value, ok := v.(string); ok { + return g.SearchByNickName(value) + } + case "NickName": + if value, ok := v.(string); ok { + return g.SearchByNickName(value) + } + case "RemarkName": + if value, ok := v.(string); ok { + return g.SearchByUserName(value) + } + } + } + } + for _, member := range g { value := reflect.ValueOf(member).Elem() for k, v := range cond { diff --git a/user.go b/user.go index ede7d40..bdd6cb1 100644 --- a/user.go +++ b/user.go @@ -307,7 +307,56 @@ func (m Members) searchByUserNameLimit1(username string) (*User, error) { return nil, errors.New("no such user found") } +func (m Members) SearchByUserName(username string) (results Members, found bool) { + for _, member := range m { + if member.UserName == username { + found = true + results = append(results, member) + } + } + return +} + +func (m Members) SearchByNickName(nickName string) (results Members, found bool) { + for _, member := range m { + if member.NickName == nickName { + found = true + results = append(results, member) + } + } + return +} + +func (m Members) SearchByRemarkName(remarkName string) (results Members, found bool) { + for _, member := range m { + if member.RemarkName == remarkName { + found = true + results = append(results, member) + } + } + return +} + func (m Members) Search(cond Cond) (results Members, found bool) { + if len(cond) == 1 { + for k, v := range cond { + switch k { + case "UserName": + if value, ok := v.(string); ok { + return m.SearchByNickName(value) + } + case "NickName": + if value, ok := v.(string); ok { + return m.SearchByNickName(value) + } + case "RemarkName": + if value, ok := v.(string); ok { + return m.SearchByUserName(value) + } + } + } + } + for _, member := range m { value := reflect.ValueOf(member).Elem() for k, v := range cond {