@@ -12,30 +12,29 @@ import (
1212 "strings"
1313 "time"
1414
15- "github.com/larksuite/cli/internal/validate "
15+ "github.com/larksuite/cli/errs "
1616 "github.com/larksuite/cli/shortcuts/common"
17- larkcore "github.com/larksuite/oapi-sdk-go/v3/core"
1817)
1918
2019// parseTimeRange parses a "YYYY-MM--YYYY-MM" string into two time.Time values.
2120// The start is the first moment of the start month; the end is the last moment of the end month.
2221func parseTimeRange (s string ) (start , end time.Time , err error ) {
2322 parts := strings .SplitN (s , "--" , 2 )
2423 if len (parts ) != 2 {
25- return time.Time {}, time.Time {}, fmt . Errorf ( "invalid time-range format %q, expected YYYY-MM--YYYY-MM" , s )
24+ return time.Time {}, time.Time {}, errs . NewValidationError ( errs . SubtypeInvalidArgument , "invalid -- time-range format %q, expected YYYY-MM--YYYY-MM" , s ). WithParam ( "--time-range" )
2625 }
2726 start , err = time .Parse ("2006-01" , strings .TrimSpace (parts [0 ]))
2827 if err != nil {
29- return time.Time {}, time.Time {}, fmt . Errorf ( "invalid start month %q: %w " , parts [0 ], err )
28+ return time.Time {}, time.Time {}, errs . NewValidationError ( errs . SubtypeInvalidArgument , "invalid --time-range start month %q: %v " , parts [0 ], err ). WithParam ( "--time-range" ). WithCause ( err )
3029 }
3130 end , err = time .Parse ("2006-01" , strings .TrimSpace (parts [1 ]))
3231 if err != nil {
33- return time.Time {}, time.Time {}, fmt . Errorf ( "invalid end month %q: %w " , parts [1 ], err )
32+ return time.Time {}, time.Time {}, errs . NewValidationError ( errs . SubtypeInvalidArgument , "invalid --time-range end month %q: %v " , parts [1 ], err ). WithParam ( "--time-range" ). WithCause ( err )
3433 }
3534 // end is the last moment of the end month
3635 end = end .AddDate (0 , 1 , 0 ).Add (- time .Millisecond )
3736 if start .After (end ) {
38- return time.Time {}, time.Time {}, fmt . Errorf ( " start month %s is after end month %s" , parts [0 ], parts [1 ])
37+ return time.Time {}, time.Time {}, errs . NewValidationError ( errs . SubtypeInvalidArgument , "invalid --time-range: start month %s is after end month %s" , parts [0 ], parts [1 ]). WithParam ( "--time-range" )
3938 }
4039 return start , end , nil
4140}
@@ -69,20 +68,20 @@ var OKRListCycles = common.Shortcut{
6968 Validate : func (ctx context.Context , runtime * common.RuntimeContext ) error {
7069 idType := runtime .Str ("user-id-type" )
7170 if idType != "open_id" && idType != "union_id" && idType != "user_id" {
72- return common . FlagErrorf ( "--user-id-type must be one of: open_id | union_id | user_id" )
71+ return errs . NewValidationError ( errs . SubtypeInvalidArgument , "--user-id-type must be one of: open_id | union_id | user_id" ). WithParam ( "--user-id-type " )
7372 }
7473 userID := runtime .Str ("user-id" )
75- if err := validate . RejectControlChars ( userID , " user-id" ); err != nil {
74+ if err := common . RejectDangerousCharsTyped ( "-- user-id", userID ); err != nil {
7675 return err
7776 }
7877
7978 tr := runtime .Str ("time-range" )
8079 if tr != "" {
81- if err := validate . RejectControlChars ( tr , " time-range" ); err != nil {
80+ if err := common . RejectDangerousCharsTyped ( "-- time-range", tr ); err != nil {
8281 return err
8382 }
8483 if _ , _ , err := parseTimeRange (tr ); err != nil {
85- return common . FlagErrorf ( "--time-range: %s" , err )
84+ return err
8685 }
8786 }
8887 return nil
@@ -110,16 +109,17 @@ var OKRListCycles = common.Shortcut{
110109 var err error
111110 rangeStart , rangeEnd , err = parseTimeRange (timeRange )
112111 if err != nil {
113- return common . FlagErrorf ( "--time-range: %s" , err )
112+ return err
114113 }
115114 hasRange = true
116115 }
117116
118117 // Paginated fetch of all cycles
119- queryParams := make (larkcore.QueryParams )
120- queryParams .Set ("user_id" , userID )
121- queryParams .Set ("user_id_type" , userIDType )
122- queryParams .Set ("page_size" , "100" )
118+ queryParams := map [string ]interface {}{
119+ "user_id" : userID ,
120+ "user_id_type" : userIDType ,
121+ "page_size" : "100" ,
122+ }
123123
124124 var allCycles []Cycle
125125 page := 0
@@ -136,7 +136,7 @@ var OKRListCycles = common.Shortcut{
136136 }
137137 page ++
138138
139- data , err := runtime .DoAPIJSON ("GET" , "/open-apis/okr/v2/cycles" , queryParams , nil )
139+ data , err := runtime .CallAPITyped ("GET" , "/open-apis/okr/v2/cycles" , queryParams , nil )
140140 if err != nil {
141141 return err
142142 }
@@ -158,7 +158,7 @@ var OKRListCycles = common.Shortcut{
158158 if ! hasMore || pageToken == "" {
159159 break
160160 }
161- queryParams . Set ( "page_token" , pageToken )
161+ queryParams [ "page_token" ] = pageToken
162162 }
163163
164164 // Filter by time-range overlap
0 commit comments