Adding Organization Label management #717

Closed
killermouse0 wants to merge 3 commits from killermouse0/go-sdk:main into main

69
gitea/org_label.go Normal file
View 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
}