app/client/validate.go   A
last analyzed

Size/Duplication

Total Lines 100
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
cc 9
eloc 59
dl 0
loc 100
rs 10
c 0
b 0
f 0

7 Methods

Rating   Name   Duplication   Size   Complexity  
A client.errorToStrings 0 5 2
A client.TogglWorkspaceValidator.Check 0 7 2
A client.PlanfixAnaliticValidator.Check 0 12 1
A client.PlanfixUserValidator.Check 0 4 1
A client.ConfigValidator.Check 0 4 1
A client.StatusFromCheck 0 5 1
A client.TogglUserValidator.Check 0 4 1
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
can't check non-constant format in call to Sprintf
Loading history...
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