* Completed List cmd and added API calls * Minor comments and add delete code to pass linting * Typo in descriptions * Minor comments * Validations * Validations-1 * improved branch flag validation * removed build * working after refactory with bad names * Command working, test not working * Corrected creation of service * Finalized structure using service * Deleted tests * cleanup * cleanup * cleanup * removed space with tab * aligned types in model.go * Update model.go * resolved comments * Refactor * removed long descriptions * Working incomplete tests * Completed tests * cleanup * checks * PR comments * PR comments * minor comment issue * minor comment issue * Added test cases for Delete * updated tests to work with workflow * Added missing error condition * Updated tests to support new option service * Improved eror handling for list * Fixed test case * Improved error handling * Error handling and test cases for delete API calls * Added test case for user confirmation delete. * Removed unused import from test * Fixed test case for error scenario * Upgraded go-gh * reusing rest client error * Fix for failing windows test cases * help cmd removed when cache isnt present on delete * Pretty print ratio and space between cols modified * Error handling wrapping * Reverted back error message after silencing help * Bugbash fixes for int limit, zero cache list msg * Test case fixes for error message changes * Handling no cache list scenario with(out) key * Minor Refactoring and avoided code duplication * Removed unused inputs after resolving conflicts * Formatted test file * removed err5xx as they all have same value. * Removed err5xx from list as well * Help and error message enhancements for list. * changing commandname to avoid conflicts * Ran `go fmt` formatter against all .go files * Removed command from root.go * Updated version to 1.0.0 Co-authored-by: t-dedah <t-dedah@github.com> Co-authored-by: Deepak Dahiya <59823596+t-dedah@users.noreply.github.com>
79 lines
1.6 KiB
Go
79 lines
1.6 KiB
Go
package types
|
|
|
|
import (
|
|
"fmt"
|
|
"net/url"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
var SORT_INPUT_TO_QUERY_MAP = map[string]string{
|
|
"created-at": "created_at",
|
|
"last-used": "last_accessed_at",
|
|
"size": "size_in_bytes",
|
|
}
|
|
|
|
type BaseOptions struct {
|
|
Repo string
|
|
Branch string
|
|
Key string
|
|
}
|
|
|
|
type ListOptions struct {
|
|
BaseOptions
|
|
Limit int
|
|
Order string
|
|
Sort string
|
|
}
|
|
|
|
type DeleteOptions struct {
|
|
BaseOptions
|
|
Confirm bool
|
|
}
|
|
|
|
func (o *ListOptions) Validate() error {
|
|
if o.Order != "" && o.Order != "asc" && o.Order != "desc" {
|
|
return fmt.Errorf(fmt.Sprintf("%s is not a valid value for order flag. Allowed values: asc/desc", o.Order))
|
|
}
|
|
|
|
if o.Sort != "" && o.Sort != "last-used" && o.Sort != "size" && o.Sort != "created-at" {
|
|
return fmt.Errorf(fmt.Sprintf("%s is not a valid value for sort flag. Allowed values: last-used/size/created-at", o.Sort))
|
|
}
|
|
|
|
if o.Limit < 1 || o.Limit > 100 {
|
|
return fmt.Errorf(fmt.Sprintf("%d is not a valid integer value for limit flag. Allowed values: 1-100", o.Limit))
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (o *BaseOptions) GenerateBaseQueryParams(query url.Values) {
|
|
if o.Branch != "" {
|
|
if strings.HasPrefix(o.Branch, "refs/") {
|
|
query.Add("ref", o.Branch)
|
|
} else {
|
|
query.Add("ref", fmt.Sprintf("refs/heads/%s", o.Branch))
|
|
}
|
|
}
|
|
|
|
if o.Key != "" {
|
|
query.Add("key", o.Key)
|
|
}
|
|
}
|
|
|
|
func (o *ListOptions) GenerateQueryParams(query url.Values) {
|
|
if o.Limit != 30 {
|
|
query.Add("per_page", strconv.Itoa(o.Limit))
|
|
}
|
|
|
|
if o.Order != "" {
|
|
query.Add("direction", o.Order)
|
|
}
|
|
|
|
if o.Sort != "" {
|
|
query.Add("sort", SORT_INPUT_TO_QUERY_MAP[o.Sort])
|
|
}
|
|
|
|
o.GenerateBaseQueryParams(query)
|
|
}
|