customer label
This commit is contained in:
parent
a932407748
commit
387810676b
|
|
@ -174,8 +174,7 @@ func (c *Client) InitBotLogin() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) GetOrCreateLabel(owner, repo, labelName, color string) (*Label, error) {
|
func (c *Client) GetLabel(owner, repo, labelName string) (*Label, error) {
|
||||||
// Try to find existing label
|
|
||||||
listURL := fmt.Sprintf("%s/api/v1/repos/%s/%s/labels", c.baseURL, owner, repo)
|
listURL := fmt.Sprintf("%s/api/v1/repos/%s/%s/labels", c.baseURL, owner, repo)
|
||||||
httpReq, err := http.NewRequest("GET", listURL, nil)
|
httpReq, err := http.NewRequest("GET", listURL, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -189,45 +188,21 @@ func (c *Client) GetOrCreateLabel(owner, repo, labelName, color string) (*Label,
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
|
||||||
if resp.StatusCode == http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
var labels []Label
|
respBody, _ := io.ReadAll(resp.Body)
|
||||||
if err := json.NewDecoder(resp.Body).Decode(&labels); err == nil {
|
return nil, fmt.Errorf("forgejo API returned %d: %s", resp.StatusCode, string(respBody))
|
||||||
for _, l := range labels {
|
}
|
||||||
if l.Name == labelName {
|
|
||||||
return &l, nil
|
var labels []Label
|
||||||
}
|
if err := json.NewDecoder(resp.Body).Decode(&labels); err != nil {
|
||||||
}
|
return nil, err
|
||||||
|
}
|
||||||
|
for _, l := range labels {
|
||||||
|
if l.Name == labelName {
|
||||||
|
return &l, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return nil, fmt.Errorf("label %q not found in %s/%s", labelName, owner, repo)
|
||||||
// Create the label
|
|
||||||
createBody, _ := json.Marshal(map[string]string{
|
|
||||||
"name": labelName,
|
|
||||||
"color": color,
|
|
||||||
})
|
|
||||||
httpReq, err = http.NewRequest("POST", listURL, bytes.NewReader(createBody))
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
httpReq.Header.Set("Content-Type", "application/json")
|
|
||||||
httpReq.Header.Set("Authorization", "token "+c.apiToken)
|
|
||||||
|
|
||||||
resp2, err := c.httpClient.Do(httpReq)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("forgejo API request failed: %w", err)
|
|
||||||
}
|
|
||||||
defer resp2.Body.Close()
|
|
||||||
|
|
||||||
if resp2.StatusCode != http.StatusCreated {
|
|
||||||
respBody, _ := io.ReadAll(resp2.Body)
|
|
||||||
return nil, fmt.Errorf("forgejo API returned %d: %s", resp2.StatusCode, string(respBody))
|
|
||||||
}
|
|
||||||
|
|
||||||
var label Label
|
|
||||||
if err := json.NewDecoder(resp2.Body).Decode(&label); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return &label, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) CreateIssue(owner, repo string, req CreateIssueRequest) (*Issue, error) {
|
func (c *Client) CreateIssue(owner, repo string, req CreateIssueRequest) (*Issue, error) {
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ func (h *DashboardHandler) Index(c *gin.Context) {
|
||||||
|
|
||||||
var openTickets, inProgressTickets, closedTickets int64
|
var openTickets, inProgressTickets, closedTickets int64
|
||||||
for _, repo := range repos {
|
for _, repo := range repos {
|
||||||
issues, err := h.deps.ForgejoClient.ListIssues(repo.ForgejoOwner, repo.ForgejoRepo, "all", "customer")
|
issues, err := h.deps.ForgejoClient.ListIssues(repo.ForgejoOwner, repo.ForgejoRepo, "all", "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Str("repo", repo.ForgejoOwner+"/"+repo.ForgejoRepo).Msg("dashboard: forgejo list issues error")
|
log.Error().Err(err).Str("repo", repo.ForgejoOwner+"/"+repo.ForgejoRepo).Msg("dashboard: forgejo list issues error")
|
||||||
continue
|
continue
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@ func (h *TicketHandler) List(c *gin.Context) {
|
||||||
// Fetch issues from Forgejo per repo and match
|
// Fetch issues from Forgejo per repo and match
|
||||||
var tickets []ticketListRow
|
var tickets []ticketListRow
|
||||||
for _, group := range repoGroups {
|
for _, group := range repoGroups {
|
||||||
issues, err := h.deps.ForgejoClient.ListIssues(group.owner, group.repo, apiState, "customer")
|
issues, err := h.deps.ForgejoClient.ListIssues(group.owner, group.repo, apiState, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Str("repo", group.owner+"/"+group.repo).Msg("forgejo list issues error")
|
log.Error().Err(err).Str("repo", group.owner+"/"+group.repo).Msg("forgejo list issues error")
|
||||||
for _, m := range group.mappings {
|
for _, m := range group.mappings {
|
||||||
|
|
@ -206,7 +206,7 @@ func (h *TicketHandler) UpdateStatus(c *gin.Context) {
|
||||||
newStatus := c.PostForm("status")
|
newStatus := c.PostForm("status")
|
||||||
|
|
||||||
// Get or create the in_progress label
|
// Get or create the in_progress label
|
||||||
inProgressLabel, err := h.deps.ForgejoClient.GetOrCreateLabel(repo.ForgejoOwner, repo.ForgejoRepo, "in_progress", "#fbca04")
|
inProgressLabel, err := h.deps.ForgejoClient.GetLabel(repo.ForgejoOwner, repo.ForgejoRepo, "in_progress")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msg("forgejo get/create in_progress label error")
|
log.Error().Err(err).Msg("forgejo get/create in_progress label error")
|
||||||
h.deps.Renderer.RenderError(c.Writer, c.Request, http.StatusServiceUnavailable, "Service temporarily unavailable")
|
h.deps.Renderer.RenderError(c.Writer, c.Request, http.StatusServiceUnavailable, "Service temporarily unavailable")
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ func (h *UserHandler) Detail(c *gin.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, group := range repoMap {
|
for _, group := range repoMap {
|
||||||
issues, err := h.deps.ForgejoClient.ListIssues(group.repo.ForgejoOwner, group.repo.ForgejoRepo, "all", "customer")
|
issues, err := h.deps.ForgejoClient.ListIssues(group.repo.ForgejoOwner, group.repo.ForgejoRepo, "all", "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Str("repo", group.repo.Name).Msg("forgejo list issues error")
|
log.Error().Err(err).Str("repo", group.repo.Name).Msg("forgejo list issues error")
|
||||||
for _, t := range group.tickets {
|
for _, t := range group.tickets {
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ func (h *TicketHandler) List(c *gin.Context) {
|
||||||
var views []ticketView
|
var views []ticketView
|
||||||
|
|
||||||
for _, group := range repoMap {
|
for _, group := range repoMap {
|
||||||
issues, err := h.deps.ForgejoClient.ListIssues(group.repo.ForgejoOwner, group.repo.ForgejoRepo, "all", "customer")
|
issues, err := h.deps.ForgejoClient.ListIssues(group.repo.ForgejoOwner, group.repo.ForgejoRepo, "all", "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Str("repo", group.repo.Name).Msg("forgejo list issues error")
|
log.Error().Err(err).Str("repo", group.repo.Name).Msg("forgejo list issues error")
|
||||||
// Show tickets with unknown status on API failure
|
// Show tickets with unknown status on API failure
|
||||||
|
|
@ -159,7 +159,7 @@ func (h *TicketHandler) Create(c *gin.Context) {
|
||||||
|
|
||||||
// Synchronous Forgejo issue creation
|
// Synchronous Forgejo issue creation
|
||||||
var labelIDs []int64
|
var labelIDs []int64
|
||||||
label, err := h.deps.ForgejoClient.GetOrCreateLabel(repo.ForgejoOwner, repo.ForgejoRepo, "customer", "#0075ca")
|
label, err := h.deps.ForgejoClient.GetLabel(repo.ForgejoOwner, repo.ForgejoRepo, "customer")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msg("forgejo get/create label error")
|
log.Error().Err(err).Msg("forgejo get/create label error")
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue