systemprompt_users/
extension.rs1use 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 SchemaDefinition::new(
66 "federated_identities",
67 include_str!("../schema/federated_identities.sql"),
68 )
69 .with_required_columns(vec![
70 "issuer".into(),
71 "external_sub".into(),
72 "user_id".into(),
73 ]),
74 ]
75 }
76
77 fn dependencies(&self) -> Vec<&'static str> {
78 vec![]
79 }
80
81 fn migrations(&self) -> Vec<Migration> {
82 extension_migrations!()
83 }
84}
85
86register_extension!(UsersExtension);