1 | package client |
||
2 | |||
3 | import ( |
||
4 | "fmt" |
||
5 | "github.com/viasite/planfix-toggl-server/app/config" |
||
6 | ) |
||
7 | |||
8 | // Validator - интерфейс структуры валидатора |
||
9 | type Validator interface { |
||
10 | Check() (errors []string, ok bool, data interface{}) |
||
11 | } |
||
12 | |||
13 | // ValidatorStatus - статус ответа на запрос валидации |
||
14 | type ValidatorStatus struct { |
||
15 | Name string `json:"name"` |
||
16 | Ok bool `json:"ok"` |
||
17 | Errors []string `json:"errors"` |
||
18 | Data interface{} `json:"data"` |
||
19 | } |
||
20 | |||
21 | func StatusFromCheck(errors []string, ok bool, data interface{}) ValidatorStatus { |
||
22 | return ValidatorStatus{ |
||
23 | Errors: errors, |
||
24 | Ok: ok, |
||
25 | Data: data, |
||
26 | } |
||
27 | } |
||
28 | |||
29 | // errorToStrings помогает превратить ошибку в массив строк |
||
30 | func errorToStrings(err error, msg string) (errors []string) { |
||
31 | if err != nil { |
||
32 | errors = []string{fmt.Sprintf(msg, err.Error())} |
||
0 ignored issues
–
show
introduced
by
![]() |
|||
33 | } |
||
34 | return |
||
35 | } |
||
36 | |||
37 | // TogglUserValidator проверяет логин в Toggl |
||
38 | type TogglUserValidator struct { |
||
39 | TogglClient *TogglClient |
||
40 | } |
||
41 | |||
42 | func (v TogglUserValidator) Check() (errors []string, ok bool, data interface{}) { |
||
43 | user, err := v.TogglClient.GetTogglUser() |
||
44 | errors = errorToStrings(err, "%s") |
||
45 | return errors, err == nil, user |
||
46 | } |
||
47 | |||
48 | // TogglWorkspaceValidator проверяет workspace в Toggl |
||
49 | type TogglWorkspaceValidator struct { |
||
50 | TogglClient *TogglClient |
||
51 | } |
||
52 | |||
53 | func (v TogglWorkspaceValidator) Check() (errors []string, ok bool, data interface{}) { |
||
54 | ok, err := v.TogglClient.IsWorkspaceExists(v.TogglClient.Config.TogglWorkspaceID) |
||
55 | errors = errorToStrings(err, "%s") |
||
56 | if !ok { |
||
57 | errors = append(errors, fmt.Sprintf("Toggl workspace ID %d не найден", v.TogglClient.Config.TogglWorkspaceID)) |
||
58 | } |
||
59 | return errors, ok, v.TogglClient.Config.TogglWorkspaceID |
||
60 | } |
||
61 | |||
62 | // PlanfixUserValidator проверяет логин в Планфикс |
||
63 | type PlanfixUserValidator struct { |
||
64 | TogglClient *TogglClient |
||
65 | } |
||
66 | |||
67 | func (v PlanfixUserValidator) Check() (errors []string, ok bool, data interface{}) { |
||
68 | user, err := v.TogglClient.PlanfixAPI.UserGet(0) |
||
69 | errors = errorToStrings(err, "%s") |
||
70 | return errors, err == nil, user.User |
||
71 | } |
||
72 | |||
73 | // PlanfixAnaliticValidator проверяет аналитику |
||
74 | type PlanfixAnaliticValidator struct { |
||
75 | TogglClient *TogglClient |
||
76 | } |
||
77 | |||
78 | func (v PlanfixAnaliticValidator) Check() (errors []string, ok bool, data interface{}) { |
||
79 | analitic, err := v.TogglClient.GetAnaliticData( |
||
80 | v.TogglClient.Config.PlanfixAnaliticName, |
||
81 | v.TogglClient.Config.PlanfixAnaliticTypeName, |
||
82 | v.TogglClient.Config.PlanfixAnaliticTypeValue, |
||
83 | v.TogglClient.Config.PlanfixAnaliticCountName, |
||
84 | v.TogglClient.Config.PlanfixAnaliticCommentName, |
||
85 | v.TogglClient.Config.PlanfixAnaliticDateName, |
||
86 | v.TogglClient.Config.PlanfixAnaliticUsersName, |
||
87 | ) |
||
88 | errors = errorToStrings(err, "Поля аналитики указаны неправильно: %s") |
||
89 | return errors, err == nil, analitic |
||
90 | } |
||
91 | |||
92 | // ConfigValidator проверяет конфиг на пустые или невалидные поля |
||
93 | type ConfigValidator struct { |
||
94 | Config *config.Config |
||
95 | } |
||
96 | |||
97 | func (v ConfigValidator) Check() (errors []string, ok bool, config interface{}) { |
||
98 | errors, ok = v.Config.Validate() |
||
99 | config = v.Config |
||
100 | return |
||
101 | } |
||
102 |