From cbaca15cda13b9d8ef75ba49750d959414415453 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 11 Jun 2026 21:49:37 -0500 Subject: [PATCH] feat(issues): make status_id, priority_id, type_id required on create (#598) - Change CreateIssueOption fields from *int64 (optional) to int64 - API auto-assigns org defaults when value is 0 - MCP gitea_issue_create now requires status_id, priority_id, type_id (pass 0 for org default) - Keep optional on gitea_issue_update (partial updates) Co-Authored-By: Moko Consulting --- modules/structs/issue.go | 8 ++++---- routers/api/v1/repo/issue.go | 15 +++++++-------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/modules/structs/issue.go b/modules/structs/issue.go index 67a95adad2..1ea96c8c5c 100644 --- a/modules/structs/issue.go +++ b/modules/structs/issue.go @@ -114,10 +114,10 @@ type CreateIssueOption struct { Closed bool `json:"closed"` // custom field values keyed by field name CustomFields map[string]string `json:"custom_fields,omitempty"` - // org-level issue metadata IDs - StatusID *int64 `json:"status_id,omitempty"` - PriorityID *int64 `json:"priority_id,omitempty"` - TypeID *int64 `json:"type_id,omitempty"` + // org-level issue metadata IDs (auto-assigned from org defaults when 0) + StatusID int64 `json:"status_id"` + PriorityID int64 `json:"priority_id"` + TypeID int64 `json:"type_id"` } // EditIssueOption options for editing an issue diff --git a/routers/api/v1/repo/issue.go b/routers/api/v1/repo/issue.go index 6dcc32a2b2..f0598502d5 100644 --- a/routers/api/v1/repo/issue.go +++ b/routers/api/v1/repo/issue.go @@ -757,11 +757,10 @@ func CreateIssue(ctx *context.APIContext) { } // Set org-level issue metadata (status/priority/type). - // If not provided, auto-assign the org default. - if form.StatusID != nil && *form.StatusID > 0 { - _ = issues_model.SetIssueStatusID(ctx, issue.ID, *form.StatusID) + // Use provided value if > 0, otherwise auto-assign org default. + if form.StatusID > 0 { + _ = issues_model.SetIssueStatusID(ctx, issue.ID, form.StatusID) } else { - // Auto-assign first non-closing status. if defs, err := issues_model.GetIssueStatusDefsByOrg(ctx, ctx.Repo.Repository.OwnerID); err == nil { for _, d := range defs { if !d.ClosesIssue { @@ -771,8 +770,8 @@ func CreateIssue(ctx *context.APIContext) { } } } - if form.PriorityID != nil && *form.PriorityID > 0 { - _ = issues_model.SetIssuePriorityID(ctx, issue.ID, *form.PriorityID) + if form.PriorityID > 0 { + _ = issues_model.SetIssuePriorityID(ctx, issue.ID, form.PriorityID) } else { if defs, err := issues_model.GetIssuePriorityDefsByOrg(ctx, ctx.Repo.Repository.OwnerID); err == nil { for _, d := range defs { @@ -783,8 +782,8 @@ func CreateIssue(ctx *context.APIContext) { } } } - if form.TypeID != nil && *form.TypeID > 0 { - _ = issues_model.SetIssueTypeID(ctx, issue.ID, *form.TypeID) + if form.TypeID > 0 { + _ = issues_model.SetIssueTypeID(ctx, issue.ID, form.TypeID) } else { if defs, err := issues_model.GetIssueTypeDefsByOrg(ctx, ctx.Repo.Repository.OwnerID); err == nil { for _, d := range defs { -- 2.52.0