summaryrefslogtreecommitdiffstats
path: root/internal/cms/types.go
diff options
context:
space:
mode:
authorGab Virebent <gabriel1@virebent.art>2026-07-07 16:24:28 +0200
committerGab Virebent <gabriel1@virebent.art>2026-07-07 16:24:28 +0200
commit37f156c30e2a2b01c840d39f0dd2bdbf811732d6 (patch)
treee2ce84dc7f88ce0eb312899448f91b7bb93ca8a3 /internal/cms/types.go
downloadgemcms-37f156c30e2a2b01c840d39f0dd2bdbf811732d6.tar.gz
gemcms-37f156c30e2a2b01c840d39f0dd2bdbf811732d6.tar.xz
gemcms-37f156c30e2a2b01c840d39f0dd2bdbf811732d6.zip
Initial commitHEADmain
Diffstat (limited to 'internal/cms/types.go')
-rw-r--r--internal/cms/types.go174
1 files changed, 174 insertions, 0 deletions
diff --git a/internal/cms/types.go b/internal/cms/types.go
new file mode 100644
index 0000000..3d72f7b
--- /dev/null
+++ b/internal/cms/types.go
@@ -0,0 +1,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
+}