From 77bddf64c1991acf97c7c8896203bc9872012918 Mon Sep 17 00:00:00 2001 From: mo khan Date: Wed, 19 Jun 2024 11:04:03 -0600 Subject: Rename Paramable to Entity --- pkg/db/client.go | 43 -------------------- pkg/db/storage.go | 44 ++++++++++++++++++++ pkg/gitlab/issue.go | 2 +- pkg/gitlab/issue_test.go | 102 ----------------------------------------------- 4 files changed, 45 insertions(+), 146 deletions(-) delete mode 100644 pkg/db/client.go create mode 100644 pkg/db/storage.go delete mode 100644 pkg/gitlab/issue_test.go (limited to 'pkg') diff --git a/pkg/db/client.go b/pkg/db/client.go deleted file mode 100644 index 4f43403..0000000 --- a/pkg/db/client.go +++ /dev/null @@ -1,43 +0,0 @@ -package db - -import ( - "bytes" - "fmt" - "io/ioutil" - "os" - "path/filepath" - - "github.com/xlgmokha/x/pkg/env" - "github.com/xlgmokha/x/pkg/serde" - "github.com/xlgmokha/x/pkg/x" -) - -type Paramable interface { - ToParam() string -} - -type Storage[T Paramable] struct { - dir string -} - -func New[T Paramable](dir string) *Storage[T] { - fullPath := x.Must(filepath.Abs(dir)) - x.Check(os.MkdirAll(fullPath, 0700)) - - return &Storage[T]{ - dir: fullPath, - } -} - -func (db *Storage[T]) Save(item T) error { - w := new(bytes.Buffer) - x.Check(serde.To(w, item, serde.YAML)) - if env.Fetch("DUMP", "") != "" { - fmt.Println(w.String()) - } - return ioutil.WriteFile( - fmt.Sprintf("%v/%v.yaml", db.dir, item.ToParam()), - w.Bytes(), - 0700, - ) -} diff --git a/pkg/db/storage.go b/pkg/db/storage.go new file mode 100644 index 0000000..1c1c428 --- /dev/null +++ b/pkg/db/storage.go @@ -0,0 +1,44 @@ +package db + +import ( + "bytes" + "fmt" + "io/ioutil" + "os" + "path/filepath" + + "github.com/xlgmokha/x/pkg/env" + "github.com/xlgmokha/x/pkg/serde" + "github.com/xlgmokha/x/pkg/x" +) + +type Entity interface { + Identifier() string +} + +type Storage[T Entity] struct { + dir string +} + +func New[T Entity](dir string) *Storage[T] { + fullPath := x.Must(filepath.Abs(dir)) + x.Check(os.MkdirAll(fullPath, 0700)) + + return &Storage[T]{ + dir: fullPath, + } +} + +func (db *Storage[T]) Save(item T) error { + w := new(bytes.Buffer) + x.Check(serde.To(w, item, serde.YAML)) + if env.Fetch("DUMP", "") != "" { + fmt.Println(w.String()) + } + + return ioutil.WriteFile(db.filePathFor(item), w.Bytes(), 0700) +} + +func (db *Storage[T]) filePathFor(item T) string { + return fmt.Sprintf("%v/%v.yaml", db.dir, item.Identifier()) +} diff --git a/pkg/gitlab/issue.go b/pkg/gitlab/issue.go index 995f149..2d003d9 100644 --- a/pkg/gitlab/issue.go +++ b/pkg/gitlab/issue.go @@ -53,7 +53,7 @@ type Issue struct { TaskStatus string `json:"task_status" yaml:"task_status"` } -func (issue *Issue) ToParam() string { +func (issue *Issue) Identifier() string { return fmt.Sprintf("%v", issue.ID) } diff --git a/pkg/gitlab/issue_test.go b/pkg/gitlab/issue_test.go deleted file mode 100644 index 41034fb..0000000 --- a/pkg/gitlab/issue_test.go +++ /dev/null @@ -1,102 +0,0 @@ -package gitlab - -import ( - "bufio" - "os" - "strings" - "testing" - "time" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "github.com/xlgmokha/x/pkg/x" -) - -func TestIssue(t *testing.T) { - t.Run("FromIssues", func(t *testing.T) { - t.Run("parses the array of issues from IO", func(t *testing.T) { - body := strings.NewReader(`[{"ID":1,"title":"Issue Title"}]`) - - results, err := FromIssues(body) - - require.NoError(t, err) - require.Equal(t, 1, len(results)) - assert.Equal(t, 1, results[0].ID) - assert.Equal(t, "Issue Title", results[0].Title) - }) - }) - - t.Run("From", func(t *testing.T) { - t.Run("parses each field", func(t *testing.T) { - file, err := os.Open("../../test/data/issues.json") - require.NoError(t, err) - - reader := bufio.NewReader(file) - results, err := FromIssues(reader) - require.NoError(t, err) - - assert.Len(t, results, 20) - - result := results[0] - - assert.Equal(t, 146760799, result.ID) - assert.Equal(t, 6375, result.IID) - assert.Equal(t, 40549124, result.ProjectID) - assert.Contains(t, result.Title, "`gitlab-org/gitlab` broken `master` with rspec unit") - assert.Contains(t, result.Description, "## How to close this incident\n\n- Follow the steps in the") - assert.Equal(t, IssueClosed, result.State) - assert.Equal(t, x.Must(time.Parse(time.RFC3339Nano, "2024-05-18T17:39:14.548Z")), result.CreatedAt) - assert.Equal(t, x.Must(time.Parse(time.RFC3339Nano, "2024-05-18T18:14:37.830Z")), result.UpdatedAt) - assert.Equal(t, x.Must(time.Parse(time.RFC3339Nano, "2024-05-18T17:39:16.837Z")), result.ClosedAt) - - t.Run("closed_by", func(t *testing.T) { - user := result.ClosedBy - assert.Equal(t, 1786152, user.ID) - assert.Equal(t, "gitlab-bot", user.Username) - assert.Equal(t, UserActive, user.State) - assert.Equal(t, false, user.Locked) - assert.Equal(t, "https://gitlab.com/uploads/-/system/user/avatar/1786152/avatar.png", user.AvatarUrl) - assert.Equal(t, "https://gitlab.com/gitlab-bot", user.WebUrl) - }) - - assert.ElementsMatch(t, []string{ - "Engineering Productivity", - "master-broken::job-timeout", - "master:broken", - }, result.Labels) - - assert.Nil(t, result.Milestone) - assert.Empty(t, result.Assignees) - - assert.Equal(t, 1786152, result.Author.ID) - assert.Equal(t, IssueTypeIncident, result.Type) - assert.Nil(t, result.Assignee) - assert.Equal(t, 4, result.UserNotesCount) - assert.Equal(t, 0, result.MergeRequestsCount) - assert.Equal(t, 0, result.Upvotes) - assert.Equal(t, 0, result.Downvotes) - assert.Nil(t, result.DueDate) - assert.False(t, result.Confidential) - assert.Nil(t, result.DiscussionLocked) - assert.Equal(t, "https://gitlab.com/gitlab-org/quality/engineering-productivity/master-broken-incidents/-/issues/6375", result.WebUrl) - - // t.Run("time_stats", func(t *testing.T) { - // stats := result.TimeStatistics - // assert.Equal(t, 0, stats.TimeEstimate) - // assert.Equal(t, 0, stats.TotalTimeSpent) - // assert.Nil(t, stats.HumanTimeEstimate) - // assert.Nil(t, stats.HumanTimeSpent) - // }) - - // t.Run("task_completion_status", func(t *testing.T) { - // status := result.TaskCompletionStatus - // assert.Equal(t, 0, status.Count) - // assert.Equal(t, 0, status.CompletedCount) - // }) - - assert.Equal(t, 0, result.BlockingIssuesCount) - assert.True(t, result.HasTasks) - assert.Equal(t, "0 of 0 checklist items completed", result.TaskStatus) - }) - }) -} -- cgit v1.2.3