Commit 197da83

mo khan <mo@mokhan.ca>
2024-06-03 16:22:53
Extract Group type
1 parent 2f52b8d
Changed files (3)
cmd
stanuki
pkg
cmd/stanuki/main.go
@@ -3,27 +3,16 @@ package main
 import (
 	"context"
 	"fmt"
-	"io"
-	"net/http"
 
 	"github.com/xlgmokha/x/pkg/env"
-	"github.com/xlgmokha/x/pkg/x"
 	"gitlab.com/mokhax/stanuki/pkg/gitlab"
 )
 
 func main() {
-	token := env.Fetch("GITLAB_TOKEN", "")
-	url := "https://gitlab.com/api/v4/groups/9970/issues"
-	client := http.Client{}
-	request := x.Must(http.NewRequestWithContext(context.TODO(), "GET", url, nil))
-	request.Header.Add("Authorization", fmt.Sprintf("Bearer %v", token))
-	response := x.Must(client.Do(request))
-	if env.Fetch("DUMP", "") != "" {
-		fmt.Println(string(x.Must(io.ReadAll(response.Body))))
-	} else {
-		issues := x.Must(gitlab.FromIssues(response.Body))
-		for _, issue := range issues {
-			fmt.Printf("%v: %v\n", issue.ID, issue.Title)
-		}
+	gl := gitlab.New(context.TODO(), env.Fetch("GITLAB_TOKEN", ""))
+
+	issues := gl.Group(9970).Issues()
+	for _, issue := range issues {
+		fmt.Printf("%v: %v\n", issue.ID, issue.Title)
 	}
 }
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
+}
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))
+}