@@ -256,30 +256,19 @@ func ListProjectFields(getClient GetClientFn, t translations.TranslationHelperFu
256256 return mcp .NewToolResultError (err .Error ()), nil
257257 }
258258
259+ var resp * github.Response
260+ var projectFields []* github.ProjectV2Field
261+
259262 opts := & github.ListProjectsOptions {
260263 ListProjectsPaginationOptions : pagination ,
261264 }
262265
263- var url string
264266 if ownerType == "org" {
265- url = fmt . Sprintf ( "orgs/%s/projectsV2/%d/fields" , owner , projectNumber )
267+ projectFields , resp , err = client . Projects . ListOrganizationProjectFields ( ctx , owner , projectNumber , opts )
266268 } else {
267- url = fmt .Sprintf ("users/%s/projectsV2/%d/fields" , owner , projectNumber )
268- }
269-
270- url , err = addOptions (url , opts )
271- if err != nil {
272- return mcp .NewToolResultError (err .Error ()), nil
269+ projectFields , resp , err = client .Projects .ListUserProjectFields (ctx , owner , projectNumber , opts )
273270 }
274271
275- httpRequest , err := client .NewRequest ("GET" , url , nil )
276- if err != nil {
277- return nil , fmt .Errorf ("failed to create request: %w" , err )
278- }
279-
280- var projectFields []projectV2Field
281- resp , err := client .Do (ctx , httpRequest , & projectFields )
282-
283272 if err != nil {
284273 return ghErrors .NewGitHubAPIErrorResponse (ctx ,
285274 "failed to list project fields" ,
@@ -452,7 +441,7 @@ func ListProjectItems(getClient GetClientFn, t translations.TranslationHelperFun
452441 }
453442
454443 var resp * github.Response
455- var projectItems []projectV2Item
444+ var projectItems []* github. ProjectV2Item
456445 var queryPtr * string
457446
458447 if queryStr != "" {
@@ -467,25 +456,12 @@ func ListProjectItems(getClient GetClientFn, t translations.TranslationHelperFun
467456 },
468457 }
469458
470- var url string
471459 if ownerType == "org" {
472- url = fmt . Sprintf ( "orgs/%s/projectsV2/%d/items" , owner , projectNumber )
460+ projectItems , resp , err = client . Projects . ListOrganizationProjectItems ( ctx , owner , projectNumber , opts )
473461 } else {
474- url = fmt . Sprintf ( "users/%s/projectsV2/%d/items" , owner , projectNumber )
462+ projectItems , resp , err = client . Projects . ListUserProjectItems ( ctx , owner , projectNumber , opts )
475463 }
476464
477- url , err = addOptions (url , opts )
478- if err != nil {
479- return mcp .NewToolResultError (err .Error ()), nil
480- }
481-
482- httpRequest , err := client .NewRequest ("GET" , url , nil )
483- if err != nil {
484- return nil , fmt .Errorf ("failed to create request: %w" , err )
485- }
486-
487- resp , err = client .Do (ctx , httpRequest , & projectItems )
488-
489465 if err != nil {
490466 return ghErrors .NewGitHubAPIErrorResponse (ctx ,
491467 ProjectListFailedError ,
@@ -566,32 +542,22 @@ func GetProjectItem(getClient GetClientFn, t translations.TranslationHelperFunc)
566542 return mcp .NewToolResultError (err .Error ()), nil
567543 }
568544
569- var url string
570- if ownerType == "org" {
571- url = fmt .Sprintf ("orgs/%s/projectsV2/%d/items/%d" , owner , projectNumber , itemID )
572- } else {
573- url = fmt .Sprintf ("users/%s/projectsV2/%d/items/%d" , owner , projectNumber , itemID )
574- }
575-
576- opts := fieldSelectionOptions {}
545+ resp := & github.Response {}
546+ projectItem := & github.ProjectV2Item {}
547+ var opts * github.GetProjectItemOptions
577548
578549 if len (fields ) > 0 {
579- opts .Fields = fields
580- }
581-
582- url , err = addOptions (url , opts )
583- if err != nil {
584- return mcp .NewToolResultError (err .Error ()), nil
550+ opts = & github.GetProjectItemOptions {
551+ Fields : fields ,
552+ }
585553 }
586554
587- projectItem := projectV2Item {}
588-
589- httpRequest , err := client .NewRequest ("GET" , url , nil )
590- if err != nil {
591- return nil , fmt .Errorf ("failed to create request: %w" , err )
555+ if ownerType == "org" {
556+ projectItem , resp , err = client .Projects .GetOrganizationProjectItem (ctx , owner , projectNumber , itemID , opts )
557+ } else {
558+ projectItem , resp , err = client .Projects .GetUserProjectItem (ctx , owner , projectNumber , itemID , opts )
592559 }
593560
594- resp , err := client .Do (ctx , httpRequest , & projectItem )
595561 if err != nil {
596562 return ghErrors .NewGitHubAPIErrorResponse (ctx ,
597563 "failed to get project item" ,
@@ -748,7 +714,7 @@ func UpdateProjectItem(getClient GetClientFn, t translations.TranslationHelperFu
748714 if err != nil {
749715 return mcp .NewToolResultError (err .Error ()), nil
750716 }
751- itemID , err := RequiredInt (req , "item_id" )
717+ itemID , err := RequiredBigInt (req , "item_id" )
752718 if err != nil {
753719 return mcp .NewToolResultError (err .Error ()), nil
754720 }
@@ -773,21 +739,15 @@ func UpdateProjectItem(getClient GetClientFn, t translations.TranslationHelperFu
773739 return mcp .NewToolResultError (err .Error ()), nil
774740 }
775741
776- var projectsURL string
742+ var resp * github.Response
743+ var updatedItem * github.ProjectV2Item
744+
777745 if ownerType == "org" {
778- projectsURL = fmt . Sprintf ( "orgs/%s/projectsV2/%d/items/%d" , owner , projectNumber , itemID )
746+ updatedItem , resp , err = client . Projects . UpdateOrganizationProjectItem ( ctx , owner , projectNumber , itemID , updatePayload )
779747 } else {
780- projectsURL = fmt .Sprintf ("users/%s/projectsV2/%d/items/%d" , owner , projectNumber , itemID )
781- }
782- httpRequest , err := client .NewRequest ("PATCH" , projectsURL , updateProjectItemPayload {
783- Fields : []updateProjectItem {* updatePayload },
784- })
785- if err != nil {
786- return nil , fmt .Errorf ("failed to create request: %w" , err )
748+ updatedItem , resp , err = client .Projects .UpdateUserProjectItem (ctx , owner , projectNumber , itemID , updatePayload )
787749 }
788- updatedItem := projectV2Item {}
789750
790- resp , err := client .Do (ctx , httpRequest , & updatedItem )
791751 if err != nil {
792752 return ghErrors .NewGitHubAPIErrorResponse (ctx ,
793753 ProjectUpdateFailedError ,
@@ -892,15 +852,6 @@ type fieldSelectionOptions struct {
892852 Fields []int64 `url:"fields,omitempty,comma"`
893853}
894854
895- type updateProjectItemPayload struct {
896- Fields []updateProjectItem `json:"fields"`
897- }
898-
899- type updateProjectItem struct {
900- ID int `json:"id"`
901- Value any `json:"value"`
902- }
903-
904855type projectV2ItemFieldValue struct {
905856 ID * int64 `json:"id,omitempty"`
906857 Name string `json:"name,omitempty"`
@@ -967,7 +918,7 @@ func toNewProjectType(projType string) string {
967918 }
968919}
969920
970- func buildUpdateProjectItem (input map [string ]any ) (* updateProjectItem , error ) {
921+ func buildUpdateProjectItem (input map [string ]any ) (* github. UpdateProjectItemOptions , error ) {
971922 if input == nil {
972923 return nil , fmt .Errorf ("updated_field must be an object" )
973924 }
@@ -986,7 +937,12 @@ func buildUpdateProjectItem(input map[string]any) (*updateProjectItem, error) {
986937 if ! ok {
987938 return nil , fmt .Errorf ("updated_field.value is required" )
988939 }
989- payload := & updateProjectItem {ID : int (idFieldAsFloat64 ), Value : valueField }
940+ payload := & github.UpdateProjectItemOptions {
941+ Fields : []* github.UpdateProjectV2Field {{
942+ ID : int64 (idFieldAsFloat64 ),
943+ Value : valueField ,
944+ }},
945+ }
990946
991947 return payload , nil
992948}
0 commit comments