systemprompt_users/
extension.rs1use systemprompt_extension::prelude::*;
2
3const MIGRATION_001_UTM_CONTENT_TERM: &str = r"
4ALTER TABLE user_sessions ADD COLUMN IF NOT EXISTS utm_source VARCHAR(100);
5ALTER TABLE user_sessions ADD COLUMN IF NOT EXISTS utm_medium VARCHAR(100);
6ALTER TABLE user_sessions ADD COLUMN IF NOT EXISTS utm_campaign VARCHAR(100);
7ALTER TABLE user_sessions ADD COLUMN IF NOT EXISTS utm_content VARCHAR(100);
8ALTER TABLE user_sessions ADD COLUMN IF NOT EXISTS utm_term VARCHAR(100);
9";
10
11#[derive(Debug, Clone, Copy, Default)]
12pub struct UsersExtension;
13
14impl Extension for UsersExtension {
15 fn metadata(&self) -> ExtensionMetadata {
16 ExtensionMetadata {
17 id: "users",
18 name: "Users",
19 version: env!("CARGO_PKG_VERSION"),
20 }
21 }
22
23 fn migration_weight(&self) -> u32 {
24 10
25 }
26
27 fn is_required(&self) -> bool {
28 true
29 }
30
31 fn schemas(&self) -> Vec<SchemaDefinition> {
32 vec![
33 SchemaDefinition::inline("users", include_str!("../schema/users.sql"))
34 .with_required_columns(vec![
35 "id".into(),
36 "name".into(),
37 "email".into(),
38 "created_at".into(),
39 ]),
40 SchemaDefinition::inline("user_sessions", include_str!("../schema/user_sessions.sql"))
41 .with_required_columns(vec!["session_id".into(), "started_at".into()]),
42 SchemaDefinition::inline("banned_ips", include_str!("../schema/banned_ips.sql"))
43 .with_required_columns(vec![
44 "ip_address".into(),
45 "reason".into(),
46 "banned_at".into(),
47 ]),
48 SchemaDefinition::inline(
49 "session_analytics_views",
50 include_str!("../schema/session_analytics_views.sql"),
51 ),
52 SchemaDefinition::inline(
53 "referrer_analytics_views",
54 include_str!("../schema/referrer_analytics_views.sql"),
55 ),
56 SchemaDefinition::inline(
57 "bot_analytics_views",
58 include_str!("../schema/bot_analytics_views.sql"),
59 ),
60 SchemaDefinition::inline("user_api_keys", include_str!("../schema/user_api_keys.sql"))
61 .with_required_columns(vec![
62 "id".into(),
63 "user_id".into(),
64 "key_prefix".into(),
65 "key_hash".into(),
66 ]),
67 SchemaDefinition::inline(
68 "user_device_certs",
69 include_str!("../schema/user_device_certs.sql"),
70 )
71 .with_required_columns(vec![
72 "id".into(),
73 "user_id".into(),
74 "fingerprint".into(),
75 "label".into(),
76 ]),
77 ]
78 }
79
80 fn dependencies(&self) -> Vec<&'static str> {
81 vec![]
82 }
83
84 fn migrations(&self) -> Vec<Migration> {
85 vec![Migration::new(
86 1,
87 "add_user_sessions_utm_content_term",
88 MIGRATION_001_UTM_CONTENT_TERM,
89 )]
90 }
91}
92
93register_extension!(UsersExtension);