kanban

Kanban client in Gio
Log | Files | Refs | README | LICENSE

commit 5f077c6581fa1b9f8afc1f37adf2da15958c69e0
parent 1d25464d524cadb3ee85a218d0c4a2e1612e15cd
Author: Jack Mordaunt <jackmordaunt@gmail.com>
Date:   Sat, 13 Feb 2021 17:35:41 +0800

chore: prune dead code.

Diffstat:
Mkanban.go | 154++++++++++---------------------------------------------------------------------
1 file changed, 18 insertions(+), 136 deletions(-)

diff --git a/kanban.go b/kanban.go @@ -1,14 +1,12 @@ -package kanban - -import ( - "errors" - "fmt" - "strings" - "time" - - "github.com/asdine/storm/v3" -) - +// Package kanban implements Kanban logic. +// +// Kanban is Project oriented, where a Project holds the context for given set +// of Stages and Tickets. +// +// Projects are independent of each other. +// +// Notes: +// // Project // - represents some project that can be broken down into to discrete tasks, described by a name // - each project has it's own arbitrary pipeline of stages with which tickets move through left-to-right @@ -31,26 +29,12 @@ import ( // - cannot occupy more than one stage // - can be edited // - can be deleted +package kanban -type IProject interface { - MakeStage(stage string) - ListStages() []Stage - MoveStage(stage string, dir Direction) bool - AssignTicket(stage string, t Ticket) - ProgressTicket(t Ticket) - RegressTicket(t Ticket) - ListTickets(stage string) []Ticket - MoveTicket(t Ticket, dir Direction) bool - FinalizeTicket(t Ticket) -} - -// Storage handles serialization of Project entities. -type Storer interface { - Create(p *Project) error - Save(p *Project) error - Load(name string) (*Project, bool, error) - List() ([]*Project, error) -} +import ( + "fmt" + "time" +) // Project is a context for a given set of tickets. type Project struct { @@ -61,8 +45,6 @@ type Project struct { Finalized []Ticket } -var _ IProject = (*Project)(nil) - // MakeStage assigns a ticket to the given stage. func (p *Project) MakeStage(name string) { p.Stages = append(p.Stages, Stage{ @@ -259,109 +241,9 @@ func (dir Direction) Invert() Direction { return dir } -// MapStorer implements in-memory storage for Projects. -type MapStorer struct { - Data map[string]Project - Order []string - Err error -} - -var _ Storer = (*MapStorer)(nil) - -func (s MapStorer) New() *MapStorer { - return &MapStorer{ - Data: make(map[string]Project), - } -} - -func (s *MapStorer) Create(p *Project) error { - if len(strings.TrimSpace(p.Name)) == 0 { - return fmt.Errorf("project name required") - } - if _, ok := s.Data[p.Name]; ok { - return fmt.Errorf("project %q exists", p.Name) - } - s.Data[p.Name] = *p - s.Order = append(s.Order, p.Name) - return nil -} - -func (s *MapStorer) Save(p *Project) error { - if _, ok := s.Data[p.Name]; ok { - s.Data[p.Name] = *p - } else { - return fmt.Errorf("project %q does not exist", p.Name) - } - return nil -} - -func (s *MapStorer) Load(name string) (*Project, bool, error) { - if p, ok := s.Data[name]; ok { - return &p, ok, nil - } - return nil, false, nil -} - -func (s *MapStorer) List() (list []*Project, err error) { - for _, name := range s.Order { - if p, ok := s.Data[name]; ok { - list = append(list, &p) - } - } - return list, nil -} - -// @todo move storer impl into package. - -// StormStorer implements Project storage using storm db. -type StormStorer struct { - DB *storm.DB -} - -// ProjectSchema is a schema representation of a project. -type ProjectSchema struct { - Name string `storm:"id"` - Project -} - -var _ Storer = (*StormStorer)(nil) - -func (s *StormStorer) Create(p *Project) error { - if len(strings.TrimSpace(p.Name)) == 0 { - return fmt.Errorf("project name required") - } - fmt.Printf("creating project: %v\n ", p) - return s.DB.Save(&ProjectSchema{Name: p.Name, Project: *p}) -} - -func (s *StormStorer) Save(p *Project) error { - if len(strings.TrimSpace(p.Name)) == 0 { - return fmt.Errorf("project name required") - } - return s.DB.Update(&ProjectSchema{Name: p.Name, Project: *p}) -} - -func (s *StormStorer) Load(name string) (*Project, bool, error) { - var p ProjectSchema - if err := s.DB.One("Name", name, &p); err != nil { - if errors.Is(err, storm.ErrNotFound) { - return &p.Project, false, nil - } else { - return &p.Project, false, err - } - } - return &p.Project, true, nil -} - -func (s *StormStorer) List() (list []*Project, err error) { - var ( - projects []*ProjectSchema - ) - if err := s.DB.All(&projects); err != nil { - return nil, fmt.Errorf("loading projects: %v", err) - } - for _, p := range projects { - list = append(list, &p.Project) +func (p *Project) String() string { + if p == nil { + return "<nil>" } - return list, nil + return fmt.Sprintf("%v", *p) }