Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion internal/jira/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -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))

Expand Down
54 changes: 47 additions & 7 deletions internal/jira/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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"`
}
Expand Down
5 changes: 5 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Loading