From 1b2ef70be8751ff450f1ed25f30a89c7438b8088 Mon Sep 17 00:00:00 2001 From: Gustavo Carvalho Date: Mon, 12 Jan 2026 09:26:49 -0300 Subject: [PATCH] fix: add field meta Signed-off-by: Gustavo Carvalho --- internal/jira/client.go | 2 +- internal/jira/types.go | 54 +++++++++++++++++++++++++++++++++++------ main.go | 5 ++++ 3 files changed, 53 insertions(+), 8 deletions(-) diff --git a/internal/jira/client.go b/internal/jira/client.go index 7d33208..7fe8ab3 100644 --- a/internal/jira/client.go +++ b/internal/jira/client.go @@ -632,7 +632,7 @@ func (c *Client) SearchChangeRequests(ctx context.Context, projectKeys []string, query := url.Values{} query.Set("jql", jql) query.Set("expand", "changelog") - query.Set("fields", "project,issuetype,status,summary,description,reporter,assignee,priority,created,updated,duedate,environment,approvals") + query.Set("fields", "*all") query.Set("startAt", fmt.Sprintf("%d", startAt)) query.Set("maxResults", fmt.Sprintf("%d", maxResults)) diff --git a/internal/jira/types.go b/internal/jira/types.go index 0f99bc0..f7312fe 100644 --- a/internal/jira/types.go +++ b/internal/jira/types.go @@ -718,13 +718,22 @@ type JiraSchema struct { } type JiraIssue struct { - Key string `json:"key"` - Fields map[string]interface{} `json:"fields"` - Changelog *JiraChangelog `json:"changelog"` - Approvals []JiraApproval `json:"approvals"` - SLAs []JiraSLA `json:"slas,omitempty"` - DevInfo *JiraDevInfo `json:"dev_info,omitempty"` - Deployments []JiraDeployment `json:"deployments,omitempty"` + Key string `json:"key"` + Fields map[string]interface{} `json:"fields"` + FieldsWithMetadata []JiraIssueField `json:"fields_with_metadata,omitempty"` + Changelog *JiraChangelog `json:"changelog"` + Approvals []JiraApproval `json:"approvals"` + SLAs []JiraSLA `json:"slas,omitempty"` + DevInfo *JiraDevInfo `json:"dev_info,omitempty"` + Deployments []JiraDeployment `json:"deployments,omitempty"` +} + +type JiraIssueField struct { + ID string `json:"id"` + Name string `json:"name"` + Type string `json:"type,omitempty"` + Custom string `json:"custom,omitempty"` + Value interface{} `json:"value"` } // JiraChangelog represents the changelog object returned by Jira API @@ -864,6 +873,37 @@ type JiraPermission struct { Type string `json:"type"` } +// EnrichIssuesWithFieldMetadata enriches issues with field metadata from the fields collection +func EnrichIssuesWithFieldMetadata(issues []JiraIssue, fields []JiraField) { + // Create a map of field ID to field metadata for quick lookup + fieldMap := make(map[string]JiraField) + for _, field := range fields { + fieldMap[field.ID] = field + } + + // Enrich each issue + for i := range issues { + issue := &issues[i] + issue.FieldsWithMetadata = make([]JiraIssueField, 0, len(issue.Fields)) + + for fieldID, fieldValue := range issue.Fields { + issueField := JiraIssueField{ + ID: fieldID, + Value: fieldValue, + } + + // Add metadata if available + if fieldMeta, exists := fieldMap[fieldID]; exists { + issueField.Name = fieldMeta.Name + issueField.Type = fieldMeta.Schema.Type + issueField.Custom = fieldMeta.Schema.Custom + } + + issue.FieldsWithMetadata = append(issue.FieldsWithMetadata, issueField) + } + } +} + type JiraPermissionsResponse struct { Permissions map[string]JiraPermission `json:"permissions"` } diff --git a/main.go b/main.go index cdffb83..a16ceb5 100644 --- a/main.go +++ b/main.go @@ -308,6 +308,11 @@ func (l *JiraPlugin) collectData(ctx context.Context, client *jira.Client) (*jir return nil, fmt.Errorf("failed to search issues: %w", err) } data.Issues = issues + + // Enrich issues with field metadata (name, type, value) + jira.EnrichIssuesWithFieldMetadata(data.Issues, data.Fields) + l.Logger.Debug("Enriched issues with field metadata", "issueCount", len(data.Issues)) + // 5. Fetch Details, Approvals, SLAs, DevInfo, and Deployments for each issue for i, issue := range data.Issues { l.Logger.Info("Fetching details for issue", "issue", issue.Key)