diff --git a/cmd/system-cli/users.go b/cmd/system-cli/users.go index 91625eedc..5bc79a539 100644 --- a/cmd/system-cli/users.go +++ b/cmd/system-cli/users.go @@ -29,18 +29,40 @@ func cliExecUsers(commands ...string) { func cliExecUsersList(params ...string) { var ( + upd, del string + err error uu types.UserSet ctx = context.Background() ) - if uu, err = service.DefaultUser.With(ctx).Find(nil); err != nil { + uf := &types.UserFilter{ + OrderBy: "updated_at", + } + + if uu, err = service.DefaultUser.With(ctx).Find(uf); err != nil { fmt.Printf("Error: %v\n", err) os.Exit(1) } + fmt.Println("ID Updated Deleted [email / name / username]") for _, u := range uu { - fmt.Printf("%20d | %-40s | %-20s\n", u.ID, u.Email+" / "+u.Name+" / "+u.Username, u.UpdatedAt) + upd, del = "---- -- --", "---- -- --" + + if u.UpdatedAt != nil { + upd = u.UpdatedAt.Format("2006-01-02") + } + + if u.DeletedAt != nil { + upd = u.DeletedAt.Format("2006-01-02") + } + + fmt.Printf( + "%20d %s %s %s\n", + u.ID, + upd, + del, + u.Email+" / "+u.Name+" / "+u.Username) } } diff --git a/system/repository/user.go b/system/repository/user.go index ec3a6da66..371bf3726 100644 --- a/system/repository/user.go +++ b/system/repository/user.go @@ -105,32 +105,39 @@ func (r *user) FindByIDs(IDs ...uint64) (uu types.UserSet, err error) { } func (r *user) Find(filter *types.UserFilter) ([]*types.User, error) { + if filter == nil { + filter = &types.UserFilter{} + } + rval := make([]*types.User, 0) params := make([]interface{}, 0) sql := fmt.Sprintf(sqlUserSelect, r.users) - if filter != nil { - if filter.Query != "" { - sql += " AND (username LIKE ?" - params = append(params, filter.Query+"%") - sql += " OR email LIKE ?" - params = append(params, filter.Query+"%") - sql += " OR name LIKE ?)" - params = append(params, filter.Query+"%") - } - - if filter.Email != "" { - sql += " AND (email = ?)" - params = append(params, filter.Email) - } - - if filter.Username != "" { - sql += " AND (username = ?)" - params = append(params, filter.Username) - } + if filter.Query != "" { + sql += " AND (username LIKE ?" + params = append(params, filter.Query+"%") + sql += " OR email LIKE ?" + params = append(params, filter.Query+"%") + sql += " OR name LIKE ?)" + params = append(params, filter.Query+"%") } - sql += " ORDER BY username ASC" + if filter.Email != "" { + sql += " AND (email = ?)" + params = append(params, filter.Email) + } + + if filter.Username != "" { + sql += " AND (username = ?)" + params = append(params, filter.Username) + } + + switch filter.OrderBy { + case "updated_at", "createdAt": + sql += " ORDER BY updated_at DESC" + default: + sql += " ORDER BY username ASC" + } if err := r.db().Select(&rval, sql, params...); err != nil { return nil, err diff --git a/system/types/user.go b/system/types/user.go index c3a8441c8..53e1a9f6d 100644 --- a/system/types/user.go +++ b/system/types/user.go @@ -36,6 +36,7 @@ type ( Query string Email string Username string + OrderBy string } )