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 is_required(&self) -> bool {
16        true
17    }
18
19    fn schemas(&self) -> Vec<SchemaDefinition> {
20        vec![
21            SchemaDefinition::new("users", include_str!("../schema/users.sql"))
22                .with_required_columns(vec![
23                    "id".into(),
24                    "name".into(),
25                    "email".into(),
26                    "created_at".into(),
27                ]),
28            SchemaDefinition::new("user_sessions", include_str!("../schema/user_sessions.sql"))
29                .with_required_columns(vec!["session_id".into(), "started_at".into()]),
30            SchemaDefinition::new("banned_ips", include_str!("../schema/banned_ips.sql"))
31                .with_required_columns(vec![
32                    "ip_address".into(),
33                    "reason".into(),
34                    "banned_at".into(),
35                ]),
36            SchemaDefinition::new(
37                "session_analytics_views",
38                include_str!("../schema/session_analytics_views.sql"),
39            ),
40            SchemaDefinition::new(
41                "referrer_analytics_views",
42                include_str!("../schema/referrer_analytics_views.sql"),
43            ),
44            SchemaDefinition::new(
45                "bot_analytics_views",
46                include_str!("../schema/bot_analytics_views.sql"),
47            ),
48            SchemaDefinition::new("user_api_keys", include_str!("../schema/user_api_keys.sql"))
49                .with_required_columns(vec![
50                    "id".into(),
51                    "user_id".into(),
52                    "key_prefix".into(),
53                    "key_hash".into(),
54                ]),
55            SchemaDefinition::new(
56                "user_device_certs",
57                include_str!("../schema/user_device_certs.sql"),
58            )
59            .with_required_columns(vec![
60                "id".into(),
61                "user_id".into(),
62                "fingerprint".into(),
63                "label".into(),
64            ]),
65        ]
66    }
67
68    fn dependencies(&self) -> Vec<&'static str> {
69        vec![]
70    }
71
72    fn migrations(&self) -> Vec<Migration> {
73        extension_migrations!()
74    }
75}
76
77register_extension!(UsersExtension);