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