-
Notifications
You must be signed in to change notification settings - Fork 0
/
model.go
50 lines (40 loc) · 1.33 KB
/
model.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
package get
import (
"github.com/imartinezalberte/go-lingq/cmd/entities"
"github.com/imartinezalberte/go-lingq/internal/shelf"
"github.com/imartinezalberte/go-lingq/internal/utils"
"github.com/repeale/fp-go"
"github.com/spf13/cobra"
)
const (
LanguageName = "language"
LanguageUsage = "Specify the code of the language. It must be in two letter format. Mandatory"
LanguageDefault = utils.Empty
LevelsName = "levels"
LevelsUsage = "Specify the levels in which you want to query shelves. Default is A1"
)
var LevelsDefault = []entities.ResourceLevel{entities.FirstLevel}
type ShelfRequest struct {
Pagination entities.Pagination
Levels entities.ResourcesLevel
Language string
}
func (s ShelfRequest) String() string {
return s.Pagination.String() + utils.Space + s.Levels.String() + utils.Space + s.Language
}
func (s ShelfRequest) ToCommand() any {
return shelf.ShelfQuery{
Pagination: s.Pagination.ToCommand(),
Language: s.Language,
Levels: fp.Map(func(level entities.ResourceLevel) uint {
return uint(level)
})(s.Levels.InnerType().ToArr()),
}
}
func (s *ShelfRequest) Args(cmd *cobra.Command) {
cmd.Flags().
StringVar(&s.Language, LanguageName, LanguageDefault, LanguageUsage)
cmd.Flags().Var(&s.Levels, entities.LevelName, entities.LevelUsage)
s.Pagination.Args(cmd)
cmd.MarkFlagRequired(LanguageName)
}