Skip to main content

systemprompt_users/
extension.rs

1use systemprompt_extension::prelude::*;
2
3#[derive(Debug, Clone, Copy, Default)]
4pub struct UsersExtension;
5
6impl Extension for UsersExtension {
7    fn metadata(&self) -> ExtensionMetadata {
8        ExtensionMetadata {
9            id: "users",
10            name: "Users",
11            version: env!("CARGO_PKG_VERSION"),
12        }
13    }
14
15    fn migration_weight(&self) -> u32 {
16        10
17    }
18
19    fn is_required(&self) -> bool {
20        true
21    }
22
23    fn schemas(&self) -> Vec<SchemaDefinition> {
24        vec![
25            SchemaDefinition::inline("users", include_str!("../schema/users.sql"))
26                .with_required_columns(vec![
27                    "id".into(),
28                    "name".into(),
29                    "email".into(),
30                    "created_at".into(),
31                ]),
32            SchemaDefinition::inline("user_sessions", include_str!("../schema/user_sessions.sql"))
33                .with_required_columns(vec!["session_id".into(), "started_at".into()]),
34            SchemaDefinition::inline("banned_ips", include_str!("../schema/banned_ips.sql"))
35                .with_required_columns(vec![
36                    "ip_address".into(),
37                    "reason".into(),
38                    "banned_at".into(),
39                ]),
40            SchemaDefinition::inline(
41                "session_analytics_views",
42                include_str!("../schema/session_analytics_views.sql"),
43            ),
44            SchemaDefinition::inline(
45                "referrer_analytics_views",
46                include_str!("../schema/referrer_analytics_views.sql"),
47            ),
48            SchemaDefinition::inline(
49                "bot_analytics_views",
50                include_str!("../schema/bot_analytics_views.sql"),
51            ),
52        ]
53    }
54
55    fn dependencies(&self) -> Vec<&'static str> {
56        vec![]
57    }
58}
59
60register_extension!(UsersExtension);