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 ]
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);