rovenue/cache/
schema.rs

1pub const MIGRATION_V1: &str = r#"
2CREATE TABLE schema_meta (
3    version INTEGER PRIMARY KEY
4);
5
6CREATE TABLE identity (
7    id INTEGER PRIMARY KEY CHECK (id = 1),
8    anon_id TEXT NOT NULL,
9    known_user_id TEXT,
10    created_at_ms INTEGER NOT NULL
11);
12
13CREATE TABLE entitlements (
14    user_scope TEXT NOT NULL,
15    entitlement_id TEXT NOT NULL,
16    is_active INTEGER NOT NULL,
17    product_id TEXT,
18    expires_at_ms INTEGER,
19    updated_at_ms INTEGER NOT NULL,
20    PRIMARY KEY (user_scope, entitlement_id)
21);
22
23CREATE TABLE etag_cache (
24    resource TEXT PRIMARY KEY,
25    etag TEXT NOT NULL,
26    updated_at_ms INTEGER NOT NULL
27);
28
29INSERT INTO schema_meta (version) VALUES (1);
30"#;
31
32pub const MIGRATION_V2: &str = r#"
33ALTER TABLE entitlements ADD COLUMN store TEXT NOT NULL DEFAULT '';
34ALTER TABLE entitlements ADD COLUMN product_identifier TEXT NOT NULL DEFAULT '';
35ALTER TABLE entitlements ADD COLUMN expires_iso TEXT;
36
37CREATE TABLE credit_balance (
38    user_scope TEXT PRIMARY KEY,
39    balance INTEGER NOT NULL,
40    updated_at_ms INTEGER NOT NULL
41);
42
43UPDATE schema_meta SET version = 2;
44"#;
45
46pub const MIGRATION_V3: &str = r#"
47CREATE TABLE app_account_tokens (
48    scope TEXT PRIMARY KEY,
49    token TEXT NOT NULL,
50    created_at TEXT NOT NULL
51);
52
53CREATE TABLE session_events (
54    id INTEGER PRIMARY KEY AUTOINCREMENT,
55    kind TEXT NOT NULL,
56    occurred_at TEXT NOT NULL,
57    duration_ms INTEGER
58);
59CREATE INDEX idx_session_events_id ON session_events(id);
60
61UPDATE schema_meta SET version = 3;
62"#;
63
64pub const MIGRATION_V4: &str = r#"
65DROP TABLE IF EXISTS identity;
66
67CREATE TABLE IF NOT EXISTS identity (
68    id INTEGER PRIMARY KEY CHECK (id = 1),
69    rovenue_id TEXT NOT NULL,
70    app_user_id TEXT,
71    synced INTEGER NOT NULL DEFAULT 1,
72    created_at_ms INTEGER NOT NULL
73);
74
75UPDATE schema_meta SET version = 4;
76"#;
77
78pub const MIGRATION_V5: &str = r#"
79CREATE TABLE offerings_cache (
80    resource TEXT PRIMARY KEY,
81    body TEXT NOT NULL,
82    updated_at_ms INTEGER NOT NULL
83);
84
85UPDATE schema_meta SET version = 5;
86"#;
87
88pub const MIGRATION_V6: &str = "\
89CREATE TABLE attribute_mutations (\
90    id INTEGER PRIMARY KEY AUTOINCREMENT,\
91    key TEXT NOT NULL,\
92    value TEXT\
93);\
94CREATE INDEX idx_attribute_mutations_id ON attribute_mutations(id);\
95UPDATE schema_meta SET version = 6;\
96";
97
98pub const MIGRATION_V7: &str = r#"
99CREATE TABLE remote_config_cache (
100    resource TEXT PRIMARY KEY,
101    body TEXT NOT NULL,
102    updated_at_ms INTEGER NOT NULL
103);
104
105UPDATE schema_meta SET version = 7;
106"#;
107
108pub const MIGRATION_V8: &str = r#"
109CREATE TABLE virtual_currency_balance (
110    user_scope    TEXT NOT NULL,
111    code          TEXT NOT NULL,
112    balance       INTEGER NOT NULL,
113    updated_at_ms INTEGER NOT NULL,
114    PRIMARY KEY (user_scope, code)
115);
116
117CREATE TABLE experiment_exposure (
118    user_scope    TEXT NOT NULL,
119    experiment_id TEXT NOT NULL,
120    variant_id    TEXT NOT NULL,
121    exposed_at_ms INTEGER NOT NULL,
122    PRIMARY KEY (user_scope, experiment_id, variant_id)
123);
124
125UPDATE schema_meta SET version = 8;
126"#;
127
128pub const MIGRATION_V9: &str = r#"
129CREATE TABLE funnel_install (
130    id INTEGER PRIMARY KEY CHECK (id = 1),
131    install_id TEXT NOT NULL,
132    created_at_ms INTEGER NOT NULL
133);
134
135CREATE TABLE funnel_claim_state (
136    install_id TEXT PRIMARY KEY,
137    state TEXT NOT NULL,
138    subscriber_id TEXT,
139    claimed_at_ms INTEGER,
140    created_at_ms INTEGER NOT NULL
141);
142
143UPDATE schema_meta SET version = 9;
144"#;
145
146pub const MIGRATION_V10: &str = r#"
147CREATE TABLE placements_cache (
148    resource TEXT PRIMARY KEY,
149    body TEXT NOT NULL,
150    updated_at_ms INTEGER NOT NULL
151);
152
153UPDATE schema_meta SET version = 10;
154"#;
155
156pub const MIGRATION_V11: &str = r#"
157CREATE TABLE event_queue (
158    id INTEGER PRIMARY KEY AUTOINCREMENT,
159    envelope_json TEXT NOT NULL
160);
161CREATE INDEX idx_event_queue_id ON event_queue(id);
162
163UPDATE schema_meta SET version = 11;
164"#;
165
166/// Repairs the chain after MIGRATION_V11 was edited in place (b35f9bcb5):
167/// it first shipped creating `paywall_events`, and a store that reached v11
168/// then never runs the renamed text, so it has no `event_queue` and drops
169/// every funnel event. Idempotent on purpose — a store migrated after the
170/// edit already has `event_queue` (with queued events to keep). The paywall
171/// rail is gone and nothing drains `paywall_events`, so it is dropped.
172/// Never edit a migration that has shipped; append one like this.
173pub const MIGRATION_V12: &str = r#"
174CREATE TABLE IF NOT EXISTS event_queue (
175    id INTEGER PRIMARY KEY AUTOINCREMENT,
176    envelope_json TEXT NOT NULL
177);
178CREATE INDEX IF NOT EXISTS idx_event_queue_id ON event_queue(id);
179DROP TABLE IF EXISTS paywall_events;
180
181UPDATE schema_meta SET version = 12;
182"#;
183
184/// Session events and attribute mutations carry the wire identity they were
185/// recorded under, so each drains under its own subscriber and `log_out`
186/// has nothing to discard (it used to clear both, losing whatever the 30 s
187/// flush had not sent yet). Recreated rather than altered: rows buffered
188/// before this carry no identity to post them under.
189pub const MIGRATION_V13: &str = r#"
190DROP TABLE IF EXISTS session_events;
191CREATE TABLE session_events (
192    id INTEGER PRIMARY KEY AUTOINCREMENT,
193    rovenue_id TEXT NOT NULL,
194    kind TEXT NOT NULL,
195    occurred_at TEXT NOT NULL,
196    duration_ms INTEGER
197);
198CREATE INDEX idx_session_events_id ON session_events(id);
199
200DROP TABLE IF EXISTS attribute_mutations;
201CREATE TABLE attribute_mutations (
202    id INTEGER PRIMARY KEY AUTOINCREMENT,
203    rovenue_id TEXT NOT NULL,
204    key TEXT NOT NULL,
205    value TEXT
206);
207CREATE INDEX idx_attribute_mutations_id ON attribute_mutations(id);
208
209UPDATE schema_meta SET version = 13;
210"#;
211
212pub const MIGRATIONS: &[&str] = &[
213    MIGRATION_V1,
214    MIGRATION_V2,
215    MIGRATION_V3,
216    MIGRATION_V4,
217    MIGRATION_V5,
218    MIGRATION_V6,
219    MIGRATION_V7,
220    MIGRATION_V8,
221    MIGRATION_V9,
222    MIGRATION_V10,
223    MIGRATION_V11,
224    MIGRATION_V12,
225    MIGRATION_V13,
226];
227pub const LATEST: u32 = 13;