-
Notifications
You must be signed in to change notification settings - Fork 0
/
env.go
108 lines (91 loc) · 2.32 KB
/
env.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package formly
import (
"errors"
"regexp"
"time"
// to support sqlite
_ "github.com/mattn/go-sqlite3"
)
// Env ...
type Env struct {
FormModel
LabelModel
SubmissionModel
EntryModel
close func() error
}
// Close ...
func (env *Env) Close() error {
return env.close()
}
// Form ...
type Form struct {
ID int64
Name, Usage string
}
// FormModel ...
type FormModel interface {
Create(name, usage string) (Form, error)
GetByName(name string) (Form, error)
GetByID(id int64) (Form, error)
GetAll() ([]Form, error)
DeleteByID(id int64) (Form, error)
DeleteByName(name string) (Form, error)
Update(formID int64, name, usage string) (Form, error)
}
// Label ...
type Label struct {
ID, FormID, Position int64
Repeatable bool
Name, Usage string
}
// LabelModel ...
type LabelModel interface {
Create(formID, position int64, repeatable bool, name, usage string) (Label, error)
GetLabels(formID int64) ([]Label, error)
Update(formID, labelID, position int64, repeatable bool, name, usage string) ([]Label, error)
DeleteByID(id int64) (Label, error)
}
// Submission ...
type Submission struct {
ID, FormID int64
CreateAt time.Time
}
// SubmissionModel ...
type SubmissionModel interface {
Create(formID int64) (Submission, error)
GetSubmissions(formID int64) ([]Submission, error)
}
// Entry ...
type Entry struct {
ID, LabelID, SubmissionID int64
Txt string
}
// EntryModel ...
type EntryModel interface {
Create(submissionID, labelID int64, txt string) (Entry, error)
GetEntries(submissionID, labeID int64) ([]Entry, error)
}
// ErrInvalidLengthName ...
var ErrInvalidLengthName error = errors.New("name's length is not between 1 - 16 characters long")
// ErrNameIsNotAWord ...
var ErrNameIsNotAWord error = errors.New("name is not composed only of letters")
// ValidateName ...
func ValidateName(name string) error {
if !(len(name) >= 1 && len(name) <= 16) {
return ErrInvalidLengthName
}
if !regexp.MustCompile(`^[a-zA-Z]+$`).MatchString(name) {
return ErrNameIsNotAWord
}
return nil
}
// ErrInvalidLengthUsage ...
var ErrInvalidLengthUsage error = errors.New("name's length is not between 5 - 252 characters long")
// ValidateUsage ...
func ValidateUsage(usage string) error {
if !(len(usage) >= 5 && len(usage) <= 252) {
return ErrInvalidLengthUsage
}
return nil
}