Skip to content

Commit 5941b62

Browse files
authored
add add, delete and get for default reviewers (#135)
1 parent eec042b commit 5941b62

File tree

2 files changed

+113
-3
lines changed

2 files changed

+113
-3
lines changed

bitbucket.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,10 @@ type repository interface {
3232
Delete(opt RepositoryOptions) (interface{}, error)
3333
ListWatchers(opt RepositoryOptions) (interface{}, error)
3434
ListForks(opt RepositoryOptions) (interface{}, error)
35-
ListDefaultReviewers(opt RepositoryOptions) (interface{}, error)
35+
ListDefaultReviewers(opt RepositoryOptions) (*DefaultReviewers, error)
36+
GetDefaultReviewer(opt RepositoryDefaultReviewerOptions) (*DefaultReviewer, error)
37+
AddDefaultReviewer(opt RepositoryDefaultReviewerOptions) (*DefaultReviewer, error)
38+
DeleteDefaultReviewer(opt RepositoryDefaultReviewerOptions) (interface{}, error)
3639
UpdatePipelineConfig(opt RepositoryPipelineOptions) (*Pipeline, error)
3740
ListPipelineVariables(opt RepositoryPipelineVariablesOptions) (*PipelineVariables, error)
3841
AddPipelineVariable(opt RepositoryPipelineVariableOptions) (*PipelineVariable, error)
@@ -274,6 +277,12 @@ type RepositoryPipelineOptions struct {
274277
Enabled bool `json:"has_pipelines"`
275278
}
276279

280+
type RepositoryDefaultReviewerOptions struct {
281+
Owner string `json:"owner"`
282+
RepoSlug string `json:"repo_slug"`
283+
Username string `json:"username"`
284+
}
285+
277286
type RepositoryPipelineVariablesOptions struct {
278287
Owner string `json:"owner"`
279288
RepoSlug string `json:"repo_slug"`

repository.go

Lines changed: 103 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,24 @@ type DeploymentVariable struct {
183183
Secured bool
184184
}
185185

186+
type DefaultReviewer struct {
187+
Nickname string
188+
DisplayName string `mapstructure:"display_name"`
189+
Type string
190+
Uuid string
191+
AccountId string `mapstructure:"account_id"`
192+
Links map[string]map[string]string
193+
}
194+
195+
type DefaultReviewers struct {
196+
Page int
197+
Pagelen int
198+
MaxDepth int
199+
Size int
200+
Next string
201+
DefaultReviewers []DefaultReviewer
202+
}
203+
186204
func (r *Repository) Create(ro *RepositoryOptions) (*Repository, error) {
187205
data := r.buildRepositoryBody(ro)
188206
urlStr := r.c.requestUrl("/repositories/%s/%s", ro.Owner, ro.RepoSlug)
@@ -405,9 +423,37 @@ func (r *Repository) ListForks(ro *RepositoryOptions) (interface{}, error) {
405423
return r.c.execute("GET", urlStr, "")
406424
}
407425

408-
func (r *Repository) ListDefaultReviewers(ro *RepositoryOptions) (interface{}, error) {
426+
func (r *Repository) ListDefaultReviewers(ro *RepositoryOptions) (*DefaultReviewers, error) {
409427
urlStr := r.c.requestUrl("/repositories/%s/%s/default-reviewers?pagelen=1", ro.Owner, ro.RepoSlug)
410-
return r.c.execute("GET", urlStr, "")
428+
429+
res, err := r.c.execute("GET", urlStr, "")
430+
if err != nil {
431+
return nil, err
432+
}
433+
return decodeDefaultReviewers(res)
434+
}
435+
436+
func (r *Repository) GetDefaultReviewer(rdro *RepositoryDefaultReviewerOptions) (*DefaultReviewer, error) {
437+
urlStr := r.c.requestUrl("/repositories/%s/%s/default-reviewers/%s", rdro.Owner, rdro.RepoSlug, rdro.Username)
438+
res, err := r.c.execute("GET", urlStr, "")
439+
if err != nil {
440+
return nil, fmt.Errorf("unable to get default reviewer: %w", err)
441+
}
442+
return decodeDefaultReviewer(res)
443+
}
444+
445+
func (r *Repository) AddDefaultReviewer(rdro *RepositoryDefaultReviewerOptions) (*DefaultReviewer, error) {
446+
urlStr := r.c.requestUrl("/repositories/%s/%s/default-reviewers/%s", rdro.Owner, rdro.RepoSlug, rdro.Username)
447+
res, err := r.c.execute("PUT", urlStr, "")
448+
if err != nil {
449+
return nil, err
450+
}
451+
return decodeDefaultReviewer(res)
452+
}
453+
454+
func (r *Repository) DeleteDefaultReviewer(rdro *RepositoryDefaultReviewerOptions) (interface{}, error) {
455+
urlStr := r.c.requestUrl("/repositories/%s/%s/default-reviewers/%s", rdro.Owner, rdro.RepoSlug, rdro.Username)
456+
return r.c.execute("DELETE", urlStr, "")
411457
}
412458

413459
func (r *Repository) UpdatePipelineConfig(rpo *RepositoryPipelineOptions) (*Pipeline, error) {
@@ -1262,3 +1308,58 @@ func (rf RepositoryFile) String() string {
12621308
func (rb RepositoryBlob) String() string {
12631309
return string(rb.Content)
12641310
}
1311+
1312+
func decodeDefaultReviewer(response interface{}) (*DefaultReviewer, error) {
1313+
var defaultReviewerVariable DefaultReviewer
1314+
err := mapstructure.Decode(response, &defaultReviewerVariable)
1315+
if err != nil {
1316+
return nil, err
1317+
}
1318+
return &defaultReviewerVariable, nil
1319+
}
1320+
1321+
func decodeDefaultReviewers(response interface{}) (*DefaultReviewers, error) {
1322+
responseMap := response.(map[string]interface{})
1323+
values := responseMap["values"].([]interface{})
1324+
var variables []DefaultReviewer
1325+
for _, variable := range values {
1326+
var defaultReviewerVariable DefaultReviewer
1327+
err := mapstructure.Decode(variable, &defaultReviewerVariable)
1328+
if err == nil {
1329+
variables = append(variables, defaultReviewerVariable)
1330+
}
1331+
}
1332+
1333+
page, ok := responseMap["page"].(float64)
1334+
if !ok {
1335+
page = 0
1336+
}
1337+
1338+
pagelen, ok := responseMap["pagelen"].(float64)
1339+
if !ok {
1340+
pagelen = 0
1341+
}
1342+
max_depth, ok := responseMap["max_depth"].(float64)
1343+
if !ok {
1344+
max_depth = 0
1345+
}
1346+
size, ok := responseMap["size"].(float64)
1347+
if !ok {
1348+
size = 0
1349+
}
1350+
1351+
next, ok := responseMap["next"].(string)
1352+
if !ok {
1353+
next = ""
1354+
}
1355+
1356+
defaultReviewerVariables := DefaultReviewers{
1357+
Page: int(page),
1358+
Pagelen: int(pagelen),
1359+
MaxDepth: int(max_depth),
1360+
Size: int(size),
1361+
Next: next,
1362+
DefaultReviewers: variables,
1363+
}
1364+
return &defaultReviewerVariables, nil
1365+
}

0 commit comments

Comments
 (0)