systemprompt_content/
extension.rs1use 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);