summaryrefslogtreecommitdiffstats
path: root/internal/cms/types.go
blob: 3d72f7b6b6c660b76cf7868d6c79d09002db92eb (plain) (blame)
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
package cms

type Config struct {
	Title    string
	Host     string
	Author   string
	Language string
	Theme    string
}

type SiteOptions struct {
	Name     string
	Title    string
	Host     string
	Author   string
	Language string
}

type PageOptions struct {
	Slug  string
	Title string
	Menu  string
}

type ArticleOptions struct {
	Title   string
	Section string
	Tags    []string
	Draft   bool
	Menu    string
}

type AddOptions struct {
	Path    string
	Type    string
	Title   string
	Slug    string
	Section string
	Tags    []string
	Draft   bool
	Menu    string
}

type AddReport struct {
	Documents []Document
}

type SectionOptions struct {
	Name  string
	Title string
}

type WidgetOptions struct {
	Type    string
	Name    string
	Section string
	Limit   int
}

type MenuItemOptions struct {
	Menu   string
	Kind   string
	Target string
	Label  string
	URL    string
}

type Document struct {
	Type       string
	Slug       string
	Title      string
	Date       string
	Section    string
	Tags       []string
	Draft      bool
	Body       string
	SourcePath string
}

type Menu struct {
	Name  string
	Items []MenuItem
}

type MenuItem struct {
	Label string
	URL   string
}

type Section struct {
	Name  string
	Title string
}

type Widget struct {
	Name    string
	Type    string
	Section string
	Limit   int
}

type Project struct {
	Root     string
	Config   Config
	Docs     []Document
	Menus    map[string]Menu
	Sections map[string]Section
	Widgets  map[string]Widget
}

type BuildReport struct {
	OutputDir    string
	FilesWritten int
}

type CheckReport struct {
	Issues []Issue
}

type StatusReport struct {
	Root        string
	Config      Config
	Pages       int
	Articles    int
	Drafts      int
	Menus       int
	Sections    int
	Widgets     int
	PublicFiles int
	Issues      []Issue
}

type Issue struct {
	Level   string
	Path    string
	Message string
}

func (r CheckReport) HasErrors() bool {
	for _, issue := range r.Issues {
		if issue.Level == "ERROR" {
			return true
		}
	}
	return false
}

func (r StatusReport) ErrorCount() int {
	return countIssues(r.Issues, "ERROR")
}

func (r StatusReport) WarningCount() int {
	return countIssues(r.Issues, "WARN")
}

func (r StatusReport) Health() string {
	if r.ErrorCount() > 0 {
		return "ERROR"
	}
	if r.WarningCount() > 0 {
		return "WARN"
	}
	return "OK"
}

func countIssues(issues []Issue, level string) int {
	count := 0
	for _, issue := range issues {
		if issue.Level == level {
			count++
		}
	}
	return count
}