Adding Organization Label management #717
69 gitea/org_label.go Normal file
69
gitea/org_label.go Normal file @@ -0,0 +1,69 @@ | ||||
// Copyright 2025 Stephane | ||||
// Org-wide label support for Gitea SDK | ||||
| ||||
package gitea | ||||
| ||||
import ( | ||||
"bytes" | ||||
"encoding/json" | ||||
"fmt" | ||||
"net/url" | ||||
) | ||||
| ||||
// ListOrgLabelsOptions lists org-wide labels with optional pagination | ||||
type ListOrgLabelsOptions struct { | ||||
ListOptions | ||||
} | ||||
| ||||
// ListOrgLabels returns the labels defined at the org level | ||||
func (c *Client) ListOrgLabels(org string, opt ListOrgLabelsOptions) ([]*Label, *Response, error) { | ||||
if err := escapeValidatePathSegments(&org); err != nil { | ||||
return nil, nil, err | ||||
} | ||||
opt.setDefaults() | ||||
labels := make([]*Label, 0, opt.PageSize) | ||||
| ||||
link, _ := url.Parse(fmt.Sprintf("/orgs/%s/labels", org)) | ||||
link.RawQuery = opt.getURLQuery().Encode() | ||||
resp, err := c.getParsedResponse("GET", link.String(), jsonHeader, nil, &labels) | ||||
return labels, resp, err | ||||
} | ||||
| ||||
// CreateOrgLabel creates a new label under an organization | ||||
func (c *Client) CreateOrgLabel(org string, opt CreateLabelOption) (*Label, *Response, error) { | ||||
if err := escapeValidatePathSegments(&org); err != nil { | ||||
return nil, nil, err | ||||
} | ||||
body, err := json.Marshal(&opt) | ||||
if err != nil { | ||||
return nil, nil, err | ||||
} | ||||
| ||||
label := new(Label) | ||||
resp, err := c.getParsedResponse("POST", fmt.Sprintf("/orgs/%s/labels", org), jsonHeader, bytes.NewReader(body), label) | ||||
return label, resp, err | ||||
} | ||||
| ||||
// UpdateOrgLabel updates an existing org-level label by ID | ||||
func (c *Client) UpdateOrgLabel(org string, id int64, opt EditLabelOption) (*Label, *Response, error) { | ||||
if err := escapeValidatePathSegments(&org); err != nil { | ||||
return nil, nil, err | ||||
} | ||||
body, err := json.Marshal(&opt) | ||||
if err != nil { | ||||
return nil, nil, err | ||||
} | ||||
| ||||
label := new(Label) | ||||
resp, err := c.getParsedResponse("PATCH", fmt.Sprintf("/orgs/%s/labels/%d", org, id), jsonHeader, bytes.NewReader(body), label) | ||||
return label, resp, err | ||||
} | ||||
| ||||
// DeleteOrgLabel deletes a label at the org level by ID | ||||
func (c *Client) DeleteOrgLabel(org string, id int64) (*Response, error) { | ||||
if err := escapeValidatePathSegments(&org); err != nil { | ||||
return nil, err | ||||
} | ||||
_, resp, err := c.getResponse("DELETE", fmt.Sprintf("/orgs/%s/labels/%d", org, id), jsonHeader, nil) | ||||
return resp, err | ||||
} | ||||
Reference in New Issue
Block a user