From aa8d99cc92b033b87ac9d2fd1c06d8647e974fc0 Mon Sep 17 00:00:00 2001 From: Matthias Rosenstock Date: Fri, 4 Oct 2019 18:32:33 +0200 Subject: [PATCH] Filter users and projects to contain only unique values --- cmd/show.go | 2 +- pkg/timesheet.go | 27 ++++++++++++++++++++------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/cmd/show.go b/cmd/show.go index 52438c3..d8daafc 100644 --- a/cmd/show.go +++ b/cmd/show.go @@ -27,7 +27,7 @@ func init() { showBcsCmd.MarkFlagRequired(internal.FlagReport) showJiraCmd.Flags().StringArrayVar(&conf.Projects, internal.FlagProjects, nil, "specify the project key") - showJiraCmd.Flags().StringArrayVar(&conf.Users, internal.FlagUsers, nil, "show results for user") + showJiraCmd.Flags().StringArrayVar(&conf.Users, internal.FlagUsers, nil, "show results for user (or user=id, where id is the account id)") } var showCmd = &cobra.Command{ diff --git a/pkg/timesheet.go b/pkg/timesheet.go index b25c2f8..8fcbe6d 100644 --- a/pkg/timesheet.go +++ b/pkg/timesheet.go @@ -25,26 +25,39 @@ type User struct { } func Projects(projects []string) []Project { - result := make([]Project, len(projects)) - for i, project := range projects { - result[i] = Project(project) + mapping := make(map[string]Project) + for _, project := range projects { + mapping[project] = Project(project) + } + i := 0 + result := make([]Project, len(mapping)) + for _, project := range mapping { + result[i] = project + i++ } return result } func Users(users []string) []*User { - result := make([]*User, len(users)) - for i, user := range users { + mapping := make(map[string]*User) + for _, user := range users { parts := strings.SplitN(user, "=", 2) + name := parts[0] id := "" if len(parts) == 2 { id = parts[1] } - result[i] = &User{ - DisplayName: parts[0], + mapping[name] = &User{ + DisplayName: name, Id: id, } } + i := 0 + result := make([]*User, len(mapping)) + for _, v := range mapping { + result[i] = v + i++ + } return result }