1use serde_json::json;
2
3use crate::models::DefaultPageTemplate;
4
5pub const DEFAULT_SITE_NAME: &str = "Default Site";
6pub(crate) const SITE_SCHEMA_NAME: &str = "site_data";
7
8pub fn default_page_templates() -> Vec<DefaultPageTemplate> {
9 vec![
10 DefaultPageTemplate::new("home", "Home", "/", "core"),
11 DefaultPageTemplate::new("about", "About", "/about", "core"),
12 DefaultPageTemplate::new("contact", "Contact", "/contact", "core"),
13 DefaultPageTemplate::new("docs", "Docs", "/docs", "content"),
14 DefaultPageTemplate::new("blog", "Blog", "/blog", "content"),
15 DefaultPageTemplate::new(
16 "privacy-policy",
17 "Privacy Policy",
18 "/privacy-policy",
19 "legal",
20 ),
21 DefaultPageTemplate::new(
22 "terms-of-service",
23 "Terms of Service",
24 "/terms-of-service",
25 "legal",
26 ),
27 DefaultPageTemplate::new("not-found", "Not Found", "/404", "core"),
28 ]
29}
30
31pub fn default_page_payload(template: &DefaultPageTemplate) -> serde_json::Value {
32 json!({
33 "key": template.key,
34 "title": template.title,
35 "route": template.route,
36 "section": template.section,
37 "status": "draft",
38 "meta": {},
39 "blocks": []
40 })
41}
42
43pub fn default_navigation_payload(templates: &[DefaultPageTemplate]) -> serde_json::Value {
44 let items = templates
45 .iter()
46 .filter(|template| template.key != "not-found")
47 .map(|template| {
48 json!({
49 "key": template.key,
50 "label": template.title,
51 "route": template.route
52 })
53 })
54 .collect::<Vec<serde_json::Value>>();
55
56 json!({
57 "key": "main",
58 "items": items
59 })
60}
61
62pub fn default_site_settings_payload() -> serde_json::Value {
63 json!({
64 "siteTitle": "New Site",
65 "siteDescription": "",
66 "locale": "en-US",
67 "timezone": "UTC"
68 })
69}
70
71pub fn default_tipping_payload() -> serde_json::Value {
72 json!({
73 "enabled": false,
74 "recipient": "",
75 "currencies": [],
76 "presets": {},
77 "label": "Leave a tip",
78 "description": "",
79 "allowPerPostRecipient": false
80 })
81}
82
83pub fn default_monetization_payload() -> serde_json::Value {
84 json!({
85 "enabled": false,
86 "defaultAccessMode": "free",
87 "defaultPreviewParagraphs": 3,
88 "acceptedPaymentMethods": [],
89 "defaultPrice": { "amount": 0, "currency": "USD" },
90 "subscriptionProductId": "",
91 "creditsPerArticle": 0,
92 "freeReadsPerMonth": 0
93 })
94}
95
96#[cfg(test)]
97mod tests {
98 use super::default_page_templates;
99
100 #[test]
101 fn defaults_include_legal_pages() {
102 let keys = default_page_templates()
103 .into_iter()
104 .map(|page| page.key)
105 .collect::<Vec<String>>();
106 assert!(keys.contains(&"privacy-policy".to_string()));
107 assert!(keys.contains(&"terms-of-service".to_string()));
108 }
109
110 #[test]
111 fn defaults_exclude_commerce_pages() {
112 let keys = default_page_templates()
113 .into_iter()
114 .map(|page| page.key)
115 .collect::<Vec<String>>();
116 assert!(!keys.contains(&"catalog".to_string()));
117 assert!(!keys.contains(&"cart".to_string()));
118 assert!(!keys.contains(&"checkout".to_string()));
119 assert!(!keys.contains(&"account".to_string()));
120 }
121}