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