diff options
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/gitlab/client.go | 45 | ||||
| -rw-r--r-- | pkg/gitlab/group.go | 28 |
2 files changed, 73 insertions, 0 deletions
diff --git a/pkg/gitlab/client.go b/pkg/gitlab/client.go new file mode 100644 index 0000000..e6c79a5 --- /dev/null +++ b/pkg/gitlab/client.go @@ -0,0 +1,45 @@ +package gitlab + +import ( + "bytes" + "context" + "fmt" + "io" + "io/ioutil" + "net/http" + + "github.com/xlgmokha/x/pkg/env" + "github.com/xlgmokha/x/pkg/x" +) + +type GitLab struct { + ctx context.Context + client http.Client + token string + url string +} + +func New(ctx context.Context, token string) *GitLab { + return &GitLab{ + ctx: ctx, + client: http.Client{}, + token: token, + url: "https://gitlab.com/api/v4", + } +} + +func (gl *GitLab) Group(id int) *Group { + return NewGroup(gl, id) +} + +func (gl *GitLab) Get(url string) *http.Response { + request := x.Must(http.NewRequestWithContext(gl.ctx, "GET", url, nil)) + request.Header.Add("Authorization", fmt.Sprintf("Bearer %v", gl.token)) + response := x.Must(gl.client.Do(request)) + if env.Fetch("DUMP", "") != "" { + body := x.Must(io.ReadAll(response.Body)) + fmt.Println(string(body)) + response.Body = ioutil.NopCloser(bytes.NewBuffer(body)) + } + return response +} diff --git a/pkg/gitlab/group.go b/pkg/gitlab/group.go new file mode 100644 index 0000000..8fedc45 --- /dev/null +++ b/pkg/gitlab/group.go @@ -0,0 +1,28 @@ +package gitlab + +import ( + "fmt" + + "github.com/xlgmokha/x/pkg/x" +) + +type Group struct { + client *GitLab + id int + url string +} + +func NewGroup(gl *GitLab, id int) *Group { + return &Group{ + client: gl, + id: id, + url: fmt.Sprintf("%v/groups/%v", gl.url, id), + } +} + +func (group *Group) Issues() []Issue { + response := group.client.Get(group.url + "/issues") + defer response.Body.Close() + + return x.Must(FromIssues(response.Body)) +} |
