summaryrefslogtreecommitdiff
path: root/pkg
diff options
context:
space:
mode:
Diffstat (limited to 'pkg')
-rw-r--r--pkg/gitlab/client.go45
-rw-r--r--pkg/gitlab/group.go28
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))
+}