Commit 197da83
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))
+}