Skip to main content

systemprompt_content/
extension.rs

1use systemprompt_extension::prelude::*;
2
3#[derive(Debug, Clone, Copy, Default)]
4pub struct ContentExtension;
5
6impl Extension for ContentExtension {
7    fn metadata(&self) -> ExtensionMetadata {
8        ExtensionMetadata {
9            id: "content",
10            name: "Content",
11            version: env!("CARGO_PKG_VERSION"),
12        }
13    }
14
15    fn migration_weight(&self) -> u32 {
16        45
17    }
18
19    fn schemas(&self) -> Vec<SchemaDefinition> {
20        vec![
21            SchemaDefinition::inline(
22                "markdown_categories",
23                include_str!("../schema/markdown_categories.sql"),
24            )
25            .with_required_columns(vec!["id".into(), "name".into(), "slug".into()]),
26            SchemaDefinition::inline(
27                "markdown_content",
28                include_str!("../schema/markdown_content.sql"),
29            )
30            .with_required_columns(vec![
31                "id".into(),
32                "slug".into(),
33                "title".into(),
34                "created_at".into(),
35            ]),
36            SchemaDefinition::inline("markdown_fts", include_str!("../schema/markdown_fts.sql")),
37            SchemaDefinition::inline(
38                "content_performance_metrics",
39                include_str!("../schema/content_performance_metrics.sql"),
40            )
41            .with_required_columns(vec!["id".into(), "content_id".into()]),
42            SchemaDefinition::inline(
43                "campaign_links",
44                include_str!("../schema/campaign_links.sql"),
45            )
46            .with_required_columns(vec![
47                "id".into(),
48                "short_code".into(),
49                "target_url".into(),
50            ]),
51            SchemaDefinition::inline("link_clicks", include_str!("../schema/link_clicks.sql"))
52                .with_required_columns(vec!["id".into(), "link_id".into(), "clicked_at".into()]),
53            SchemaDefinition::inline(
54                "link_analytics_views",
55                include_str!("../schema/link_analytics_views.sql"),
56            ),
57        ]
58    }
59
60    fn dependencies(&self) -> Vec<&'static str> {
61        vec!["users", "analytics"]
62    }
63}
64
65register_extension!(ContentExtension);