/
api.go
70 lines (60 loc) · 1.49 KB
/
api.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package api
import (
"context"
"fmt"
"os"
"strconv"
"time"
a "github.com/kounosukexxx/taqque/internal/domain/api"
"github.com/kounosukexxx/taqque/internal/domain/model"
"github.com/kounosukexxx/taqque/internal/usecase"
"github.com/olekukonko/tablewriter"
)
// ここの層はいらないのでは無いかと思ってきた
type api struct {
taskUsecase usecase.TaskUsecase
}
func NewApi(taskUsecase usecase.TaskUsecase) a.Api {
return &api{
taskUsecase: taskUsecase,
}
}
func (c *api) ListTasks(ctx context.Context) error {
tasks, err := c.taskUsecase.ListTasks(ctx)
if err != nil {
return err
}
c.printTasks(tasks)
return nil
}
func (c *api) PushTask(ctx context.Context, title string, priority float64) error {
tasks, err := c.taskUsecase.PushTask(ctx, title, priority)
if err != nil {
return err
}
c.printTasks(tasks)
return nil
}
func (c *api) PopTask(ctx context.Context, priority float64) error {
tasks, err := c.taskUsecase.PopTask(ctx, priority, time.Now())
if err != nil {
return err
}
c.printTasks(tasks)
return nil
}
// func (c *api) CleanTasks() error {
// return nil // TODO: impletement
// }
func (c *api) printTasks(tasks []*model.Task) {
data := make([][]string, len(tasks))
for i, task := range tasks {
data[i] = []string{strconv.Itoa(i), fmt.Sprintf("%.2f", task.Priority), task.Title}
}
table := tablewriter.NewWriter(os.Stdout)
table.SetHeader([]string{"Index", "Priority", "Title"})
for _, v := range data {
table.Append(v)
}
table.Render()
}