Skip to main content

systemprompt_users/
extension.rs

1//! `Extension` registration for the users domain: schema and required flag.
2//!
3//! Copyright (c) systemprompt.io — Business Source License 1.1.
4//! See <https://systemprompt.io> for licensing details.
5
6use systemprompt_extension::prelude::*;
7
8#[derive(Debug, Clone, Copy, Default)]
9pub struct UsersExtension;
10
11impl Extension for UsersExtension {
12    fn metadata(&self) -> ExtensionMetadata {
13        ExtensionMetadata {
14            id: "users",
15            name: "Users",
16            version: env!("CARGO_PKG_VERSION"),
17        }
18    }
19
20    fn is_required(&self) -> bool {
21        true
22    }
23
24    fn schemas(&self) -> Vec<SchemaDefinition> {
25        vec![
26            SchemaDefinition::new("users", include_str!("../schema/users.sql"))
27                .with_required_columns(vec![
28                    "id".into(),
29                    "name".into(),
30                    "email".into(),
31                    "created_at".into(),
32                ]),
33            SchemaDefinition::new("user_sessions", include_str!("../schema/user_sessions.sql"))
34                .with_required_columns(vec!["session_id".into(), "started_at".into()]),
35            SchemaDefinition::new("banned_ips", include_str!("../schema/banned_ips.sql"))
36                .with_required_columns(vec![
37                    "ip_address".into(),
38                    "reason".into(),
39                    "banned_at".into(),
40                ]),
41            SchemaDefinition::new(
42                "session_analytics_views",
43                include_str!("../schema/session_analytics_views.sql"),
44            ),
45            SchemaDefinition::new(
46                "referrer_analytics_views",
47                include_str!("../schema/referrer_analytics_views.sql"),
48            ),
49            SchemaDefinition::new(
50                "bot_analytics_views",
51                include_str!("../schema/bot_analytics_views.sql"),
52            ),
53            SchemaDefinition::new("user_api_keys", include_str!("../schema/user_api_keys.sql"))
54                .with_required_columns(vec![
55                    "id".into(),
56                    "user_id".into(),
57                    "key_prefix".into(),
58                    "key_hash".into(),
59                ]),
60            SchemaDefinition::new(
61                "user_device_certs",
62                include_str!("../schema/user_device_certs.sql"),
63            )
64            .with_required_columns(vec![
65                "id".into(),
66                "user_id".into(),
67                "fingerprint".into(),
68                "label".into(),
69            ]),
70            SchemaDefinition::new(
71                "federated_identities",
72                include_str!("../schema/federated_identities.sql"),
73            )
74            .with_required_columns(vec![
75                "issuer".into(),
76                "external_sub".into(),
77                "user_id".into(),
78            ]),
79        ]
80    }
81
82    fn dependencies(&self) -> Vec<&'static str> {
83        vec![]
84    }
85
86    fn migrations(&self) -> Vec<Migration> {
87        extension_migrations!()
88    }
89}
90
91register_extension!(UsersExtension);