From bd0f83f4257c5e53af32d6ffe0935785fcde3acf Mon Sep 17 00:00:00 2001 From: Özgür Kesim Date: Wed, 27 Dec 2023 03:06:11 +0100 Subject: init --- issues.go | 160 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 issues.go (limited to 'issues.go') diff --git a/issues.go b/issues.go new file mode 100644 index 0000000..c6e8148 --- /dev/null +++ b/issues.go @@ -0,0 +1,160 @@ +package main + +import ( + "sort" + "strings" + "time" +) + +type Issues []Issue + +type Issue struct { + Id uint32 + Summary string + Description string + Project KeyVal + Category KeyVal + TargetVersion KeyVal `json:"target_version"` + Reporter KeyVal + handler KeyVal + Status KeyVal + Resolution KeyVal + ViewState KeyVal `json:"view_state"` + Priority KeyVal + Severity KeyVal + Reproducibility KeyVal + Sticky bool + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + Notes []Note + Relationships []Relationship + Tags []KeyVal + History []Change +} + +type KeyVal struct { + Id uint32 + Name string + Label string `json:",omitempty"` + Color string `json:",omitempty"` +} + +type Note struct { + Id uint32 + Text string + Reporter KeyVal + ViewState KeyVal `json:"view_state"` + Attachments []Attachment + Typ string `json:"type"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"created_at"` +} + +type Attachment struct { + Name string + Content []byte +} + +type Relationship struct { + Id uint32 + Typ KeyVal `json:"type"` + Issue struct { + Id uint32 + Summary string + Status KeyVal + Resolution KeyVal + Handler KeyVal + } +} + +type Change struct { + CreatedAt time.Time `json:"created_at"` + Message string + User KeyVal + Typ KeyVal `json:"type"` + Note struct{ id int32 } +} + +type ByCategory []Issue + +func (b ByCategory) Len() int { return len(b) } +func (b ByCategory) Less(i, j int) bool { + return strings.Compare(b[i].Category.Name, b[j].Category.Name) < 0 +} +func (b ByCategory) Swap(i, j int) { b[i], b[j] = b[j], b[i] } + +type ById []Issue + +func (b ById) Len() int { return len(b) } +func (b ById) Less(i, j int) bool { return b[i].Id < b[j].Id } +func (b ById) Swap(i, j int) { b[i], b[j] = b[j], b[i] } + +type ByTarget []Issue + +func (b ByTarget) Len() int { return len(b) } +func (b ByTarget) Less(i, j int) bool { + return strings.Compare(b[i].TargetVersion.Name, b[j].TargetVersion.Name) < 0 +} +func (b ByTarget) Swap(i, j int) { b[i], b[j] = b[j], b[i] } + +func (i Issues) Tags() (tags []string) { + var m = map[string]bool{} + for _, issue := range i { + for _, tag := range issue.Tags { + m[tag.Name] = true + } + } + for tag := range m { + tags = append(tags, tag) + } + sort.Strings(tags) + return +} + +func (i Issues) TargetVersions() (targets []string) { + var m = map[string]bool{} + for _, issue := range i { + m[issue.TargetVersion.Name] = true + } + for t := range m { + targets = append(targets, t) + } + sort.Strings(targets) + return +} + +func (i Issues) Categories() []string { + var m = map[string]bool{} + + for _, issue := range i { + m[issue.Category.Name] = true + } + + var r = []string{} + for c := range m { + r = append(r, c) + } + sort.Strings(r) + return r +} + +func (i Issues) ByCategory(cat string) (issues Issues) { + for _, issue := range i { + if issue.Category.Name == cat { + issues = append(issues, issue) + } + } + sort.Sort(ById(issues)) + return issues +} + +func (i Issues) ByCategoryAndTarget(cat, tar string) (issues Issues) { + for _, is := range i { + if is.TargetVersion.Name == tar && + is.Category.Name == cat { + issues = append(issues, is) + } + } + sort.Sort(ById(issues)) + return +} -- cgit v1.2.3