1
2
3
4
5
6 package github
7
8 import (
9 "context"
10 "fmt"
11 )
12
13
14
15
16
17 type ProjectsService service
18
19
20 type Project struct {
21 ID *int64 `json:"id,omitempty"`
22 URL *string `json:"url,omitempty"`
23 HTMLURL *string `json:"html_url,omitempty"`
24 ColumnsURL *string `json:"columns_url,omitempty"`
25 OwnerURL *string `json:"owner_url,omitempty"`
26 Name *string `json:"name,omitempty"`
27 Body *string `json:"body,omitempty"`
28 Number *int `json:"number,omitempty"`
29 State *string `json:"state,omitempty"`
30 CreatedAt *Timestamp `json:"created_at,omitempty"`
31 UpdatedAt *Timestamp `json:"updated_at,omitempty"`
32 NodeID *string `json:"node_id,omitempty"`
33
34
35 Creator *User `json:"creator,omitempty"`
36 }
37
38 func (p Project) String() string {
39 return Stringify(p)
40 }
41
42
43
44
45 func (s *ProjectsService) GetProject(ctx context.Context, id int64) (*Project, *Response, error) {
46 u := fmt.Sprintf("projects/%v", id)
47 req, err := s.client.NewRequest("GET", u, nil)
48 if err != nil {
49 return nil, nil, err
50 }
51
52
53 req.Header.Set("Accept", mediaTypeProjectsPreview)
54
55 project := &Project{}
56 resp, err := s.client.Do(ctx, req, project)
57 if err != nil {
58 return nil, resp, err
59 }
60
61 return project, resp, nil
62 }
63
64
65
66
67 type ProjectOptions struct {
68
69 Name *string `json:"name,omitempty"`
70
71 Body *string `json:"body,omitempty"`
72
73
74
75
76
77 State *string `json:"state,omitempty"`
78
79
80
81
82 OrganizationPermission *string `json:"organization_permission,omitempty"`
83
84
85
86 Public *bool `json:"public,omitempty"`
87 }
88
89
90
91
92 func (s *ProjectsService) UpdateProject(ctx context.Context, id int64, opts *ProjectOptions) (*Project, *Response, error) {
93 u := fmt.Sprintf("projects/%v", id)
94 req, err := s.client.NewRequest("PATCH", u, opts)
95 if err != nil {
96 return nil, nil, err
97 }
98
99
100 req.Header.Set("Accept", mediaTypeProjectsPreview)
101
102 project := &Project{}
103 resp, err := s.client.Do(ctx, req, project)
104 if err != nil {
105 return nil, resp, err
106 }
107
108 return project, resp, nil
109 }
110
111
112
113
114 func (s *ProjectsService) DeleteProject(ctx context.Context, id int64) (*Response, error) {
115 u := fmt.Sprintf("projects/%v", id)
116 req, err := s.client.NewRequest("DELETE", u, nil)
117 if err != nil {
118 return nil, err
119 }
120
121
122 req.Header.Set("Accept", mediaTypeProjectsPreview)
123
124 return s.client.Do(ctx, req, nil)
125 }
126
127
128
129
130 type ProjectColumn struct {
131 ID *int64 `json:"id,omitempty"`
132 Name *string `json:"name,omitempty"`
133 URL *string `json:"url,omitempty"`
134 ProjectURL *string `json:"project_url,omitempty"`
135 CardsURL *string `json:"cards_url,omitempty"`
136 CreatedAt *Timestamp `json:"created_at,omitempty"`
137 UpdatedAt *Timestamp `json:"updated_at,omitempty"`
138 NodeID *string `json:"node_id,omitempty"`
139 }
140
141
142
143
144 func (s *ProjectsService) ListProjectColumns(ctx context.Context, projectID int64, opts *ListOptions) ([]*ProjectColumn, *Response, error) {
145 u := fmt.Sprintf("projects/%v/columns", projectID)
146 u, err := addOptions(u, opts)
147 if err != nil {
148 return nil, nil, err
149 }
150
151 req, err := s.client.NewRequest("GET", u, nil)
152 if err != nil {
153 return nil, nil, err
154 }
155
156
157 req.Header.Set("Accept", mediaTypeProjectsPreview)
158
159 columns := []*ProjectColumn{}
160 resp, err := s.client.Do(ctx, req, &columns)
161 if err != nil {
162 return nil, resp, err
163 }
164
165 return columns, resp, nil
166 }
167
168
169
170
171 func (s *ProjectsService) GetProjectColumn(ctx context.Context, id int64) (*ProjectColumn, *Response, error) {
172 u := fmt.Sprintf("projects/columns/%v", id)
173 req, err := s.client.NewRequest("GET", u, nil)
174 if err != nil {
175 return nil, nil, err
176 }
177
178
179 req.Header.Set("Accept", mediaTypeProjectsPreview)
180
181 column := &ProjectColumn{}
182 resp, err := s.client.Do(ctx, req, column)
183 if err != nil {
184 return nil, resp, err
185 }
186
187 return column, resp, nil
188 }
189
190
191
192
193 type ProjectColumnOptions struct {
194
195 Name string `json:"name"`
196 }
197
198
199
200
201 func (s *ProjectsService) CreateProjectColumn(ctx context.Context, projectID int64, opts *ProjectColumnOptions) (*ProjectColumn, *Response, error) {
202 u := fmt.Sprintf("projects/%v/columns", projectID)
203 req, err := s.client.NewRequest("POST", u, opts)
204 if err != nil {
205 return nil, nil, err
206 }
207
208
209 req.Header.Set("Accept", mediaTypeProjectsPreview)
210
211 column := &ProjectColumn{}
212 resp, err := s.client.Do(ctx, req, column)
213 if err != nil {
214 return nil, resp, err
215 }
216
217 return column, resp, nil
218 }
219
220
221
222
223 func (s *ProjectsService) UpdateProjectColumn(ctx context.Context, columnID int64, opts *ProjectColumnOptions) (*ProjectColumn, *Response, error) {
224 u := fmt.Sprintf("projects/columns/%v", columnID)
225 req, err := s.client.NewRequest("PATCH", u, opts)
226 if err != nil {
227 return nil, nil, err
228 }
229
230
231 req.Header.Set("Accept", mediaTypeProjectsPreview)
232
233 column := &ProjectColumn{}
234 resp, err := s.client.Do(ctx, req, column)
235 if err != nil {
236 return nil, resp, err
237 }
238
239 return column, resp, nil
240 }
241
242
243
244
245 func (s *ProjectsService) DeleteProjectColumn(ctx context.Context, columnID int64) (*Response, error) {
246 u := fmt.Sprintf("projects/columns/%v", columnID)
247 req, err := s.client.NewRequest("DELETE", u, nil)
248 if err != nil {
249 return nil, err
250 }
251
252
253 req.Header.Set("Accept", mediaTypeProjectsPreview)
254
255 return s.client.Do(ctx, req, nil)
256 }
257
258
259
260 type ProjectColumnMoveOptions struct {
261
262
263 Position string `json:"position"`
264 }
265
266
267
268
269 func (s *ProjectsService) MoveProjectColumn(ctx context.Context, columnID int64, opts *ProjectColumnMoveOptions) (*Response, error) {
270 u := fmt.Sprintf("projects/columns/%v/moves", columnID)
271 req, err := s.client.NewRequest("POST", u, opts)
272 if err != nil {
273 return nil, err
274 }
275
276
277 req.Header.Set("Accept", mediaTypeProjectsPreview)
278
279 return s.client.Do(ctx, req, nil)
280 }
281
282
283
284
285 type ProjectCard struct {
286 URL *string `json:"url,omitempty"`
287 ColumnURL *string `json:"column_url,omitempty"`
288 ContentURL *string `json:"content_url,omitempty"`
289 ID *int64 `json:"id,omitempty"`
290 Note *string `json:"note,omitempty"`
291 Creator *User `json:"creator,omitempty"`
292 CreatedAt *Timestamp `json:"created_at,omitempty"`
293 UpdatedAt *Timestamp `json:"updated_at,omitempty"`
294 NodeID *string `json:"node_id,omitempty"`
295 Archived *bool `json:"archived,omitempty"`
296
297
298 ColumnID *int64 `json:"column_id,omitempty"`
299
300
301 ProjectID *int64 `json:"project_id,omitempty"`
302 ProjectURL *string `json:"project_url,omitempty"`
303 ColumnName *string `json:"column_name,omitempty"`
304 PreviousColumnName *string `json:"previous_column_name,omitempty"`
305 }
306
307
308
309 type ProjectCardListOptions struct {
310
311
312 ArchivedState *string `url:"archived_state,omitempty"`
313
314 ListOptions
315 }
316
317
318
319
320 func (s *ProjectsService) ListProjectCards(ctx context.Context, columnID int64, opts *ProjectCardListOptions) ([]*ProjectCard, *Response, error) {
321 u := fmt.Sprintf("projects/columns/%v/cards", columnID)
322 u, err := addOptions(u, opts)
323 if err != nil {
324 return nil, nil, err
325 }
326
327 req, err := s.client.NewRequest("GET", u, nil)
328 if err != nil {
329 return nil, nil, err
330 }
331
332
333 req.Header.Set("Accept", mediaTypeProjectsPreview)
334
335 cards := []*ProjectCard{}
336 resp, err := s.client.Do(ctx, req, &cards)
337 if err != nil {
338 return nil, resp, err
339 }
340
341 return cards, resp, nil
342 }
343
344
345
346
347 func (s *ProjectsService) GetProjectCard(ctx context.Context, cardID int64) (*ProjectCard, *Response, error) {
348 u := fmt.Sprintf("projects/columns/cards/%v", cardID)
349 req, err := s.client.NewRequest("GET", u, nil)
350 if err != nil {
351 return nil, nil, err
352 }
353
354
355 req.Header.Set("Accept", mediaTypeProjectsPreview)
356
357 card := &ProjectCard{}
358 resp, err := s.client.Do(ctx, req, card)
359 if err != nil {
360 return nil, resp, err
361 }
362
363 return card, resp, nil
364 }
365
366
367
368
369 type ProjectCardOptions struct {
370
371 Note string `json:"note,omitempty"`
372
373
374 ContentID int64 `json:"content_id,omitempty"`
375
376 ContentType string `json:"content_type,omitempty"`
377
378
379 Archived *bool `json:"archived,omitempty"`
380 }
381
382
383
384
385 func (s *ProjectsService) CreateProjectCard(ctx context.Context, columnID int64, opts *ProjectCardOptions) (*ProjectCard, *Response, error) {
386 u := fmt.Sprintf("projects/columns/%v/cards", columnID)
387 req, err := s.client.NewRequest("POST", u, opts)
388 if err != nil {
389 return nil, nil, err
390 }
391
392
393 req.Header.Set("Accept", mediaTypeProjectsPreview)
394
395 card := &ProjectCard{}
396 resp, err := s.client.Do(ctx, req, card)
397 if err != nil {
398 return nil, resp, err
399 }
400
401 return card, resp, nil
402 }
403
404
405
406
407 func (s *ProjectsService) UpdateProjectCard(ctx context.Context, cardID int64, opts *ProjectCardOptions) (*ProjectCard, *Response, error) {
408 u := fmt.Sprintf("projects/columns/cards/%v", cardID)
409 req, err := s.client.NewRequest("PATCH", u, opts)
410 if err != nil {
411 return nil, nil, err
412 }
413
414
415 req.Header.Set("Accept", mediaTypeProjectsPreview)
416
417 card := &ProjectCard{}
418 resp, err := s.client.Do(ctx, req, card)
419 if err != nil {
420 return nil, resp, err
421 }
422
423 return card, resp, nil
424 }
425
426
427
428
429 func (s *ProjectsService) DeleteProjectCard(ctx context.Context, cardID int64) (*Response, error) {
430 u := fmt.Sprintf("projects/columns/cards/%v", cardID)
431 req, err := s.client.NewRequest("DELETE", u, nil)
432 if err != nil {
433 return nil, err
434 }
435
436
437 req.Header.Set("Accept", mediaTypeProjectsPreview)
438
439 return s.client.Do(ctx, req, nil)
440 }
441
442
443
444 type ProjectCardMoveOptions struct {
445
446
447 Position string `json:"position"`
448
449
450
451 ColumnID int64 `json:"column_id,omitempty"`
452 }
453
454
455
456
457 func (s *ProjectsService) MoveProjectCard(ctx context.Context, cardID int64, opts *ProjectCardMoveOptions) (*Response, error) {
458 u := fmt.Sprintf("projects/columns/cards/%v/moves", cardID)
459 req, err := s.client.NewRequest("POST", u, opts)
460 if err != nil {
461 return nil, err
462 }
463
464
465 req.Header.Set("Accept", mediaTypeProjectsPreview)
466
467 return s.client.Do(ctx, req, nil)
468 }
469
470
471
472 type ProjectCollaboratorOptions struct {
473
474
475
476
477
478
479
480 Permission *string `json:"permission,omitempty"`
481 }
482
483
484
485
486
487 func (s *ProjectsService) AddProjectCollaborator(ctx context.Context, id int64, username string, opts *ProjectCollaboratorOptions) (*Response, error) {
488 u := fmt.Sprintf("projects/%v/collaborators/%v", id, username)
489 req, err := s.client.NewRequest("PUT", u, opts)
490 if err != nil {
491 return nil, err
492 }
493
494
495 req.Header.Set("Accept", mediaTypeProjectsPreview)
496
497 return s.client.Do(ctx, req, nil)
498 }
499
500
501
502
503
504 func (s *ProjectsService) RemoveProjectCollaborator(ctx context.Context, id int64, username string) (*Response, error) {
505 u := fmt.Sprintf("projects/%v/collaborators/%v", id, username)
506 req, err := s.client.NewRequest("DELETE", u, nil)
507 if err != nil {
508 return nil, err
509 }
510
511
512 req.Header.Set("Accept", mediaTypeProjectsPreview)
513
514 return s.client.Do(ctx, req, nil)
515 }
516
517
518
519 type ListCollaboratorOptions struct {
520
521
522
523
524
525
526
527
528 Affiliation *string `url:"affiliation,omitempty"`
529
530 ListOptions
531 }
532
533
534
535
536
537
538
539
540 func (s *ProjectsService) ListProjectCollaborators(ctx context.Context, id int64, opts *ListCollaboratorOptions) ([]*User, *Response, error) {
541 u := fmt.Sprintf("projects/%v/collaborators", id)
542 u, err := addOptions(u, opts)
543 if err != nil {
544 return nil, nil, err
545 }
546
547 req, err := s.client.NewRequest("GET", u, nil)
548 if err != nil {
549 return nil, nil, err
550 }
551
552
553 req.Header.Set("Accept", mediaTypeProjectsPreview)
554
555 var users []*User
556 resp, err := s.client.Do(ctx, req, &users)
557 if err != nil {
558 return nil, resp, err
559 }
560
561 return users, resp, nil
562 }
563
564
565
566 type ProjectPermissionLevel struct {
567
568 Permission *string `json:"permission,omitempty"`
569
570 User *User `json:"user,omitempty"`
571 }
572
573
574
575
576
577
578 func (s *ProjectsService) ReviewProjectCollaboratorPermission(ctx context.Context, id int64, username string) (*ProjectPermissionLevel, *Response, error) {
579 u := fmt.Sprintf("projects/%v/collaborators/%v/permission", id, username)
580 req, err := s.client.NewRequest("GET", u, nil)
581 if err != nil {
582 return nil, nil, err
583 }
584
585
586 req.Header.Set("Accept", mediaTypeProjectsPreview)
587
588 ppl := new(ProjectPermissionLevel)
589 resp, err := s.client.Do(ctx, req, ppl)
590 if err != nil {
591 return nil, resp, err
592 }
593 return ppl, resp, nil
594 }
595
View as plain text