From d068fda090568d08948782058ed43187010f0d4f Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 26 Jun 2026 19:47:28 +0000 Subject: [PATCH] chore: prefix db tables Signed-off-by: Trezy --- src/event_log.rs | 6 +++--- src/jetstream.rs | 7 +++++-- src/labeler.rs | 28 +++++++++++++++------------- src/lexicon.rs | 2 +- src/main.rs | 25 +++++++++++++------------ src/record_handler.rs | 12 ++++++------ src/record_refs.rs | 7 +++++-- src/service_entries.rs | 29 ++++++++++++++++------------- src/service_identity.rs | 6 +++--- src/setup.rs | 12 ++++++------ tests/dev_happyview.rs | 4 ++-- tests/e2e_admin.rs | 17 ++++++++++------- tests/e2e_admin_service_entries.rs | 2 +- tests/e2e_api_clients.rs | 10 +++++----- tests/e2e_delegation.rs | 2 +- tests/e2e_domains.rs | 2 +- tests/e2e_labelers.rs | 7 +++++-- tests/e2e_network_lexicons.rs | 4 ++-- tests/e2e_scripts.rs | 12 ++++++------ tests/e2e_xrpc.rs | 7 +++++-- tests/lua_atproto_api.rs | 35 +++++++++++++++++++---------------- tests/lua_db_api.rs | 4 ++-- tests/lua_record_api.rs | 12 +++++++++--- tests/plugin_logging.rs | 4 ++-- migrations/postgres/20260626000000_prefix_table_names.sql | 47 +++++++++++++++++++++++++++++++++++++++++++++++ migrations/sqlite/20260626000000_prefix_table_names.sql | 47 +++++++++++++++++++++++++++++++++++++++++++++++ src/admin/api_clients.rs | 25 ++++++++++++++----------- src/admin/api_keys.rs | 6 +++--- src/admin/auth.rs | 25 +++++++++++++++++-------- src/admin/backfill.rs | 98 +++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------- src/admin/dead_letters.rs | 24 +++++++++++++----------- src/admin/domains.rs | 19 +++++++++++-------- src/admin/events.rs | 2 +- src/admin/labelers.rs | 13 ++++++++----- src/admin/lexicons.rs | 10 +++++----- src/admin/network_lexicons.rs | 8 ++++---- src/admin/plugins.rs | 17 ++++++++++------- src/admin/proxy_config.rs | 2 +- src/admin/records.rs | 13 ++++++++----- src/admin/script_variables.rs | 9 ++++++--- src/admin/scripts.rs | 24 +++++++++++++----------- src/admin/service_entries.rs | 6 +++--- src/admin/settings.rs | 23 ++++++++++++++++------- src/admin/stats.rs | 6 +++--- src/admin/users.rs | 41 +++++++++++++++++++++++++---------------- src/auth/client_registry.rs | 2 +- src/auth/middleware.rs | 2 +- src/auth/oauth_store.rs | 16 ++++++++-------- src/auth/routes.rs | 28 +++++++++++++++------------- src/delegation/db.rs | 20 ++++++++++---------- src/delegation/link_account.rs | 2 +- src/dev_happyview/create_client.rs | 6 +++--- src/dev_happyview/delete_client.rs | 6 +++--- src/dev_happyview/get_client.rs | 2 +- src/dev_happyview/list_clients.rs | 4 ++-- src/external_auth/routes.rs | 2 +- src/external_auth/state.rs | 11 +++++++---- src/external_auth/sync.rs | 2 +- src/external_auth/tokens.rs | 12 ++++++------ src/lua/atproto_api.rs | 8 ++++---- src/lua/db_api.rs | 39 ++++++++++++++++++++++----------------- src/lua/execute.rs | 2 +- src/lua/record.rs | 20 ++++++++++---------- src/lua/scripts.rs | 6 +++--- src/lua/xrpc_api.rs | 4 ++-- src/oauth/client_auth.rs | 6 +++--- src/oauth/keys.rs | 18 ++++++++++++------ src/oauth/pds_write.rs | 4 ++-- src/oauth/sessions.rs | 26 +++++++++++++------------- src/plugin/attestation.rs | 11 +++++++---- src/plugin/mod.rs | 4 ++-- src/plugin/sync.rs | 2 +- src/repo/session.rs | 2 +- src/spaces/auth.rs | 6 +++--- src/spaces/db.rs | 59 +++++++++++++++++++++++++++++++---------------------------- src/spaces/routes.rs | 5 ++++- src/xrpc/procedure.rs | 8 ++++---- src/xrpc/query.rs | 9 ++++++--- tests/common/app.rs | 4 ++-- tests/common/db.rs | 50 +++++++++++++++++++++++++------------------------- src/plugin/host/kv.rs | 6 +++--- src/plugin/host/lookup.rs | 2 +- web/tests/e2e/auth-helper.ts | 6 +++--- web/tests/e2e/record-delete.spec.ts | 4 ++-- 84 file(s) changed, 674 insertion(s)(+), 473 deletion(s)(-) diff --git a/src/event_log.rs b/src/event_log.rs --- a/src/event_log.rs +++ b/src/event_log.rs @@ -44,11 +44,11 @@ // Cannot use adapt_sql: Postgres uses make_interval(days => $1) which has no SQLite equivalent pattern. let cleanup_sql = match backend { DatabaseBackend::Sqlite => { - "DELETE FROM event_logs WHERE created_at < datetime('now', '-' || ? || ' days')" + "DELETE FROM happyview_event_logs WHERE created_at < datetime('now', '-' || ? || ' days')" .to_string() } DatabaseBackend::Postgres => { - "DELETE FROM event_logs WHERE created_at < NOW() - make_interval(days => $1)" + "DELETE FROM happyview_event_logs WHERE created_at < NOW() - make_interval(days => $1)" .to_string() } }; @@ -82,7 +82,7 @@ let created_at = now_rfc3339(); let sql = adapt_sql( - "INSERT INTO event_logs (id, event_type, severity, actor_did, subject, detail, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", + "INSERT INTO happyview_event_logs (id, event_type, severity, actor_did, subject, detail, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", backend, ); diff --git a/src/jetstream.rs b/src/jetstream.rs --- a/src/jetstream.rs +++ b/src/jetstream.rs @@ -47,7 +47,10 @@ // --------------------------------------------------------------------------- async fn load_cursor(db: &AnyPool, backend: DatabaseBackend) -> Option { - let sql = adapt_sql("SELECT value FROM instance_settings WHERE key = ?", backend); + let sql = adapt_sql( + "SELECT value FROM happyview_instance_settings WHERE key = ?", + backend, + ); let row: Option<(String,)> = sqlx::query_as(&sql) .bind("jetstream_cursor") .fetch_optional(db) @@ -60,7 +63,7 @@ let now = now_rfc3339(); let sql = adapt_sql( r#" - INSERT INTO instance_settings (key, value, updated_at) + INSERT INTO happyview_instance_settings (key, value, updated_at) VALUES (?, ?, ?) ON CONFLICT (key) DO UPDATE SET value = ?, updated_at = ? "#, diff --git a/src/labeler.rs b/src/labeler.rs --- a/src/labeler.rs +++ b/src/labeler.rs @@ -59,11 +59,12 @@ loop { // Read all active subscriptions from the database. - let active: Vec<(String,)> = - sqlx::query_as("SELECT did FROM labeler_subscriptions WHERE status = 'active'") - .fetch_all(&state.db) - .await - .unwrap_or_default(); + let active: Vec<(String,)> = sqlx::query_as( + "SELECT did FROM happyview_labeler_subscriptions WHERE status = 'active'", + ) + .fetch_all(&state.db) + .await + .unwrap_or_default(); let active_dids: Vec = active.into_iter().map(|(did,)| did).collect(); @@ -149,7 +150,7 @@ // Read cursor from database. let cursor_sql = adapt_sql( - "SELECT cursor FROM labeler_subscriptions WHERE did = ?", + "SELECT cursor FROM happyview_labeler_subscriptions WHERE did = ?", state.db_backend, ); let cursor: Option<(Option,)> = sqlx::query_as(&cursor_sql) @@ -358,7 +359,7 @@ if final_label.neg { // Negation label — remove it. let delete_sql = adapt_sql( - "DELETE FROM labels WHERE src = ? AND uri = ? AND val = ?", + "DELETE FROM happyview_labels WHERE src = ? AND uri = ? AND val = ?", backend, ); if let Err(e) = sqlx::query(&delete_sql) @@ -377,7 +378,7 @@ // Normal label — upsert. Store timestamps as RFC3339 strings for portability. let insert_sql = adapt_sql( r#" - INSERT INTO labels (src, uri, val, cts, exp) + INSERT INTO happyview_labels (src, uri, val, cts, exp) VALUES (?, ?, ?, ?, ?) ON CONFLICT (src, uri, val) DO UPDATE SET cts = EXCLUDED.cts, @@ -406,7 +407,7 @@ async fn persist_cursor(db: &sqlx::AnyPool, did: &str, seq: i64, backend: DatabaseBackend) { let now = now_rfc3339(); let update_sql = adapt_sql( - "UPDATE labeler_subscriptions SET cursor = ?, updated_at = ? WHERE did = ?", + "UPDATE happyview_labeler_subscriptions SET cursor = ?, updated_at = ? WHERE did = ?", backend, ); if let Err(e) = sqlx::query(&update_sql) @@ -439,7 +440,7 @@ uri: &str, ) -> Result<(), Box> { let subscriptions: Vec<(String,)> = - sqlx::query_as("SELECT did FROM labeler_subscriptions WHERE status = 'active'") + sqlx::query_as("SELECT did FROM happyview_labeler_subscriptions WHERE status = 'active'") .fetch_all(&state.db) .await?; @@ -502,10 +503,11 @@ // Build database-specific cleanup query for expired labels let expired_sql = match backend { DatabaseBackend::Sqlite => { - "DELETE FROM labels WHERE exp IS NOT NULL AND exp < datetime('now')".to_string() + "DELETE FROM happyview_labels WHERE exp IS NOT NULL AND exp < datetime('now')" + .to_string() } DatabaseBackend::Postgres => { - "DELETE FROM labels WHERE exp IS NOT NULL AND exp < NOW()".to_string() + "DELETE FROM happyview_labels WHERE exp IS NOT NULL AND exp < NOW()".to_string() } }; @@ -525,7 +527,7 @@ // Delete orphaned labels (no matching record). let orphaned = sqlx::query( - "DELETE FROM labels WHERE NOT EXISTS (SELECT 1 FROM records WHERE records.uri = labels.uri)", + "DELETE FROM happyview_labels WHERE NOT EXISTS (SELECT 1 FROM happyview_records WHERE happyview_records.uri = happyview_labels.uri)", ) .execute(&db) .await; diff --git a/src/lexicon.rs b/src/lexicon.rs --- a/src/lexicon.rs +++ b/src/lexicon.rs @@ -176,7 +176,7 @@ Option, Option, )> = sqlx::query_as( - "SELECT id, lexicon_json, revision, target_collection, action, token_cost FROM lexicons", + "SELECT id, lexicon_json, revision, target_collection, action, token_cost FROM happyview_lexicons", ) .fetch_all(db) .await diff --git a/src/main.rs b/src/main.rs --- a/src/main.rs +++ b/src/main.rs @@ -53,14 +53,14 @@ let db_bg = db_pool.clone(); let backend = db_backend; tokio::spawn(async move { - let count: (i64,) = sqlx::query_as("SELECT COUNT(*) FROM record_refs") + let count: (i64,) = sqlx::query_as("SELECT COUNT(*) FROM happyview_record_refs") .fetch_one(&db_bg) .await .expect("failed to count record_refs"); if count.0 == 0 { info!("backfilling record_refs table in background..."); - let total: (i64,) = sqlx::query_as("SELECT COUNT(*) FROM records") + let total: (i64,) = sqlx::query_as("SELECT COUNT(*) FROM happyview_records") .fetch_one(&db_bg) .await .expect("failed to count records"); @@ -71,7 +71,7 @@ let mut processed = 0usize; let query = db::adapt_sql( - "SELECT uri, collection, record FROM records ORDER BY uri LIMIT ? OFFSET ?", + "SELECT uri, collection, record FROM happyview_records ORDER BY uri LIMIT ? OFFSET ?", backend, ); @@ -121,7 +121,7 @@ // Re-fetch all network lexicons from their respective PDSes. let http = reqwest::Client::new(); let network_rows: Vec<(String, Option, Option)> = sqlx::query_as( - "SELECT id, authority_did, target_collection FROM lexicons WHERE source = 'network'", + "SELECT id, authority_did, target_collection FROM happyview_lexicons WHERE source = 'network'", ) .fetch_all(&db_pool) .await @@ -142,7 +142,7 @@ Ok(parsed) => { let now = db::now_rfc3339(); let update_sql = db::adapt_sql( - "UPDATE lexicons SET lexicon_json = ?, last_fetched_at = ?, revision = revision + 1, updated_at = ? WHERE id = ? AND source = 'network'", + "UPDATE happyview_lexicons SET lexicon_json = ?, last_fetched_at = ?, revision = revision + 1, updated_at = ? WHERE id = ? AND source = 'network'", db_backend, ); let lexicon_json_str = @@ -283,7 +283,7 @@ Option, ); let client_rows: Vec = sqlx::query_as( - "SELECT client_key, client_secret_hash, client_uri, rate_limit_capacity, rate_limit_refill_rate, parent_client_id FROM api_clients WHERE is_active = 1", + "SELECT client_key, client_secret_hash, client_uri, rate_limit_capacity, rate_limit_refill_rate, parent_client_id FROM happyview_api_clients WHERE is_active = 1", ) .fetch_all(&db_pool) .await @@ -326,7 +326,8 @@ // Seed and load domain cache let domain_cache = happyview::domain::DomainCache::new(); { - let count_sql = happyview::db::adapt_sql("SELECT COUNT(*) FROM domains", db_backend); + let count_sql = + happyview::db::adapt_sql("SELECT COUNT(*) FROM happyview_domains", db_backend); let row = sqlx::query(&count_sql) .fetch_one(&db_pool) .await @@ -337,7 +338,7 @@ let id = uuid::Uuid::new_v4().to_string(); let now = happyview::db::now_rfc3339(); let insert_sql = happyview::db::adapt_sql( - "INSERT INTO domains (id, url, is_primary, created_at, updated_at) VALUES (?, ?, 1, ?, ?)", + "INSERT INTO happyview_domains (id, url, is_primary, created_at, updated_at) VALUES (?, ?, 1, ?, ?)", db_backend, ); sqlx::query(&insert_sql) @@ -352,7 +353,7 @@ } else { // Sync the primary domain URL with PUBLIC_URL if it changed let primary_sql = happyview::db::adapt_sql( - "SELECT id, url FROM domains WHERE is_primary = 1", + "SELECT id, url FROM happyview_domains WHERE is_primary = 1", db_backend, ); if let Some(row) = sqlx::query(&primary_sql) @@ -365,7 +366,7 @@ let primary_id: String = row.try_get("id").unwrap_or_default(); let now = happyview::db::now_rfc3339(); let update_sql = happyview::db::adapt_sql( - "UPDATE domains SET url = ?, updated_at = ? WHERE id = ?", + "UPDATE happyview_domains SET url = ?, updated_at = ? WHERE id = ?", db_backend, ); sqlx::query(&update_sql) @@ -384,7 +385,7 @@ } let select_sql = happyview::db::adapt_sql( - "SELECT id, url, is_primary, created_at, updated_at FROM domains", + "SELECT id, url, is_primary, created_at, updated_at FROM happyview_domains", db_backend, ); let rows = sqlx::query(&select_sql) @@ -720,7 +721,7 @@ { let now = happyview::db::now_rfc3339(); let sql = happyview::db::adapt_sql( - "INSERT INTO instance_settings (key, value, updated_at) VALUES (?, ?, ?) ON CONFLICT (key) DO NOTHING", + "INSERT INTO happyview_instance_settings (key, value, updated_at) VALUES (?, ?, ?) ON CONFLICT (key) DO NOTHING", backend, ); if let Err(e) = sqlx::query(&sql) diff --git a/src/record_handler.rs b/src/record_handler.rs --- a/src/record_handler.rs +++ b/src/record_handler.rs @@ -103,7 +103,7 @@ let backend = state.db_backend; let insert_sql = adapt_sql( r#" - INSERT INTO records (uri, did, collection, rkey, record, cid, indexed_at, created_at) + INSERT INTO happyview_records (uri, did, collection, rkey, record, cid, indexed_at, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT (uri) DO UPDATE SET record = EXCLUDED.record, @@ -216,7 +216,7 @@ return; } - let delete_sql = adapt_sql("DELETE FROM records WHERE uri = ?", backend); + let delete_sql = adapt_sql("DELETE FROM happyview_records WHERE uri = ?", backend); match sqlx::query(&delete_sql).bind(&uri).execute(db).await { Ok(_) => { if state.verbose_event_logging.load(Ordering::Relaxed) { @@ -275,7 +275,7 @@ // Check if this NSID is one we're tracking and the DID matches the authority. let select_sql = adapt_sql( - "SELECT target_collection FROM lexicons WHERE id = ? AND source = 'network' AND authority_did = ?", + "SELECT target_collection FROM happyview_lexicons WHERE id = ? AND source = 'network' AND authority_did = ?", backend, ); let tracked: Option<(Option,)> = sqlx::query_as(&select_sql) @@ -317,13 +317,13 @@ let now = now_rfc3339(); let upsert_sql = adapt_sql( r#" - INSERT INTO lexicons (id, lexicon_json, backfill, target_collection, source, authority_did, last_fetched_at, created_at) + INSERT INTO happyview_lexicons (id, lexicon_json, backfill, target_collection, source, authority_did, last_fetched_at, created_at) VALUES (?, ?, 0, ?, 'network', ?, ?, ?) ON CONFLICT (id) DO UPDATE SET lexicon_json = EXCLUDED.lexicon_json, target_collection = EXCLUDED.target_collection, last_fetched_at = ?, - revision = lexicons.revision + 1, + revision = happyview_lexicons.revision + 1, updated_at = ? "#, backend, @@ -354,7 +354,7 @@ } "delete" => { // Remove from lexicons table and registry. - let delete_sql = adapt_sql("DELETE FROM lexicons WHERE id = ?", backend); + let delete_sql = adapt_sql("DELETE FROM happyview_lexicons WHERE id = ?", backend); let _ = sqlx::query(&delete_sql).bind(nsid).execute(db).await; let was_present = lexicons.remove(nsid).await; diff --git a/src/record_refs.rs b/src/record_refs.rs --- a/src/record_refs.rs +++ b/src/record_refs.rs @@ -40,7 +40,10 @@ let uris = extract_at_uris(record); // Delete existing refs for this source - let delete_sql = adapt_sql("DELETE FROM record_refs WHERE source_uri = ?", backend); + let delete_sql = adapt_sql( + "DELETE FROM happyview_record_refs WHERE source_uri = ?", + backend, + ); sqlx::query(&delete_sql) .bind(source_uri) .execute(db) @@ -48,7 +51,7 @@ // Insert new refs let insert_sql = adapt_sql( - "INSERT INTO record_refs (source_uri, target_uri, collection) VALUES (?, ?, ?) ON CONFLICT DO NOTHING", + "INSERT INTO happyview_record_refs (source_uri, target_uri, collection) VALUES (?, ?, ?) ON CONFLICT DO NOTHING", backend, ); for target_uri in &uris { diff --git a/src/service_entries.rs b/src/service_entries.rs --- a/src/service_entries.rs +++ b/src/service_entries.rs @@ -59,7 +59,7 @@ backend: DatabaseBackend, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT id, fragment_id, service_type, access_mode, created_at, updated_at FROM service_entries ORDER BY id", + "SELECT id, fragment_id, service_type, access_mode, created_at, updated_at FROM happyview_service_entries ORDER BY id", backend, ); @@ -80,7 +80,7 @@ let now = Utc::now().to_rfc3339(); let insert_sql = adapt_sql( - "INSERT INTO service_entries (fragment_id, service_type, access_mode, created_at, updated_at) VALUES (?, ?, 'all', ?, ?) RETURNING id", + "INSERT INTO happyview_service_entries (fragment_id, service_type, access_mode, created_at, updated_at) VALUES (?, ?, 'all', ?, ?) RETURNING id", backend, ); @@ -96,7 +96,7 @@ let id = row.0; let fetch_sql = adapt_sql( - "SELECT id, fragment_id, service_type, access_mode, created_at, updated_at FROM service_entries WHERE id = ?", + "SELECT id, fragment_id, service_type, access_mode, created_at, updated_at FROM happyview_service_entries WHERE id = ?", backend, ); @@ -142,7 +142,7 @@ if set_clauses.len() == 1 { // Only updated_at — nothing meaningful to update; just fetch current state. let fetch_sql = adapt_sql( - "SELECT id, fragment_id, service_type, access_mode, created_at, updated_at FROM service_entries WHERE id = ?", + "SELECT id, fragment_id, service_type, access_mode, created_at, updated_at FROM happyview_service_entries WHERE id = ?", backend, ); let row: Option = sqlx::query_as(&fetch_sql) @@ -156,7 +156,7 @@ } let raw = format!( - "UPDATE service_entries SET {} WHERE id = ?", + "UPDATE happyview_service_entries SET {} WHERE id = ?", set_clauses.join(", ") ); let update_sql = adapt_sql(&raw, backend); @@ -183,7 +183,7 @@ } let fetch_sql = adapt_sql( - "SELECT id, fragment_id, service_type, access_mode, created_at, updated_at FROM service_entries WHERE id = ?", + "SELECT id, fragment_id, service_type, access_mode, created_at, updated_at FROM happyview_service_entries WHERE id = ?", backend, ); let row: ServiceEntryRow = sqlx::query_as(&fetch_sql) @@ -201,7 +201,10 @@ backend: DatabaseBackend, id: i64, ) -> Result { - let sql = adapt_sql("DELETE FROM service_entries WHERE id = ?", backend); + let sql = adapt_sql( + "DELETE FROM happyview_service_entries WHERE id = ?", + backend, + ); let result = sqlx::query(&sql) .bind(id) @@ -223,7 +226,7 @@ entry_id: i64, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT lexicon_id FROM service_entry_xrpcs WHERE service_entry_id = ? ORDER BY lexicon_id", + "SELECT lexicon_id FROM happyview_service_entry_xrpcs WHERE service_entry_id = ? ORDER BY lexicon_id", backend, ); @@ -244,7 +247,7 @@ lexicon_ids: &[String], ) -> Result<(), AppError> { let sql = adapt_sql( - "INSERT INTO service_entry_xrpcs (service_entry_id, lexicon_id) VALUES (?, ?) ON CONFLICT DO NOTHING", + "INSERT INTO happyview_service_entry_xrpcs (service_entry_id, lexicon_id) VALUES (?, ?) ON CONFLICT DO NOTHING", backend, ); @@ -268,7 +271,7 @@ lexicon_ids: &[String], ) -> Result<(), AppError> { let sql = adapt_sql( - "DELETE FROM service_entry_xrpcs WHERE service_entry_id = ? AND lexicon_id = ?", + "DELETE FROM happyview_service_entry_xrpcs WHERE service_entry_id = ? AND lexicon_id = ?", backend, ); @@ -299,7 +302,7 @@ xrpc_method: &str, ) -> Result { let sql = adapt_sql( - "SELECT id, access_mode FROM service_entries WHERE fragment_id = ? LIMIT 1", + "SELECT id, access_mode FROM happyview_service_entries WHERE fragment_id = ? LIMIT 1", backend, ); @@ -320,7 +323,7 @@ // access_mode = "specific" — check junction table let check_sql = adapt_sql( - "SELECT 1 FROM service_entry_xrpcs WHERE service_entry_id = ? AND lexicon_id = ? LIMIT 1", + "SELECT 1 FROM happyview_service_entry_xrpcs WHERE service_entry_id = ? AND lexicon_id = ? LIMIT 1", backend, ); @@ -343,7 +346,7 @@ lexicon_id: &str, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT id, fragment_id, service_type, access_mode, created_at, updated_at FROM service_entries WHERE access_mode = 'all' OR EXISTS (SELECT 1 FROM service_entry_xrpcs WHERE service_entry_xrpcs.service_entry_id = service_entries.id AND service_entry_xrpcs.lexicon_id = ?) ORDER BY id", + "SELECT id, fragment_id, service_type, access_mode, created_at, updated_at FROM happyview_service_entries WHERE access_mode = 'all' OR EXISTS (SELECT 1 FROM happyview_service_entry_xrpcs WHERE happyview_service_entry_xrpcs.service_entry_id = happyview_service_entries.id AND happyview_service_entry_xrpcs.lexicon_id = ?) ORDER BY id", backend, ); diff --git a/src/service_identity.rs b/src/service_identity.rs --- a/src/service_identity.rs +++ b/src/service_identity.rs @@ -82,7 +82,7 @@ backend: DatabaseBackend, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT mode, did, signing_key_enc, attached_account_did, CAST(setup_complete AS INTEGER), created_at, updated_at FROM service_identity WHERE id = 1", + "SELECT mode, did, signing_key_enc, attached_account_did, CAST(setup_complete AS INTEGER), created_at, updated_at FROM happyview_service_identity WHERE id = 1", backend, ); @@ -139,7 +139,7 @@ ) -> Result<(), AppError> { let now = chrono::Utc::now().to_rfc3339(); let sql = adapt_sql( - "INSERT INTO service_identity (id, mode, did, signing_key_enc, rotation_key_enc, attached_account_did, setup_complete, created_at, updated_at) + "INSERT INTO happyview_service_identity (id, mode, did, signing_key_enc, rotation_key_enc, attached_account_did, setup_complete, created_at, updated_at) VALUES (1, ?, ?, ?, ?, ?, FALSE, ?, ?) ON CONFLICT (id) DO UPDATE SET mode = excluded.mode, @@ -171,7 +171,7 @@ pub async fn mark_setup_complete(db: &AnyPool, backend: DatabaseBackend) -> Result<(), AppError> { let now = chrono::Utc::now().to_rfc3339(); let sql = adapt_sql( - "UPDATE service_identity SET setup_complete = TRUE, updated_at = ? WHERE id = 1", + "UPDATE happyview_service_identity SET setup_complete = TRUE, updated_at = ? WHERE id = 1", backend, ); diff --git a/src/setup.rs b/src/setup.rs --- a/src/setup.rs +++ b/src/setup.rs @@ -191,7 +191,7 @@ // Decrypt rotation key let sql = crate::db::adapt_sql( - "SELECT rotation_key_enc FROM service_identity WHERE id = 1", + "SELECT rotation_key_enc FROM happyview_service_identity WHERE id = 1", state.db_backend, ); let row: Option<(Option,)> = sqlx::query_as(&sql) @@ -260,7 +260,7 @@ let account_did = match identity.mode { IdentityMode::AttachAccount => { let sql = crate::db::adapt_sql( - "SELECT attached_account_did FROM service_identity WHERE id = 1", + "SELECT attached_account_did FROM happyview_service_identity WHERE id = 1", state.db_backend, ); let row: Option<(Option,)> = sqlx::query_as(&sql) @@ -318,7 +318,7 @@ let account_did = match identity.mode { IdentityMode::AttachAccount => { let sql = crate::db::adapt_sql( - "SELECT attached_account_did FROM service_identity WHERE id = 1", + "SELECT attached_account_did FROM happyview_service_identity WHERE id = 1", state.db_backend, ); let row: Option<(Option,)> = sqlx::query_as(&sql) @@ -492,7 +492,7 @@ // Verify the current DID matches the configured attached_account_did let sql = crate::db::adapt_sql( - "SELECT attached_account_did FROM service_identity WHERE id = 1", + "SELECT attached_account_did FROM happyview_service_identity WHERE id = 1", state.db_backend, ); let row: Option<(Option,)> = sqlx::query_as(&sql) @@ -518,7 +518,7 @@ // Verify the original DID is a known admin user let user_exists: Option<(i32,)> = sqlx::query_as(&crate::db::adapt_sql( - "SELECT 1 FROM users WHERE did = ?", + "SELECT 1 FROM happyview_users WHERE did = ?", state.db_backend, )) .bind(&original_did) @@ -564,7 +564,7 @@ } let sql = crate::db::adapt_sql( - "SELECT rotation_key_enc FROM service_identity WHERE id = 1", + "SELECT rotation_key_enc FROM happyview_service_identity WHERE id = 1", state.db_backend, ); let row: Option<(Option,)> = sqlx::query_as(&sql) diff --git a/tests/dev_happyview.rs b/tests/dev_happyview.rs --- a/tests/dev_happyview.rs +++ b/tests/dev_happyview.rs @@ -300,7 +300,7 @@ let client_id = uuid::Uuid::new_v4().to_string(); let now = happyview::db::now_rfc3339(); let sql = happyview::db::adapt_sql( - "INSERT INTO api_clients (id, client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, client_type, allowed_origins, is_active, created_by, created_at, updated_at, owner_did) \ + "INSERT INTO happyview_api_clients (id, client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, client_type, allowed_origins, is_active, created_by, created_at, updated_at, owner_did) \ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?)", app.state.db_backend, ); @@ -413,7 +413,7 @@ let client_id = uuid::Uuid::new_v4().to_string(); let now = happyview::db::now_rfc3339(); let sql = happyview::db::adapt_sql( - "INSERT INTO api_clients (id, client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, client_type, allowed_origins, is_active, created_by, created_at, updated_at, owner_did) \ + "INSERT INTO happyview_api_clients (id, client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, client_type, allowed_origins, is_active, created_by, created_at, updated_at, owner_did) \ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?)", app.state.db_backend, ); diff --git a/tests/e2e_admin.rs b/tests/e2e_admin.rs --- a/tests/e2e_admin.rs +++ b/tests/e2e_admin.rs @@ -149,7 +149,7 @@ let backend = app.state.db_backend; // Clear the seeded user so the table is empty. - sqlx::query("DELETE FROM users") + sqlx::query("DELETE FROM happyview_users") .execute(&app.state.db) .await .unwrap(); @@ -171,7 +171,10 @@ assert_eq!(resp.status(), StatusCode::OK); // Verify the DID was inserted. - let sql = adapt_sql("SELECT COUNT(*) FROM users WHERE did = ?", backend); + let sql = adapt_sql( + "SELECT COUNT(*) FROM happyview_users WHERE did = ?", + backend, + ); let count: (i64,) = sqlx::query_as(&sql) .bind(bootstrap_did) .fetch_one(&app.state.db) @@ -447,7 +450,7 @@ }); let now = now_rfc3339(); let sql = adapt_sql( - "INSERT INTO lexicons (id, lexicon_json, created_at) VALUES (?, ?, ?)", + "INSERT INTO happyview_lexicons (id, lexicon_json, created_at) VALUES (?, ?, ?)", backend, ); sqlx::query(&sql) @@ -461,7 +464,7 @@ // Seed records directly let record_val = serde_json::json!({"title": "test"}); let sql = adapt_sql( - "INSERT INTO records (uri, did, collection, rkey, record, cid, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", + "INSERT INTO happyview_records (uri, did, collection, rkey, record, cid, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", backend, ); sqlx::query(&sql) @@ -572,7 +575,7 @@ let job_id = uuid::Uuid::new_v4().to_string(); let now = now_rfc3339(); let sql = adapt_sql( - "INSERT INTO backfill_jobs (id, status, stage, started_at, created_at) VALUES (?, 'running', 'discovering_repos', ?, ?)", + "INSERT INTO happyview_backfill_jobs (id, status, stage, started_at, created_at) VALUES (?, 'running', 'discovering_repos', ?, ?)", backend, ); sqlx::query(&sql) @@ -610,7 +613,7 @@ let job_id = uuid::Uuid::new_v4().to_string(); let now = now_rfc3339(); let sql = adapt_sql( - "INSERT INTO backfill_jobs (id, status, stage, started_at, created_at) VALUES (?, 'cancelling', 'fetching_records', ?, ?)", + "INSERT INTO happyview_backfill_jobs (id, status, stage, started_at, created_at) VALUES (?, 'cancelling', 'fetching_records', ?, ?)", backend, ); sqlx::query(&sql) @@ -647,7 +650,7 @@ let job_id = uuid::Uuid::new_v4().to_string(); let now = now_rfc3339(); let sql = adapt_sql( - "INSERT INTO backfill_jobs (id, status, stage, completed_at, created_at) VALUES (?, 'completed', 'completed', ?, ?)", + "INSERT INTO happyview_backfill_jobs (id, status, stage, completed_at, created_at) VALUES (?, 'completed', 'completed', ?, ?)", backend, ); sqlx::query(&sql) diff --git a/tests/e2e_admin_service_entries.rs b/tests/e2e_admin_service_entries.rs --- a/tests/e2e_admin_service_entries.rs +++ b/tests/e2e_admin_service_entries.rs @@ -819,7 +819,7 @@ base64::Engine::encode(&base64::engine::general_purpose::STANDARD, &encrypted); let sql = happyview::db::adapt_sql( - "UPDATE service_identity SET rotation_key_enc = ? WHERE id = 1", + "UPDATE happyview_service_identity SET rotation_key_enc = ? WHERE id = 1", app.state.db_backend, ); sqlx::query(&sql) diff --git a/tests/e2e_api_clients.rs b/tests/e2e_api_clients.rs --- a/tests/e2e_api_clients.rs +++ b/tests/e2e_api_clients.rs @@ -691,7 +691,7 @@ let now = now_rfc3339(); let sql = adapt_sql( - "INSERT INTO api_clients (id, client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, client_type, is_active, created_by, created_at, updated_at, parent_client_id, owner_did) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?)", + "INSERT INTO happyview_api_clients (id, client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, client_type, is_active, created_by, created_at, updated_at, parent_client_id, owner_did) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?)", app.state.db_backend, ); sqlx::query(&sql) @@ -796,7 +796,7 @@ let now = now_rfc3339(); let sql = adapt_sql( - "INSERT INTO api_clients (id, client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, client_type, is_active, created_by, created_at, updated_at, parent_client_id, owner_did) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?)", + "INSERT INTO happyview_api_clients (id, client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, client_type, is_active, created_by, created_at, updated_at, parent_client_id, owner_did) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?)", app.state.db_backend, ); sqlx::query(&sql) @@ -916,7 +916,7 @@ let now = now_rfc3339(); let sql = adapt_sql( - "INSERT INTO api_clients (id, client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, client_type, is_active, created_by, created_at, updated_at, parent_client_id, owner_did) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?)", + "INSERT INTO happyview_api_clients (id, client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, client_type, is_active, created_by, created_at, updated_at, parent_client_id, owner_did) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?)", app.state.db_backend, ); sqlx::query(&sql) @@ -944,7 +944,7 @@ let child2_hash = hex::encode(sha2::Sha256::digest("hvs_fake_e2".as_bytes())); let sql2 = adapt_sql( - "INSERT INTO api_clients (id, client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, client_type, is_active, created_by, created_at, updated_at, parent_client_id, owner_did) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?)", + "INSERT INTO happyview_api_clients (id, client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, client_type, is_active, created_by, created_at, updated_at, parent_client_id, owner_did) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?)", app.state.db_backend, ); sqlx::query(&sql2) @@ -1045,7 +1045,7 @@ let owner_did = "did:plc:childowner"; let sql = adapt_sql( - "INSERT INTO api_clients (id, client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, client_type, is_active, created_by, created_at, updated_at, parent_client_id, owner_did) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?)", + "INSERT INTO happyview_api_clients (id, client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, client_type, is_active, created_by, created_at, updated_at, parent_client_id, owner_did) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?)", app.state.db_backend, ); sqlx::query(&sql) diff --git a/tests/e2e_delegation.rs b/tests/e2e_delegation.rs --- a/tests/e2e_delegation.rs +++ b/tests/e2e_delegation.rs @@ -968,7 +968,7 @@ async fn update_session_pds_url(app: &common::app::TestApp, user_did: &str, pds_url: &str) { let sql = adapt_sql( - "UPDATE dpop_sessions SET pds_url = ? WHERE user_did = ?", + "UPDATE happyview_dpop_sessions SET pds_url = ? WHERE user_did = ?", app.state.db_backend, ); sqlx::query(&sql) diff --git a/tests/e2e_domains.rs b/tests/e2e_domains.rs --- a/tests/e2e_domains.rs +++ b/tests/e2e_domains.rs @@ -66,7 +66,7 @@ async fn seed_domain(app: &TestApp, id: &str, url: &str, is_primary: bool) { let now = happyview::db::now_rfc3339(); let sql = happyview::db::adapt_sql( - "INSERT INTO domains (id, url, is_primary, created_at, updated_at) VALUES (?, ?, ?, ?, ?)", + "INSERT INTO happyview_domains (id, url, is_primary, created_at, updated_at) VALUES (?, ?, ?, ?, ?)", app.state.db_backend, ); sqlx::query(&sql) diff --git a/tests/e2e_labelers.rs b/tests/e2e_labelers.rs --- a/tests/e2e_labelers.rs +++ b/tests/e2e_labelers.rs @@ -365,7 +365,7 @@ // Seed some labels from that labeler let sql = adapt_sql( - "INSERT INTO labels (src, uri, val, cts) VALUES (?, ?, ?, ?)", + "INSERT INTO happyview_labels (src, uri, val, cts) VALUES (?, ?, ?, ?)", backend, ); sqlx::query(&sql) @@ -389,7 +389,10 @@ .unwrap(); // Verify labels were also removed - let sql = adapt_sql("SELECT COUNT(*) FROM labels WHERE src = ?", backend); + let sql = adapt_sql( + "SELECT COUNT(*) FROM happyview_labels WHERE src = ?", + backend, + ); let count: (i64,) = sqlx::query_as(&sql) .bind("did:plc:lab1") .fetch_one(&app.state.db) diff --git a/tests/e2e_network_lexicons.rs b/tests/e2e_network_lexicons.rs --- a/tests/e2e_network_lexicons.rs +++ b/tests/e2e_network_lexicons.rs @@ -48,7 +48,7 @@ let backend = app.state.db_backend; let sql = adapt_sql( r#" - INSERT INTO lexicons (id, lexicon_json, backfill, source, authority_did, last_fetched_at, created_at) + INSERT INTO happyview_lexicons (id, lexicon_json, backfill, source, authority_did, last_fetched_at, created_at) VALUES (?, ?, 0, 'network', ?, ?, ?) ON CONFLICT (id) DO NOTHING "#, @@ -136,7 +136,7 @@ // Verify lexicon is removed. let sql = adapt_sql( - "SELECT COUNT(*) FROM lexicons WHERE id = ? AND source = 'network'", + "SELECT COUNT(*) FROM happyview_lexicons WHERE id = ? AND source = 'network'", backend, ); let count: (i64,) = sqlx::query_as(&sql) diff --git a/tests/e2e_scripts.rs b/tests/e2e_scripts.rs --- a/tests/e2e_scripts.rs +++ b/tests/e2e_scripts.rs @@ -143,7 +143,7 @@ body: Value, ) { let sql = adapt_sql( - "INSERT INTO records (uri, did, collection, rkey, record, cid, created_at) + "INSERT INTO happyview_records (uri, did, collection, rkey, record, cid, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", app.state.db_backend, ); @@ -162,7 +162,7 @@ async fn count_records(app: &TestApp, uri: &str) -> i64 { let (count,): (i64,) = sqlx::query_as(&adapt_sql( - "SELECT COUNT(*) FROM records WHERE uri = ?", + "SELECT COUNT(*) FROM happyview_records WHERE uri = ?", app.state.db_backend, )) .bind(uri) @@ -174,7 +174,7 @@ async fn fetch_record_body(app: &TestApp, uri: &str) -> Option { let row: Option<(String,)> = sqlx::query_as(&adapt_sql( - "SELECT record FROM records WHERE uri = ?", + "SELECT record FROM happyview_records WHERE uri = ?", app.state.db_backend, )) .bind(uri) @@ -589,7 +589,7 @@ // The script's log("hello from script") should land in event_logs // as a `script.log` row whose subject is the trigger id. let row: (String, String) = sqlx::query_as(&adapt_sql( - "SELECT subject, detail FROM event_logs + "SELECT subject, detail FROM happyview_event_logs WHERE event_type = 'script.log' ORDER BY id DESC LIMIT 1", app.state.db_backend, @@ -713,7 +713,7 @@ // Sentinel: write a row into records-table-as-flag so we can // detect that the script ran. "function handle() \ - db.raw('INSERT INTO records (uri, did, collection, rkey, record, cid, created_at) \ + db.raw('INSERT INTO happyview_records (uri, did, collection, rkey, record, cid, created_at) \ VALUES (?, ?, ?, ?, ?, ?, ?)', \ {'at://did:plc:flag/flag.col/k', 'did:plc:flag', 'flag.col', 'k', '{}', 'b', '2026-05-01'}) \ return event \ @@ -794,7 +794,7 @@ // A dead-letter row exists with the NO_PDS_AUTH message. let dl: (String,) = sqlx::query_as(&adapt_sql( - "SELECT error FROM dead_letter_scripts WHERE host_kind = 'label' \ + "SELECT error FROM happyview_dead_letter_scripts WHERE host_kind = 'label' \ AND host_id = 'did:plc:labeler' ORDER BY id DESC LIMIT 1", app.state.db_backend, )) diff --git a/tests/e2e_xrpc.rs b/tests/e2e_xrpc.rs --- a/tests/e2e_xrpc.rs +++ b/tests/e2e_xrpc.rs @@ -87,7 +87,7 @@ let rkey = uri.split('/').next_back().unwrap_or("1"); let backend = app.state.db_backend; let sql = adapt_sql( - "INSERT INTO records (uri, did, collection, rkey, record, cid, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", + "INSERT INTO happyview_records (uri, did, collection, rkey, record, cid, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", backend, ); sqlx::query(&sql) @@ -439,7 +439,10 @@ seed_record(&app, uri, did, "games.gamesgamesgamesgames.game", &record).await; // Verify record exists - let sql = adapt_sql("SELECT COUNT(*) FROM records WHERE uri = ?", backend); + let sql = adapt_sql( + "SELECT COUNT(*) FROM happyview_records WHERE uri = ?", + backend, + ); let count: (i64,) = sqlx::query_as(&sql) .bind(uri) .fetch_one(&app.state.db) diff --git a/tests/lua_atproto_api.rs b/tests/lua_atproto_api.rs --- a/tests/lua_atproto_api.rs +++ b/tests/lua_atproto_api.rs @@ -115,7 +115,7 @@ record: serde_json::Value, ) { let sql = adapt_sql( - "INSERT INTO records (uri, did, collection, rkey, record, cid, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", + "INSERT INTO happyview_records (uri, did, collection, rkey, record, cid, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", backend, ); sqlx::query(&sql) @@ -141,7 +141,7 @@ ) { if let Some(exp) = exp { let sql = adapt_sql( - "INSERT INTO labels (src, uri, val, cts, exp) VALUES (?, ?, ?, ?, ?)", + "INSERT INTO happyview_labels (src, uri, val, cts, exp) VALUES (?, ?, ?, ?, ?)", backend, ); sqlx::query(&sql) @@ -155,7 +155,7 @@ .expect("failed to seed label"); } else { let sql = adapt_sql( - "INSERT INTO labels (src, uri, val, cts) VALUES (?, ?, ?, ?)", + "INSERT INTO happyview_labels (src, uri, val, cts) VALUES (?, ?, ?, ?)", backend, ); sqlx::query(&sql) @@ -205,7 +205,7 @@ let now = now_rfc3339(); let sql = adapt_sql( - "SELECT src, uri, val FROM labels WHERE uri = ? AND (exp IS NULL OR exp > ?)", + "SELECT src, uri, val FROM happyview_labels WHERE uri = ? AND (exp IS NULL OR exp > ?)", backend, ); let rows: Vec<(String, String, String)> = sqlx::query_as(&sql) @@ -255,7 +255,7 @@ let now = now_rfc3339(); let sql = adapt_sql( - "SELECT src, uri, val FROM labels WHERE uri = ? AND (exp IS NULL OR exp > ?)", + "SELECT src, uri, val FROM happyview_labels WHERE uri = ? AND (exp IS NULL OR exp > ?)", backend, ); let rows: Vec<(String, String, String)> = sqlx::query_as(&sql) @@ -289,7 +289,10 @@ }); seed_record(&pool, backend, uri, "did:plc:author", record.clone()).await; - let sql = adapt_sql("SELECT did, record FROM records WHERE uri = ?", backend); + let sql = adapt_sql( + "SELECT did, record FROM happyview_records WHERE uri = ?", + backend, + ); let fetched: Option<(String, String)> = sqlx::query_as(&sql) .bind(uri) .fetch_optional(&pool) @@ -332,7 +335,7 @@ let now = now_rfc3339(); let sql = adapt_sql( - "SELECT src, uri, val FROM labels WHERE uri = ? AND (exp IS NULL OR exp > ?)", + "SELECT src, uri, val FROM happyview_labels WHERE uri = ? AND (exp IS NULL OR exp > ?)", backend, ); let rows: Vec<(String, String, String)> = sqlx::query_as(&sql) @@ -370,7 +373,7 @@ .await; let sql = adapt_sql( - "INSERT INTO records (uri, did, collection, rkey, record, cid, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", + "INSERT INTO happyview_records (uri, did, collection, rkey, record, cid, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", backend, ); sqlx::query(&sql) @@ -391,7 +394,7 @@ let now = now_rfc3339(); let sql = adapt_sql( - "SELECT src, uri, val FROM labels WHERE uri IN (?, ?) AND (exp IS NULL OR exp > ?)", + "SELECT src, uri, val FROM happyview_labels WHERE uri IN (?, ?) AND (exp IS NULL OR exp > ?)", backend, ); let rows: Vec<(String, String, String)> = sqlx::query_as(&sql) @@ -424,7 +427,7 @@ let now = now_rfc3339(); let sql = adapt_sql( - "SELECT src, uri, val FROM labels WHERE uri IN (?, ?) AND (exp IS NULL OR exp > ?)", + "SELECT src, uri, val FROM happyview_labels WHERE uri IN (?, ?) AND (exp IS NULL OR exp > ?)", backend, ); let rows: Vec<(String, String, String)> = sqlx::query_as(&sql) @@ -457,7 +460,7 @@ // Verify it exists let sql = adapt_sql( - "SELECT COUNT(*) FROM labels WHERE src = ? AND uri = ? AND val = ?", + "SELECT COUNT(*) FROM happyview_labels WHERE src = ? AND uri = ? AND val = ?", backend, ); let count: (i64,) = sqlx::query_as(&sql) @@ -471,7 +474,7 @@ // Simulate negation (same logic as labeler.rs) let sql = adapt_sql( - "DELETE FROM labels WHERE src = ? AND uri = ? AND val = ?", + "DELETE FROM happyview_labels WHERE src = ? AND uri = ? AND val = ?", backend, ); sqlx::query(&sql) @@ -484,7 +487,7 @@ // Verify it's gone let sql = adapt_sql( - "SELECT COUNT(*) FROM labels WHERE src = ? AND uri = ? AND val = ?", + "SELECT COUNT(*) FROM happyview_labels WHERE src = ? AND uri = ? AND val = ?", backend, ); let count: (i64,) = sqlx::query_as(&sql) @@ -513,10 +516,10 @@ let upsert_sql = match backend { DatabaseBackend::Postgres => { - "INSERT INTO labels (src, uri, val, cts) VALUES ($1, $2, $3, $4) ON CONFLICT (src, uri, val) DO UPDATE SET cts = EXCLUDED.cts".to_string() + "INSERT INTO happyview_labels (src, uri, val, cts) VALUES ($1, $2, $3, $4) ON CONFLICT (src, uri, val) DO UPDATE SET cts = EXCLUDED.cts".to_string() } DatabaseBackend::Sqlite => { - "INSERT INTO labels (src, uri, val, cts) VALUES (?, ?, ?, ?) ON CONFLICT (src, uri, val) DO UPDATE SET cts = excluded.cts".to_string() + "INSERT INTO happyview_labels (src, uri, val, cts) VALUES (?, ?, ?, ?) ON CONFLICT (src, uri, val) DO UPDATE SET cts = excluded.cts".to_string() } }; @@ -533,7 +536,7 @@ } let sql = adapt_sql( - "SELECT COUNT(*) FROM labels WHERE src = ? AND uri = ? AND val = ?", + "SELECT COUNT(*) FROM happyview_labels WHERE src = ? AND uri = ? AND val = ?", backend, ); let count: (i64,) = sqlx::query_as(&sql) diff --git a/tests/lua_db_api.rs b/tests/lua_db_api.rs --- a/tests/lua_db_api.rs +++ b/tests/lua_db_api.rs @@ -140,7 +140,7 @@ let now = now_rfc3339(); let sql = adapt_sql( - "INSERT INTO records (uri, did, collection, rkey, record, cid, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", + "INSERT INTO happyview_records (uri, did, collection, rkey, record, cid, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", backend, ); for (uri, did, collection, rkey, record, cid) in &records { @@ -334,7 +334,7 @@ let result: mlua::Table = lua .load( - r#"return db.raw("SELECT COUNT(*) as cnt FROM records WHERE collection = $1", {"test.collection"})"#, + r#"return db.raw("SELECT COUNT(*) as cnt FROM happyview_records WHERE collection = $1", {"test.collection"})"#, ) .eval_async() .await diff --git a/tests/lua_record_api.rs b/tests/lua_record_api.rs --- a/tests/lua_record_api.rs +++ b/tests/lua_record_api.rs @@ -125,7 +125,7 @@ record: serde_json::Value, ) { let sql = adapt_sql( - "INSERT INTO records (uri, did, collection, rkey, record, cid, created_at) + "INSERT INTO happyview_records (uri, did, collection, rkey, record, cid, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", backend, ); @@ -143,7 +143,10 @@ } async fn count_records(pool: &sqlx::AnyPool, backend: DatabaseBackend, uri: &str) -> i64 { - let sql = adapt_sql("SELECT COUNT(*) FROM records WHERE uri = ?", backend); + let sql = adapt_sql( + "SELECT COUNT(*) FROM happyview_records WHERE uri = ?", + backend, + ); let (count,): (i64,) = sqlx::query_as(&sql) .bind(uri) .fetch_one(pool) @@ -157,7 +160,10 @@ backend: DatabaseBackend, uri: &str, ) -> Option { - let sql = adapt_sql("SELECT record FROM records WHERE uri = ?", backend); + let sql = adapt_sql( + "SELECT record FROM happyview_records WHERE uri = ?", + backend, + ); let row: Option<(String,)> = sqlx::query_as(&sql) .bind(uri) .fetch_optional(pool) diff --git a/tests/plugin_logging.rs b/tests/plugin_logging.rs --- a/tests/plugin_logging.rs +++ b/tests/plugin_logging.rs @@ -61,7 +61,7 @@ flush_spawned_tasks().await; let sql = adapt_sql( - "SELECT severity, subject, detail FROM event_logs WHERE event_type = ? ORDER BY created_at ASC", + "SELECT severity, subject, detail FROM happyview_event_logs WHERE event_type = ? ORDER BY created_at ASC", backend, ); let rows: Vec<(String, Option, String)> = sqlx::query_as(&sql) @@ -122,7 +122,7 @@ flush_spawned_tasks().await; let sql = adapt_sql( - "SELECT COUNT(*) FROM event_logs WHERE event_type = ?", + "SELECT COUNT(*) FROM happyview_event_logs WHERE event_type = ?", backend, ); let count: i64 = sqlx::query_scalar(&sql) diff --git a/migrations/postgres/20260626000000_prefix_table_names.sql b/migrations/postgres/20260626000000_prefix_table_names.sql new file mode 100644 --- /dev/null +++ b/migrations/postgres/20260626000000_prefix_table_names.sql @@ -0,0 +1,47 @@ +ALTER TABLE IF EXISTS account_delegates RENAME TO happyview_account_delegates; +ALTER TABLE IF EXISTS admin_api_keys RENAME TO happyview_admin_api_keys; +ALTER TABLE IF EXISTS admins RENAME TO happyview_admins; +ALTER TABLE IF EXISTS api_keys RENAME TO happyview_api_keys; +ALTER TABLE IF EXISTS users RENAME TO happyview_users; +ALTER TABLE IF EXISTS api_clients RENAME TO happyview_api_clients; +ALTER TABLE IF EXISTS auth_login_redirects RENAME TO happyview_auth_login_redirects; +ALTER TABLE IF EXISTS backfill_jobs RENAME TO happyview_backfill_jobs; +ALTER TABLE IF EXISTS backfill_repos RENAME TO happyview_backfill_repos; +ALTER TABLE IF EXISTS dead_letter_hooks RENAME TO happyview_dead_letter_hooks; +ALTER TABLE IF EXISTS dead_letter_scripts RENAME TO happyview_dead_letter_scripts; +ALTER TABLE IF EXISTS delegated_accounts RENAME TO happyview_delegated_accounts; +ALTER TABLE IF EXISTS domains RENAME TO happyview_domains; +ALTER TABLE IF EXISTS dpop_keys RENAME TO happyview_dpop_keys; +ALTER TABLE IF EXISTS dpop_sessions RENAME TO happyview_dpop_sessions; +ALTER TABLE IF EXISTS event_logs RENAME TO happyview_event_logs; +ALTER TABLE IF EXISTS external_account_tokens RENAME TO happyview_external_account_tokens; +ALTER TABLE IF EXISTS external_auth_state RENAME TO happyview_external_auth_state; +ALTER TABLE IF EXISTS instance_settings RENAME TO happyview_instance_settings; +ALTER TABLE IF EXISTS labeler_subscriptions RENAME TO happyview_labeler_subscriptions; +ALTER TABLE IF EXISTS labels RENAME TO happyview_labels; +ALTER TABLE IF EXISTS lexicons RENAME TO happyview_lexicons; +ALTER TABLE IF EXISTS network_lexicons RENAME TO happyview_network_lexicons; +ALTER TABLE IF EXISTS oauth_sessions RENAME TO happyview_oauth_sessions; +ALTER TABLE IF EXISTS oauth_state RENAME TO happyview_oauth_state; +ALTER TABLE IF EXISTS plugin_configs RENAME TO happyview_plugin_configs; +ALTER TABLE IF EXISTS plugin_dedup_keys RENAME TO happyview_plugin_dedup_keys; +ALTER TABLE IF EXISTS plugin_kv RENAME TO happyview_plugin_kv; +ALTER TABLE IF EXISTS plugins RENAME TO happyview_plugins; +ALTER TABLE IF EXISTS rate_limit_allowlist RENAME TO happyview_rate_limit_allowlist; +ALTER TABLE IF EXISTS rate_limit_settings RENAME TO happyview_rate_limit_settings; +ALTER TABLE IF EXISTS rate_limits RENAME TO happyview_rate_limits; +ALTER TABLE IF EXISTS record_refs RENAME TO happyview_record_refs; +ALTER TABLE IF EXISTS records RENAME TO happyview_records; +ALTER TABLE IF EXISTS script_variables RENAME TO happyview_script_variables; +ALTER TABLE IF EXISTS scripts RENAME TO happyview_scripts; +ALTER TABLE IF EXISTS service_entries RENAME TO happyview_service_entries; +ALTER TABLE IF EXISTS service_entry_xrpcs RENAME TO happyview_service_entry_xrpcs; +ALTER TABLE IF EXISTS service_identity RENAME TO happyview_service_identity; +ALTER TABLE IF EXISTS space_credentials RENAME TO happyview_space_credentials; +ALTER TABLE IF EXISTS space_dids RENAME TO happyview_space_dids; +ALTER TABLE IF EXISTS space_invites RENAME TO happyview_space_invites; +ALTER TABLE IF EXISTS space_members RENAME TO happyview_space_members; +ALTER TABLE IF EXISTS space_records RENAME TO happyview_space_records; +ALTER TABLE IF EXISTS space_sync_state RENAME TO happyview_space_sync_state; +ALTER TABLE IF EXISTS spaces RENAME TO happyview_spaces; +ALTER TABLE IF EXISTS user_permissions RENAME TO happyview_user_permissions; diff --git a/migrations/sqlite/20260626000000_prefix_table_names.sql b/migrations/sqlite/20260626000000_prefix_table_names.sql new file mode 100644 --- /dev/null +++ b/migrations/sqlite/20260626000000_prefix_table_names.sql @@ -0,0 +1,47 @@ +ALTER TABLE account_delegates RENAME TO happyview_account_delegates; +ALTER TABLE admin_api_keys RENAME TO happyview_admin_api_keys; +ALTER TABLE admins RENAME TO happyview_admins; +ALTER TABLE api_keys RENAME TO happyview_api_keys; +ALTER TABLE users RENAME TO happyview_users; +ALTER TABLE api_clients RENAME TO happyview_api_clients; +ALTER TABLE auth_login_redirects RENAME TO happyview_auth_login_redirects; +ALTER TABLE backfill_jobs RENAME TO happyview_backfill_jobs; +ALTER TABLE backfill_repos RENAME TO happyview_backfill_repos; +ALTER TABLE dead_letter_hooks RENAME TO happyview_dead_letter_hooks; +ALTER TABLE dead_letter_scripts RENAME TO happyview_dead_letter_scripts; +ALTER TABLE delegated_accounts RENAME TO happyview_delegated_accounts; +ALTER TABLE domains RENAME TO happyview_domains; +ALTER TABLE dpop_keys RENAME TO happyview_dpop_keys; +ALTER TABLE dpop_sessions RENAME TO happyview_dpop_sessions; +ALTER TABLE event_logs RENAME TO happyview_event_logs; +ALTER TABLE external_account_tokens RENAME TO happyview_external_account_tokens; +ALTER TABLE external_auth_state RENAME TO happyview_external_auth_state; +ALTER TABLE instance_settings RENAME TO happyview_instance_settings; +ALTER TABLE labeler_subscriptions RENAME TO happyview_labeler_subscriptions; +ALTER TABLE labels RENAME TO happyview_labels; +ALTER TABLE lexicons RENAME TO happyview_lexicons; +ALTER TABLE network_lexicons RENAME TO happyview_network_lexicons; +ALTER TABLE oauth_sessions RENAME TO happyview_oauth_sessions; +ALTER TABLE oauth_state RENAME TO happyview_oauth_state; +ALTER TABLE plugin_configs RENAME TO happyview_plugin_configs; +ALTER TABLE plugin_dedup_keys RENAME TO happyview_plugin_dedup_keys; +ALTER TABLE plugin_kv RENAME TO happyview_plugin_kv; +ALTER TABLE plugins RENAME TO happyview_plugins; +ALTER TABLE rate_limit_allowlist RENAME TO happyview_rate_limit_allowlist; +ALTER TABLE rate_limit_settings RENAME TO happyview_rate_limit_settings; +ALTER TABLE rate_limits RENAME TO happyview_rate_limits; +ALTER TABLE record_refs RENAME TO happyview_record_refs; +ALTER TABLE records RENAME TO happyview_records; +ALTER TABLE script_variables RENAME TO happyview_script_variables; +ALTER TABLE scripts RENAME TO happyview_scripts; +ALTER TABLE service_entries RENAME TO happyview_service_entries; +ALTER TABLE service_entry_xrpcs RENAME TO happyview_service_entry_xrpcs; +ALTER TABLE service_identity RENAME TO happyview_service_identity; +ALTER TABLE space_credentials RENAME TO happyview_space_credentials; +ALTER TABLE space_dids RENAME TO happyview_space_dids; +ALTER TABLE space_invites RENAME TO happyview_space_invites; +ALTER TABLE space_members RENAME TO happyview_space_members; +ALTER TABLE space_records RENAME TO happyview_space_records; +ALTER TABLE space_sync_state RENAME TO happyview_space_sync_state; +ALTER TABLE spaces RENAME TO happyview_spaces; +ALTER TABLE user_permissions RENAME TO happyview_user_permissions; diff --git a/src/admin/api_clients.rs b/src/admin/api_clients.rs --- a/src/admin/api_clients.rs +++ b/src/admin/api_clients.rs @@ -66,7 +66,7 @@ .map(|origins| serde_json::to_string(origins).unwrap_or_else(|_| "[]".to_string())); let insert_sql = adapt_sql( - "INSERT INTO api_clients (id, client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, rate_limit_capacity, rate_limit_refill_rate, client_type, allowed_origins, is_active, created_by, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?)", + "INSERT INTO happyview_api_clients (id, client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, rate_limit_capacity, rate_limit_refill_rate, client_type, allowed_origins, is_active, created_by, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?)", state.db_backend, ); @@ -173,7 +173,7 @@ let (select_sql, parent_filter) = if let Some(ref parent_id) = query.parent_id { ( adapt_sql( - "SELECT id, client_key, name, client_id_url, client_uri, redirect_uris, scopes, client_type, allowed_origins, rate_limit_capacity, rate_limit_refill_rate, is_active, created_by, created_at, updated_at, parent_client_id, owner_did FROM api_clients WHERE parent_client_id = ? ORDER BY created_at DESC", + "SELECT id, client_key, name, client_id_url, client_uri, redirect_uris, scopes, client_type, allowed_origins, rate_limit_capacity, rate_limit_refill_rate, is_active, created_by, created_at, updated_at, parent_client_id, owner_did FROM happyview_api_clients WHERE parent_client_id = ? ORDER BY created_at DESC", state.db_backend, ), Some(parent_id.clone()), @@ -181,7 +181,7 @@ } else { ( adapt_sql( - "SELECT id, client_key, name, client_id_url, client_uri, redirect_uris, scopes, client_type, allowed_origins, rate_limit_capacity, rate_limit_refill_rate, is_active, created_by, created_at, updated_at, parent_client_id, owner_did FROM api_clients ORDER BY created_at DESC", + "SELECT id, client_key, name, client_id_url, client_uri, redirect_uris, scopes, client_type, allowed_origins, rate_limit_capacity, rate_limit_refill_rate, is_active, created_by, created_at, updated_at, parent_client_id, owner_did FROM happyview_api_clients ORDER BY created_at DESC", state.db_backend, ), None, @@ -245,7 +245,7 @@ auth.require(Permission::ApiClientsView).await?; let select_sql = adapt_sql( - "SELECT id, client_key, name, client_id_url, client_uri, redirect_uris, scopes, client_type, allowed_origins, rate_limit_capacity, rate_limit_refill_rate, is_active, created_by, created_at, updated_at, parent_client_id, owner_did FROM api_clients WHERE id = ?", + "SELECT id, client_key, name, client_id_url, client_uri, redirect_uris, scopes, client_type, allowed_origins, rate_limit_capacity, rate_limit_refill_rate, is_active, created_by, created_at, updated_at, parent_client_id, owner_did FROM happyview_api_clients WHERE id = ?", state.db_backend, ); @@ -299,7 +299,7 @@ // Read current values let select_sql = adapt_sql( - "SELECT client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, allowed_origins, rate_limit_capacity, rate_limit_refill_rate, is_active FROM api_clients WHERE id = ?", + "SELECT client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, allowed_origins, rate_limit_capacity, rate_limit_refill_rate, is_active FROM happyview_api_clients WHERE id = ?", state.db_backend, ); @@ -362,7 +362,7 @@ let now = now_rfc3339(); let update_sql = adapt_sql( - "UPDATE api_clients SET name = ?, client_uri = ?, redirect_uris = ?, scopes = ?, allowed_origins = ?, rate_limit_capacity = ?, rate_limit_refill_rate = ?, is_active = ?, updated_at = ? WHERE id = ?", + "UPDATE happyview_api_clients SET name = ?, client_uri = ?, redirect_uris = ?, scopes = ?, allowed_origins = ?, rate_limit_capacity = ?, rate_limit_refill_rate = ?, is_active = ?, updated_at = ? WHERE id = ?", state.db_backend, ); @@ -435,7 +435,7 @@ // Cascade deactivation to child clients. let deactivate_children_sql = adapt_sql( - "UPDATE api_clients SET is_active = 0, updated_at = ? WHERE parent_client_id = ? AND is_active = 1", + "UPDATE happyview_api_clients SET is_active = 0, updated_at = ? WHERE parent_client_id = ? AND is_active = 1", state.db_backend, ); let _ = sqlx::query(&deactivate_children_sql) @@ -445,7 +445,7 @@ .await; let children_sql = adapt_sql( - "SELECT client_id_url, client_key FROM api_clients WHERE parent_client_id = ?", + "SELECT client_id_url, client_key FROM happyview_api_clients WHERE parent_client_id = ?", state.db_backend, ); if let Ok(children) = sqlx::query_as::<_, (String, String)>(&children_sql) @@ -487,7 +487,7 @@ // Look up client_id_url and client_key before deleting so we can remove from registries. let lookup_sql = adapt_sql( - "SELECT client_id_url, client_key FROM api_clients WHERE id = ?", + "SELECT client_id_url, client_key FROM happyview_api_clients WHERE id = ?", state.db_backend, ); let client_info: Option<(String, String)> = sqlx::query_as(&lookup_sql) @@ -498,7 +498,7 @@ // Look up child clients before deleting (ON DELETE CASCADE will remove DB rows). let children_sql = adapt_sql( - "SELECT client_id_url, client_key FROM api_clients WHERE parent_client_id = ?", + "SELECT client_id_url, client_key FROM happyview_api_clients WHERE parent_client_id = ?", state.db_backend, ); let children: Vec<(String, String)> = sqlx::query_as(&children_sql) @@ -507,7 +507,10 @@ .await .unwrap_or_default(); - let delete_sql = adapt_sql("DELETE FROM api_clients WHERE id = ?", state.db_backend); + let delete_sql = adapt_sql( + "DELETE FROM happyview_api_clients WHERE id = ?", + state.db_backend, + ); let result = sqlx::query(&delete_sql) .bind(&id) diff --git a/src/admin/api_keys.rs b/src/admin/api_keys.rs --- a/src/admin/api_keys.rs +++ b/src/admin/api_keys.rs @@ -56,7 +56,7 @@ serde_json::to_string(&body.permissions).unwrap_or_else(|_| "[]".to_string()); let insert_sql = adapt_sql( - "INSERT INTO api_keys (id, user_id, name, key_hash, key_prefix, permissions, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", + "INSERT INTO happyview_api_keys (id, user_id, name, key_hash, key_prefix, permissions, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", state.db_backend, ); @@ -105,7 +105,7 @@ auth.require(Permission::ApiKeysRead).await?; let select_sql = adapt_sql( - "SELECT k.id, k.name, k.key_prefix, k.permissions, k.created_at, k.last_used_at, k.revoked_at FROM api_keys k JOIN users u ON u.id = k.user_id WHERE u.did = ? ORDER BY k.created_at DESC", + "SELECT k.id, k.name, k.key_prefix, k.permissions, k.created_at, k.last_used_at, k.revoked_at FROM happyview_api_keys k JOIN happyview_users u ON u.id = k.user_id WHERE u.did = ? ORDER BY k.created_at DESC", state.db_backend, ); @@ -156,7 +156,7 @@ let now = now_rfc3339(); let update_sql = adapt_sql( - "UPDATE api_keys SET revoked_at = ? WHERE id = ? AND user_id = (SELECT id FROM users WHERE did = ?) AND revoked_at IS NULL", + "UPDATE happyview_api_keys SET revoked_at = ? WHERE id = ? AND user_id = (SELECT id FROM happyview_users WHERE did = ?) AND revoked_at IS NULL", state.db_backend, ); diff --git a/src/admin/auth.rs b/src/admin/auth.rs --- a/src/admin/auth.rs +++ b/src/admin/auth.rs @@ -54,7 +54,7 @@ backend: DatabaseBackend, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT permission FROM user_permissions WHERE user_id = ?", + "SELECT permission FROM happyview_user_permissions WHERE user_id = ?", backend, ); let rows: Vec<(String,)> = sqlx::query_as(&sql) @@ -110,7 +110,7 @@ let did = claims.did().to_string(); let backend = state.db_backend; - let count: (i64,) = sqlx::query_as("SELECT COUNT(*) FROM users") + let count: (i64,) = sqlx::query_as("SELECT COUNT(*) FROM happyview_users") .fetch_one(&state.db) .await .map_err(|e| AppError::Internal(format!("user count query failed: {e}")))?; @@ -121,7 +121,7 @@ let now = now_rfc3339(); let insert_sql = adapt_sql( - "INSERT INTO users (id, did, is_super, created_at) VALUES (?, ?, ?, ?)", + "INSERT INTO happyview_users (id, did, is_super, created_at) VALUES (?, ?, ?, ?)", backend, ); @@ -135,7 +135,7 @@ if result.is_ok() { let perm_sql = adapt_sql( - "INSERT INTO user_permissions (user_id, permission, granted_at) VALUES (?, ?, ?)", + "INSERT INTO happyview_user_permissions (user_id, permission, granted_at) VALUES (?, ?, ?)", backend, ); for perm in Permission::all() { @@ -164,7 +164,10 @@ } } - let select_sql = adapt_sql("SELECT id, is_super FROM users WHERE did = ?", backend); + let select_sql = adapt_sql( + "SELECT id, is_super FROM happyview_users WHERE did = ?", + backend, + ); let found: Option<(String, i32)> = sqlx::query_as(&select_sql) .bind(&did) .fetch_optional(&state.db) @@ -185,7 +188,10 @@ let db = state.db.clone(); let uid = user_id.clone(); let now = now_rfc3339(); - let update_sql = adapt_sql("UPDATE users SET last_used_at = ? WHERE id = ?", backend); + let update_sql = adapt_sql( + "UPDATE happyview_users SET last_used_at = ? WHERE id = ?", + backend, + ); tokio::spawn(async move { let _ = sqlx::query(&update_sql) .bind(&now) @@ -229,7 +235,7 @@ let backend = state.db_backend; let select_sql = adapt_sql( - "SELECT k.id, u.id, u.did, u.is_super, k.permissions FROM api_keys k JOIN users u ON u.id = k.user_id WHERE k.key_hash = ? AND k.revoked_at IS NULL", + "SELECT k.id, u.id, u.did, u.is_super, k.permissions FROM happyview_api_keys k JOIN happyview_users u ON u.id = k.user_id WHERE k.key_hash = ? AND k.revoked_at IS NULL", backend, ); @@ -256,7 +262,10 @@ let db = state.db.clone(); let now = now_rfc3339(); - let update_sql = adapt_sql("UPDATE api_keys SET last_used_at = ? WHERE id = ?", backend); + let update_sql = adapt_sql( + "UPDATE happyview_api_keys SET last_used_at = ? WHERE id = ?", + backend, + ); tokio::spawn(async move { let _ = sqlx::query(&update_sql) .bind(&now) diff --git a/src/admin/backfill.rs b/src/admin/backfill.rs --- a/src/admin/backfill.rs +++ b/src/admin/backfill.rs @@ -59,7 +59,7 @@ async fn set_stage(state: &AppState, job_id: &str, stage: &str) { let sql = adapt_sql( - "UPDATE backfill_jobs SET stage = ? WHERE id = ?", + "UPDATE happyview_backfill_jobs SET stage = ? WHERE id = ?", state.db_backend, ); let _ = sqlx::query(&sql) @@ -78,10 +78,10 @@ async fn update_job_counter(state: &AppState, job_id: &str, column: &str, value: i32) { let query = match column { - "total_repos" => "UPDATE backfill_jobs SET total_repos = ? WHERE id = ?", - "resolved_repos" => "UPDATE backfill_jobs SET resolved_repos = ? WHERE id = ?", - "processed_repos" => "UPDATE backfill_jobs SET processed_repos = ? WHERE id = ?", - "total_records" => "UPDATE backfill_jobs SET total_records = ? WHERE id = ?", + "total_repos" => "UPDATE happyview_backfill_jobs SET total_repos = ? WHERE id = ?", + "resolved_repos" => "UPDATE happyview_backfill_jobs SET resolved_repos = ? WHERE id = ?", + "processed_repos" => "UPDATE happyview_backfill_jobs SET processed_repos = ? WHERE id = ?", + "total_records" => "UPDATE happyview_backfill_jobs SET total_records = ? WHERE id = ?", other => { tracing::error!( column = other, @@ -100,7 +100,7 @@ async fn count_repos(state: &AppState, job_id: &str) -> i32 { let sql = adapt_sql( - "SELECT COUNT(*) FROM backfill_repos WHERE job_id = ?", + "SELECT COUNT(*) FROM happyview_backfill_repos WHERE job_id = ?", state.db_backend, ); sqlx::query_as::<_, (i32,)>(&sql) @@ -160,7 +160,7 @@ async fn fail_job(state: &AppState, job_id: &str, error: &str) { let now = now_rfc3339(); let sql = adapt_sql( - "UPDATE backfill_jobs SET status = 'failed', completed_at = ?, error = ? WHERE id = ?", + "UPDATE happyview_backfill_jobs SET status = 'failed', completed_at = ?, error = ? WHERE id = ?", state.db_backend, ); let _ = sqlx::query(&sql) @@ -181,7 +181,7 @@ async fn should_stop(state: &AppState, job_id: &str) -> Option<&'static str> { let sql = adapt_sql( - "SELECT status FROM backfill_jobs WHERE id = ?", + "SELECT status FROM happyview_backfill_jobs WHERE id = ?", state.db_backend, ); let status = sqlx::query_as::<_, (String,)>(&sql) @@ -204,7 +204,7 @@ async fn request_cancel(state: &AppState, job_id: &str) { let sql = adapt_sql( - "UPDATE backfill_jobs SET status = 'cancelling' WHERE id = ? AND status IN ('running', 'paused')", + "UPDATE happyview_backfill_jobs SET status = 'cancelling' WHERE id = ? AND status IN ('running', 'paused')", state.db_backend, ); let _ = sqlx::query(&sql) @@ -216,7 +216,7 @@ async fn finalise_cancel(state: &AppState, job_id: &str) { let now = now_rfc3339(); let sql = adapt_sql( - "UPDATE backfill_jobs SET status = 'cancelled', completed_at = ?, error = 'cancelled by user' WHERE id = ?", + "UPDATE happyview_backfill_jobs SET status = 'cancelled', completed_at = ?, error = 'cancelled by user' WHERE id = ?", state.db_backend, ); let _ = sqlx::query(&sql) @@ -236,7 +236,7 @@ async fn request_pause(state: &AppState, job_id: &str) { let sql = adapt_sql( - "UPDATE backfill_jobs SET status = 'pausing' WHERE id = ? AND status = 'running'", + "UPDATE happyview_backfill_jobs SET status = 'pausing' WHERE id = ? AND status = 'running'", state.db_backend, ); let _ = sqlx::query(&sql) @@ -247,7 +247,7 @@ async fn finalise_pause(state: &AppState, job_id: &str) { let sql = adapt_sql( - "UPDATE backfill_jobs SET status = 'paused' WHERE id = ?", + "UPDATE happyview_backfill_jobs SET status = 'paused' WHERE id = ?", state.db_backend, ); let _ = sqlx::query(&sql) @@ -273,7 +273,7 @@ ) { let now = now_rfc3339(); let sql = adapt_sql( - "UPDATE backfill_jobs SET status = 'completed', stage = 'completed', completed_at = ?, processed_repos = ?, total_records = ?, error = ? WHERE id = ?", + "UPDATE happyview_backfill_jobs SET status = 'completed', stage = 'completed', completed_at = ?, processed_repos = ?, total_records = ?, error = ? WHERE id = ?", state.db_backend, ); let _ = sqlx::query(&sql) @@ -308,7 +308,7 @@ if let Some(did) = specific_did { let sql = adapt_sql( - "INSERT INTO backfill_repos (job_id, did) VALUES (?, ?) ON CONFLICT DO NOTHING", + "INSERT INTO happyview_backfill_repos (job_id, did) VALUES (?, ?) ON CONFLICT DO NOTHING", state.db_backend, ); let _ = sqlx::query(&sql) @@ -405,7 +405,7 @@ }; for chunk in body.repos.chunks(chunk_size) { - let base_sql = "INSERT INTO backfill_repos (job_id, did) VALUES "; + let base_sql = "INSERT INTO happyview_backfill_repos (job_id, did) VALUES "; let placeholders: Vec = chunk .iter() .enumerate() @@ -472,7 +472,7 @@ // Count already-resolved and already-completed repos for accurate progress let already_resolved: i32 = { let sql = adapt_sql( - "SELECT COUNT(*) FROM backfill_repos WHERE job_id = ? AND pds_endpoint IS NOT NULL", + "SELECT COUNT(*) FROM happyview_backfill_repos WHERE job_id = ? AND pds_endpoint IS NOT NULL", state.db_backend, ); sqlx::query_as::<_, (i32,)>(&sql) @@ -485,7 +485,7 @@ let already_completed: i32 = { let sql = adapt_sql( - "SELECT COUNT(*) FROM backfill_repos WHERE job_id = ? AND status = 'completed'", + "SELECT COUNT(*) FROM happyview_backfill_repos WHERE job_id = ? AND status = 'completed'", state.db_backend, ); sqlx::query_as::<_, (i32,)>(&sql) @@ -501,7 +501,7 @@ let existing_records: i32 = { let sql = adapt_sql( - "SELECT total_records FROM backfill_jobs WHERE id = ?", + "SELECT total_records FROM happyview_backfill_jobs WHERE id = ?", state.db_backend, ); sqlx::query_as::<_, (Option,)>(&sql) @@ -531,7 +531,7 @@ let resolver_handle = tokio::spawn(async move { let sql = adapt_sql( - "SELECT did FROM backfill_repos WHERE job_id = ? AND pds_endpoint IS NULL", + "SELECT did FROM happyview_backfill_repos WHERE job_id = ? AND pds_endpoint IS NULL", resolver_state.db_backend, ); let unresolved: Vec<(String,)> = sqlx::query_as(&sql) @@ -570,7 +570,7 @@ match result { Ok(pds) => { let sql = adapt_sql( - "UPDATE backfill_repos SET pds_endpoint = ? WHERE job_id = ? AND did = ?", + "UPDATE happyview_backfill_repos SET pds_endpoint = ? WHERE job_id = ? AND did = ?", resolver_state.db_backend, ); let _ = sqlx::query(&sql) @@ -644,7 +644,7 @@ // --- Also send already-resolved-but-unfetched DIDs to the fetcher --- let pending_sql = adapt_sql( - "SELECT did, pds_endpoint FROM backfill_repos WHERE job_id = ? AND status = 'pending' AND pds_endpoint IS NOT NULL", + "SELECT did, pds_endpoint FROM happyview_backfill_repos WHERE job_id = ? AND status = 'pending' AND pds_endpoint IS NOT NULL", state.db_backend, ); let pending_rows: Vec<(String, String)> = sqlx::query_as(&pending_sql) @@ -827,7 +827,7 @@ // Persist final counts let sql = adapt_sql( - "UPDATE backfill_jobs SET processed_repos = ?, total_records = ? WHERE id = ?", + "UPDATE happyview_backfill_jobs SET processed_repos = ?, total_records = ? WHERE id = ?", state.db_backend, ); let _ = sqlx::query(&sql) @@ -874,7 +874,7 @@ // Mark DID as completed let sql = adapt_sql( - "UPDATE backfill_repos SET status = 'completed', records_fetched = ? WHERE job_id = ? AND did = ?", + "UPDATE happyview_backfill_repos SET status = 'completed', records_fetched = ? WHERE job_id = ? AND did = ?", state.db_backend, ); let _ = sqlx::query(&sql) @@ -895,7 +895,7 @@ let records = total_records.load(Ordering::Relaxed); if repos >= next_flush { let sql = adapt_sql( - "UPDATE backfill_jobs SET processed_repos = ?, total_records = ? WHERE id = ?", + "UPDATE happyview_backfill_jobs SET processed_repos = ?, total_records = ? WHERE id = ?", state.db_backend, ); let _ = sqlx::query(&sql) @@ -973,7 +973,7 @@ total_records.fetch_add(records, Ordering::Relaxed); let sql = adapt_sql( - "UPDATE backfill_repos SET status = 'completed', records_fetched = ? WHERE job_id = ? AND did = ?", + "UPDATE happyview_backfill_repos SET status = 'completed', records_fetched = ? WHERE job_id = ? AND did = ?", state.db_backend, ); let _ = sqlx::query(&sql) @@ -1011,7 +1011,7 @@ // Load pending repos grouped by PDS let sql = adapt_sql( - "SELECT did, pds_endpoint FROM backfill_repos WHERE job_id = ? AND status = 'pending' AND pds_endpoint IS NOT NULL", + "SELECT did, pds_endpoint FROM happyview_backfill_repos WHERE job_id = ? AND status = 'pending' AND pds_endpoint IS NOT NULL", state.db_backend, ); let rows: Vec<(String, String)> = sqlx::query_as(&sql) @@ -1027,7 +1027,7 @@ // Count already-completed repos for accurate progress let sql = adapt_sql( - "SELECT COUNT(*) FROM backfill_repos WHERE job_id = ? AND status = 'completed'", + "SELECT COUNT(*) FROM happyview_backfill_repos WHERE job_id = ? AND status = 'completed'", state.db_backend, ); let already_completed: i32 = sqlx::query_as::<_, (i32,)>(&sql) @@ -1043,7 +1043,7 @@ // Seed total_records from DB so a resumed job doesn't lose its prior count let existing_records: i32 = { let sql = adapt_sql( - "SELECT total_records FROM backfill_jobs WHERE id = ?", + "SELECT total_records FROM happyview_backfill_jobs WHERE id = ?", state.db_backend, ); sqlx::query_as::<_, (Option,)>(&sql) @@ -1127,7 +1127,7 @@ // Mark DID as completed let sql = adapt_sql( - "UPDATE backfill_repos SET status = 'completed', records_fetched = ? WHERE job_id = ? AND did = ?", + "UPDATE happyview_backfill_repos SET status = 'completed', records_fetched = ? WHERE job_id = ? AND did = ?", state.db_backend, ); let _ = sqlx::query(&sql) @@ -1146,7 +1146,7 @@ { let backend = state.db_backend; let sql = adapt_sql( - "UPDATE backfill_jobs SET processed_repos = ?, total_records = ? WHERE id = ?", + "UPDATE happyview_backfill_jobs SET processed_repos = ?, total_records = ? WHERE id = ?", backend, ); let _ = sqlx::query(&sql) @@ -1180,7 +1180,7 @@ // Persist final counts so they're accurate regardless of batch size let sql = adapt_sql( - "UPDATE backfill_jobs SET processed_repos = ?, total_records = ? WHERE id = ?", + "UPDATE happyview_backfill_jobs SET processed_repos = ?, total_records = ? WHERE id = ?", state.db_backend, ); let _ = sqlx::query(&sql) @@ -1215,7 +1215,7 @@ .map(|_| "(?, ?, ?, ?, ?, ?, ?, ?)".to_string()) .collect(); let raw_sql = format!( - "INSERT INTO records (uri, did, collection, rkey, record, cid, indexed_at, created_at) VALUES {} ON CONFLICT (uri) DO UPDATE SET record = EXCLUDED.record, cid = EXCLUDED.cid, indexed_at = EXCLUDED.indexed_at", + "INSERT INTO happyview_records (uri, did, collection, rkey, record, cid, indexed_at, created_at) VALUES {} ON CONFLICT (uri) DO UPDATE SET record = EXCLUDED.record, cid = EXCLUDED.cid, indexed_at = EXCLUDED.indexed_at", placeholders.join(", ") ); let sql = adapt_sql(&raw_sql, backend); @@ -1241,7 +1241,7 @@ let uris: Vec<&str> = batch.iter().map(|r| r.uri.as_str()).collect(); let delete_placeholders: Vec<&str> = (0..uris.len()).map(|_| "?").collect(); let delete_raw = format!( - "DELETE FROM record_refs WHERE source_uri IN ({})", + "DELETE FROM happyview_record_refs WHERE source_uri IN ({})", delete_placeholders.join(", ") ); let delete_sql = adapt_sql(&delete_raw, backend); @@ -1265,7 +1265,7 @@ for chunk in all_refs.chunks(300) { let ref_placeholders: Vec<&str> = (0..chunk.len()).map(|_| "(?, ?, ?)").collect(); let ref_raw = format!( - "INSERT INTO record_refs (source_uri, target_uri, collection) VALUES {} ON CONFLICT DO NOTHING", + "INSERT INTO happyview_record_refs (source_uri, target_uri, collection) VALUES {} ON CONFLICT DO NOTHING", ref_placeholders.join(", ") ); let ref_sql = adapt_sql(&ref_raw, backend); @@ -1279,7 +1279,7 @@ // Queue label backfill only if there are active labeler subscriptions. // Check once per batch instead of spawning a task per record. let has_subscriptions: bool = sqlx::query_as::<_, (i64,)>( - "SELECT COUNT(*) FROM labeler_subscriptions WHERE status = 'active'", + "SELECT COUNT(*) FROM happyview_labeler_subscriptions WHERE status = 'active'", ) .fetch_one(&state.db) .await @@ -1395,7 +1395,7 @@ // Load job metadata let sql = adapt_sql( - "SELECT collection, did, stage FROM backfill_jobs WHERE id = ?", + "SELECT collection, did, stage FROM happyview_backfill_jobs WHERE id = ?", backend, ); let job: Option<(Option, Option, String)> = sqlx::query_as(&sql) @@ -1425,7 +1425,7 @@ vec![col.clone()] } else { let sql = adapt_sql( - "SELECT id FROM lexicons WHERE json_extract(lexicon_json, '$.defs.main.type') = 'record'", + "SELECT id FROM happyview_lexicons WHERE json_extract(lexicon_json, '$.defs.main.type') = 'record'", backend, ); let rows: Vec<(String,)> = match sqlx::query_as(&sql).fetch_all(&state.backfill_db).await { @@ -1553,7 +1553,7 @@ let now = now_rfc3339(); let job_id = Uuid::new_v4().to_string(); let sql = adapt_sql( - "INSERT INTO backfill_jobs (id, collection, did, status, stage, started_at, created_at) VALUES (?, ?, ?, 'running', 'pending', ?, ?) RETURNING id", + "INSERT INTO happyview_backfill_jobs (id, collection, did, status, stage, started_at, created_at) VALUES (?, ?, ?, 'running', 'pending', ?, ?) RETURNING id", backend, ); let row: (String,) = sqlx::query_as(&sql) @@ -1607,7 +1607,7 @@ admin.require(Permission::BackfillCreate).await?; let sql = adapt_sql( - "SELECT status FROM backfill_jobs WHERE id = ?", + "SELECT status FROM happyview_backfill_jobs WHERE id = ?", state.db_backend, ); let row: Option<(String,)> = sqlx::query_as(&sql) @@ -1672,7 +1672,7 @@ admin.require(Permission::BackfillCreate).await?; let sql = adapt_sql( - "SELECT status FROM backfill_jobs WHERE id = ?", + "SELECT status FROM happyview_backfill_jobs WHERE id = ?", state.db_backend, ); let row: Option<(String,)> = sqlx::query_as(&sql) @@ -1719,7 +1719,7 @@ admin.require(Permission::BackfillCreate).await?; let sql = adapt_sql( - "SELECT status FROM backfill_jobs WHERE id = ?", + "SELECT status FROM happyview_backfill_jobs WHERE id = ?", state.db_backend, ); let row: Option<(String,)> = sqlx::query_as(&sql) @@ -1735,7 +1735,7 @@ ))), Some(_) => { let sql = adapt_sql( - "UPDATE backfill_jobs SET status = 'running' WHERE id = ?", + "UPDATE happyview_backfill_jobs SET status = 'running' WHERE id = ?", state.db_backend, ); let _ = sqlx::query(&sql) @@ -1777,7 +1777,7 @@ let backend = state.db_backend; let sql = adapt_sql( - "SELECT id, collection, did, status, stage, total_repos, resolved_repos, processed_repos, total_records, error, started_at, completed_at, created_at FROM backfill_jobs ORDER BY created_at DESC", + "SELECT id, collection, did, status, stage, total_repos, resolved_repos, processed_repos, total_records, error, started_at, completed_at, created_at FROM happyview_backfill_jobs ORDER BY created_at DESC", backend, ); #[allow(clippy::type_complexity)] @@ -1921,7 +1921,7 @@ }; let sql_str = format!( - "SELECT did, pds_endpoint, status, records_fetched FROM backfill_repos WHERE job_id = ?{phase_filter}{cursor_filter} ORDER BY did ASC LIMIT ?", + "SELECT did, pds_endpoint, status, records_fetched FROM happyview_backfill_repos WHERE job_id = ?{phase_filter}{cursor_filter} ORDER BY did ASC LIMIT ?", ); let sql = adapt_sql(&sql_str, state.db_backend); @@ -1967,7 +1967,7 @@ auth.require(Permission::BackfillRead).await?; let sql = adapt_sql( - "SELECT pds_endpoint, COUNT(*) as total_repos, SUM(CASE WHEN status = 'completed' THEN 1 ELSE 0 END) as completed_repos, SUM(records_fetched) as total_records FROM backfill_repos WHERE job_id = ? AND pds_endpoint IS NOT NULL GROUP BY pds_endpoint ORDER BY COUNT(*) DESC", + "SELECT pds_endpoint, COUNT(*) as total_repos, SUM(CASE WHEN status = 'completed' THEN 1 ELSE 0 END) as completed_repos, SUM(records_fetched) as total_records FROM happyview_backfill_repos WHERE job_id = ? AND pds_endpoint IS NOT NULL GROUP BY pds_endpoint ORDER BY COUNT(*) DESC", state.db_backend, ); @@ -2006,7 +2006,7 @@ auth.require(Permission::BackfillCreate).await?; let sql = adapt_sql( - "DELETE FROM backfill_repos WHERE job_id = ?", + "DELETE FROM happyview_backfill_repos WHERE job_id = ?", state.db_backend, ); let _ = sqlx::query(&sql) @@ -2024,7 +2024,7 @@ auth.require(Permission::BackfillCreate).await?; let sql = adapt_sql( - "DELETE FROM backfill_repos WHERE job_id IN (SELECT id FROM backfill_jobs WHERE status IN ('completed', 'cancelled', 'failed'))", + "DELETE FROM happyview_backfill_repos WHERE job_id IN (SELECT id FROM happyview_backfill_jobs WHERE status IN ('completed', 'cancelled', 'failed'))", state.db_backend, ); let _ = sqlx::query(&sql).execute(&state.backfill_db).await; @@ -2061,7 +2061,7 @@ let cutoff_str = cutoff.to_rfc3339(); let sql = adapt_sql( - "DELETE FROM backfill_repos WHERE job_id IN (SELECT id FROM backfill_jobs WHERE completed_at IS NOT NULL AND completed_at < ?)", + "DELETE FROM happyview_backfill_repos WHERE job_id IN (SELECT id FROM happyview_backfill_jobs WHERE completed_at IS NOT NULL AND completed_at < ?)", state.db_backend, ); match sqlx::query(&sql) @@ -2094,7 +2094,7 @@ /// Jobs stuck in `cancelling` are finalised immediately. pub async fn resume_backfill_jobs(state: &AppState) { let sql = adapt_sql( - "SELECT id, status FROM backfill_jobs WHERE status IN ('running', 'cancelling', 'pausing')", + "SELECT id, status FROM happyview_backfill_jobs WHERE status IN ('running', 'cancelling', 'pausing')", state.db_backend, ); let rows: Vec<(String, String)> = sqlx::query_as(&sql) diff --git a/src/admin/dead_letters.rs b/src/admin/dead_letters.rs --- a/src/admin/dead_letters.rs +++ b/src/admin/dead_letters.rs @@ -57,8 +57,8 @@ fn table(self) -> &'static str { match self { - Self::LegacyHooks => "dead_letter_hooks", - Self::Scripts => "dead_letter_scripts", + Self::LegacyHooks => "happyview_dead_letter_hooks", + Self::Scripts => "happyview_dead_letter_scripts", } } } @@ -366,7 +366,7 @@ let backend = state.db_backend; let mut sql = String::from( "SELECT id, lexicon_id, uri, did, collection, rkey, action, error, attempts, created_at, resolved_at - FROM dead_letter_hooks WHERE 1=1", + FROM happyview_dead_letter_hooks WHERE 1=1", ); match resolved { "false" => sql.push_str(" AND resolved_at IS NULL"), @@ -440,7 +440,7 @@ let backend = state.db_backend; let mut sql = String::from( "SELECT id, script_ref, host_kind, host_id, payload, error, attempts, created_at, resolved_at - FROM dead_letter_scripts WHERE 1=1", + FROM happyview_dead_letter_scripts WHERE 1=1", ); match resolved { "false" => sql.push_str(" AND resolved_at IS NULL"), @@ -577,7 +577,7 @@ let backend = state.db_backend; let sql = adapt_sql( "SELECT id, lexicon_id, uri, did, collection, rkey, action, error, attempts, created_at, resolved_at, record - FROM dead_letter_hooks WHERE id = ?", + FROM happyview_dead_letter_hooks WHERE id = ?", backend, ); @@ -624,7 +624,7 @@ let backend = state.db_backend; let sql = adapt_sql( "SELECT id, script_ref, host_kind, host_id, payload, error, attempts, created_at, resolved_at - FROM dead_letter_scripts WHERE id = ?", + FROM happyview_dead_letter_scripts WHERE id = ?", backend, ); let id_int: i64 = id @@ -688,7 +688,7 @@ let backend = state.db_backend; let sql = adapt_sql( "SELECT id, lexicon_id, uri, did, collection, rkey, action, record, error, attempts - FROM dead_letter_hooks WHERE id = ? AND resolved_at IS NULL", + FROM happyview_dead_letter_hooks WHERE id = ? AND resolved_at IS NULL", backend, ); #[allow(clippy::type_complexity)] @@ -727,7 +727,7 @@ let backend = state.db_backend; let id_int: i64 = id.parse().unwrap_or_default(); let sql = adapt_sql( - "SELECT id, host_kind, payload FROM dead_letter_scripts + "SELECT id, host_kind, payload FROM happyview_dead_letter_scripts WHERE id = ? AND resolved_at IS NULL", backend, ); @@ -827,7 +827,8 @@ let mut ids: Vec = Vec::new(); // Legacy table — supports the optional collection filter. - let mut sql = String::from("SELECT id FROM dead_letter_hooks WHERE resolved_at IS NULL"); + let mut sql = + String::from("SELECT id FROM happyview_dead_letter_hooks WHERE resolved_at IS NULL"); if body.collection.is_some() { sql.push_str(" AND collection = ?"); } @@ -843,8 +844,9 @@ ids.extend(rows.into_iter().map(|r| r.0)); { - let mut sql = - String::from("SELECT id FROM dead_letter_scripts WHERE resolved_at IS NULL"); + let mut sql = String::from( + "SELECT id FROM happyview_dead_letter_scripts WHERE resolved_at IS NULL", + ); if body.collection.is_some() { sql.push_str(" AND collection = ?"); } diff --git a/src/admin/domains.rs b/src/admin/domains.rs --- a/src/admin/domains.rs +++ b/src/admin/domains.rs @@ -30,7 +30,7 @@ auth.require(Permission::SettingsManage).await?; let sql = adapt_sql( - "SELECT id, url, is_primary, created_at, updated_at FROM domains ORDER BY created_at", + "SELECT id, url, is_primary, created_at, updated_at FROM happyview_domains ORDER BY created_at", state.db_backend, ); let rows: Vec<(String, String, i32, String, String)> = sqlx::query_as(&sql) @@ -85,7 +85,7 @@ // Check for duplicates let existing: Option<(String,)> = sqlx::query_as(&adapt_sql( - "SELECT id FROM domains WHERE url = ?", + "SELECT id FROM happyview_domains WHERE url = ?", state.db_backend, )) .bind(&url) @@ -103,7 +103,7 @@ let now = now_rfc3339(); let sql = adapt_sql( - "INSERT INTO domains (id, url, is_primary, created_at, updated_at) VALUES (?, ?, 0, ?, ?)", + "INSERT INTO happyview_domains (id, url, is_primary, created_at, updated_at) VALUES (?, ?, 0, ?, ?)", state.db_backend, ); sqlx::query(&sql) @@ -195,7 +195,7 @@ auth.require(Permission::SettingsManage).await?; let sql = adapt_sql( - "SELECT id, url, is_primary, created_at, updated_at FROM domains WHERE id = ?", + "SELECT id, url, is_primary, created_at, updated_at FROM happyview_domains WHERE id = ?", state.db_backend, ); let row: Option<(String, String, i32, String, String)> = sqlx::query_as(&sql) @@ -213,7 +213,10 @@ )); } - let delete_sql = adapt_sql("DELETE FROM domains WHERE id = ?", state.db_backend); + let delete_sql = adapt_sql( + "DELETE FROM happyview_domains WHERE id = ?", + state.db_backend, + ); sqlx::query(&delete_sql) .bind(&id) .execute(&state.db) @@ -258,7 +261,7 @@ auth.require(Permission::SettingsManage).await?; let sql = adapt_sql( - "SELECT id, url, is_primary, created_at, updated_at FROM domains WHERE id = ?", + "SELECT id, url, is_primary, created_at, updated_at FROM happyview_domains WHERE id = ?", state.db_backend, ); let row: Option<(String, String, i32, String, String)> = sqlx::query_as(&sql) @@ -272,7 +275,7 @@ let now = now_rfc3339(); let unset_sql = adapt_sql( - "UPDATE domains SET is_primary = 0, updated_at = ? WHERE is_primary = 1", + "UPDATE happyview_domains SET is_primary = 0, updated_at = ? WHERE is_primary = 1", state.db_backend, ); sqlx::query(&unset_sql) @@ -282,7 +285,7 @@ .map_err(|e| AppError::Internal(format!("failed to unset primary: {e}")))?; let set_sql = adapt_sql( - "UPDATE domains SET is_primary = 1, updated_at = ? WHERE id = ?", + "UPDATE happyview_domains SET is_primary = 1, updated_at = ? WHERE id = ?", state.db_backend, ); sqlx::query(&set_sql) diff --git a/src/admin/events.rs b/src/admin/events.rs --- a/src/admin/events.rs +++ b/src/admin/events.rs @@ -51,7 +51,7 @@ let mut sql = String::from( "SELECT id, event_type, severity, actor_did, subject, detail, created_at - FROM event_logs WHERE 1=1", + FROM happyview_event_logs WHERE 1=1", ); if query.event_type.is_some() { diff --git a/src/admin/labelers.rs b/src/admin/labelers.rs --- a/src/admin/labelers.rs +++ b/src/admin/labelers.rs @@ -20,7 +20,7 @@ let backend = state.db_backend; let sql = adapt_sql( - "SELECT did, status, cursor, created_at, updated_at FROM labeler_subscriptions ORDER BY created_at", + "SELECT did, status, cursor, created_at, updated_at FROM happyview_labeler_subscriptions ORDER BY created_at", backend, ); let rows: Vec<(String, String, Option, String, String)> = sqlx::query_as(&sql) @@ -56,7 +56,7 @@ let now = now_rfc3339(); let sql = adapt_sql( r#" - INSERT INTO labeler_subscriptions (did, created_at) + INSERT INTO happyview_labeler_subscriptions (did, created_at) VALUES (?, ?) ON CONFLICT (did) DO UPDATE SET status = 'active', updated_at = ? "#, @@ -101,7 +101,7 @@ let backend = state.db_backend; let now = now_rfc3339(); let sql = adapt_sql( - "UPDATE labeler_subscriptions SET status = ?, updated_at = ? WHERE did = ?", + "UPDATE happyview_labeler_subscriptions SET status = ?, updated_at = ? WHERE did = ?", backend, ); let result = sqlx::query(&sql) @@ -145,7 +145,10 @@ auth.require(Permission::LabelersDelete).await?; let backend = state.db_backend; - let delete_sql = adapt_sql("DELETE FROM labeler_subscriptions WHERE did = ?", backend); + let delete_sql = adapt_sql( + "DELETE FROM happyview_labeler_subscriptions WHERE did = ?", + backend, + ); let result = sqlx::query(&delete_sql) .bind(&did) .execute(&state.db) @@ -159,7 +162,7 @@ } // Also remove all labels from this labeler. - let delete_labels_sql = adapt_sql("DELETE FROM labels WHERE src = ?", backend); + let delete_labels_sql = adapt_sql("DELETE FROM happyview_labels WHERE src = ?", backend); let _ = sqlx::query(&delete_labels_sql) .bind(&did) .execute(&state.db) diff --git a/src/admin/lexicons.rs b/src/admin/lexicons.rs --- a/src/admin/lexicons.rs +++ b/src/admin/lexicons.rs @@ -71,7 +71,7 @@ // Upsert into database let sql = adapt_sql( r#" - INSERT INTO lexicons (id, lexicon_json, backfill, target_collection, action, token_cost, source, created_at) + INSERT INTO happyview_lexicons (id, lexicon_json, backfill, target_collection, action, token_cost, source, created_at) VALUES (?, ?, ?, ?, ?, ?, 'manual', ?) ON CONFLICT (id) DO UPDATE SET lexicon_json = EXCLUDED.lexicon_json, @@ -80,7 +80,7 @@ action = EXCLUDED.action, token_cost = EXCLUDED.token_cost, source = 'manual', - revision = lexicons.revision + 1, + revision = happyview_lexicons.revision + 1, updated_at = ? RETURNING revision "#, @@ -161,7 +161,7 @@ auth.require(Permission::LexiconsRead).await?; let backend = state.db_backend; let sql = adapt_sql( - "SELECT id, revision, lexicon_json, backfill, action, target_collection, source, authority_did, last_fetched_at, created_at, updated_at, token_cost FROM lexicons ORDER BY id", + "SELECT id, revision, lexicon_json, backfill, action, target_collection, source, authority_did, last_fetched_at, created_at, updated_at, token_cost FROM happyview_lexicons ORDER BY id", backend, ); #[allow(clippy::type_complexity)] @@ -243,7 +243,7 @@ auth.require(Permission::LexiconsRead).await?; let backend = state.db_backend; let sql = adapt_sql( - "SELECT id, revision, lexicon_json, backfill, action, target_collection, source, authority_did, last_fetched_at, created_at, updated_at, token_cost FROM lexicons WHERE id = ?", + "SELECT id, revision, lexicon_json, backfill, action, target_collection, source, authority_did, last_fetched_at, created_at, updated_at, token_cost FROM happyview_lexicons WHERE id = ?", backend, ); #[allow(clippy::type_complexity)] @@ -318,7 +318,7 @@ ) -> Result { auth.require(Permission::LexiconsDelete).await?; let backend = state.db_backend; - let sql = adapt_sql("DELETE FROM lexicons WHERE id = ?", backend); + let sql = adapt_sql("DELETE FROM happyview_lexicons WHERE id = ?", backend); let result = sqlx::query(&sql) .bind(&id) .execute(&state.db) diff --git a/src/admin/network_lexicons.rs b/src/admin/network_lexicons.rs --- a/src/admin/network_lexicons.rs +++ b/src/admin/network_lexicons.rs @@ -82,7 +82,7 @@ // Upsert into lexicons table with network source. let sql = adapt_sql( r#" - INSERT INTO lexicons (id, lexicon_json, backfill, target_collection, source, authority_did, last_fetched_at, created_at) + INSERT INTO happyview_lexicons (id, lexicon_json, backfill, target_collection, source, authority_did, last_fetched_at, created_at) VALUES (?, ?, 0, ?, 'network', ?, ?, ?) ON CONFLICT (id) DO UPDATE SET lexicon_json = EXCLUDED.lexicon_json, @@ -90,7 +90,7 @@ source = 'network', authority_did = EXCLUDED.authority_did, last_fetched_at = ?, - revision = lexicons.revision + 1, + revision = happyview_lexicons.revision + 1, updated_at = ? RETURNING revision "#, @@ -146,7 +146,7 @@ let backend = state.db_backend; let sql = adapt_sql( - "SELECT id, authority_did, target_collection, last_fetched_at, created_at FROM lexicons WHERE source = 'network' ORDER BY id", + "SELECT id, authority_did, target_collection, last_fetched_at, created_at FROM happyview_lexicons WHERE source = 'network' ORDER BY id", backend, ); #[allow(clippy::type_complexity)] @@ -189,7 +189,7 @@ let backend = state.db_backend; let sql = adapt_sql( - "DELETE FROM lexicons WHERE id = ? AND source = 'network'", + "DELETE FROM happyview_lexicons WHERE id = ? AND source = 'network'", backend, ); let result = sqlx::query(&sql) diff --git a/src/admin/plugins.rs b/src/admin/plugins.rs --- a/src/admin/plugins.rs +++ b/src/admin/plugins.rs @@ -90,7 +90,7 @@ // Query which plugins have secrets configured let configured_plugins: std::collections::HashSet = { let sql = adapt_sql( - "SELECT plugin_id FROM plugin_configs WHERE config IS NOT NULL", + "SELECT plugin_id FROM happyview_plugin_configs WHERE config IS NOT NULL", state.db_backend, ); sqlx::query_scalar::<_, String>(&sql) @@ -308,7 +308,10 @@ } // Remove from database - let sql = adapt_sql("DELETE FROM plugins WHERE id = ?", state.db_backend); + let sql = adapt_sql( + "DELETE FROM happyview_plugins WHERE id = ?", + state.db_backend, + ); sqlx::query(&sql) .bind(&plugin_id) .execute(&state.db) @@ -398,7 +401,7 @@ // Check if reloaded plugin still has its config let secrets_configured = required_secrets.is_empty() || { let sql = adapt_sql( - "SELECT 1 FROM plugin_configs WHERE plugin_id = ?", + "SELECT 1 FROM happyview_plugin_configs WHERE plugin_id = ?", state.db_backend, ); sqlx::query_scalar::<_, i32>(&sql) @@ -429,7 +432,7 @@ // Persist the (possibly new) URL so restarts pick it up let persist_sql = adapt_sql( - "UPDATE plugins SET url = ?, sha256 = NULL WHERE id = ?", + "UPDATE happyview_plugins SET url = ?, sha256 = NULL WHERE id = ?", state.db_backend, ); sqlx::query(&persist_sql) @@ -481,7 +484,7 @@ // Get secrets from plugin_configs table let sql = adapt_sql( - "SELECT config FROM plugin_configs WHERE plugin_id = ?", + "SELECT config FROM happyview_plugin_configs WHERE plugin_id = ?", state.db_backend, ); @@ -551,7 +554,7 @@ // Get existing config or create new one let sql = adapt_sql( - "SELECT config FROM plugin_configs WHERE plugin_id = ?", + "SELECT config FROM happyview_plugin_configs WHERE plugin_id = ?", state.db_backend, ); @@ -605,7 +608,7 @@ // Upsert into plugin_configs let sql = adapt_sql( - "INSERT INTO plugin_configs (plugin_id, config, updated_at) VALUES (?, ?, ?) + "INSERT INTO happyview_plugin_configs (plugin_id, config, updated_at) VALUES (?, ?, ?) ON CONFLICT (plugin_id) DO UPDATE SET config = EXCLUDED.config, updated_at = EXCLUDED.updated_at", state.db_backend, ); diff --git a/src/admin/proxy_config.rs b/src/admin/proxy_config.rs --- a/src/admin/proxy_config.rs +++ b/src/admin/proxy_config.rs @@ -49,7 +49,7 @@ let now = now_rfc3339(); let sql = adapt_sql( r#" - INSERT INTO instance_settings (key, value, updated_at) + INSERT INTO happyview_instance_settings (key, value, updated_at) VALUES (?, ?, ?) ON CONFLICT (key) DO UPDATE SET value = ?, updated_at = ? "#, diff --git a/src/admin/records.rs b/src/admin/records.rs --- a/src/admin/records.rs +++ b/src/admin/records.rs @@ -77,7 +77,7 @@ .unwrap_or(0); let sql = adapt_sql( - "SELECT uri, did, collection, rkey, cid, indexed_at, record FROM records WHERE collection = ? ORDER BY indexed_at DESC LIMIT ? OFFSET ?", + "SELECT uri, did, collection, rkey, cid, indexed_at, record FROM happyview_records WHERE collection = ? ORDER BY indexed_at DESC LIMIT ? OFFSET ?", backend, ); let rows: Vec = sqlx::query_as(&sql) @@ -103,7 +103,7 @@ let now = now_rfc3339(); let ph_str = (0..uris.len()).map(|_| "?").collect::>().join(", "); let raw_sql = format!( - "SELECT uri, src, val, cts FROM labels WHERE uri IN ({ph_str}) AND (exp IS NULL OR exp > ?)" + "SELECT uri, src, val, cts FROM happyview_labels WHERE uri IN ({ph_str}) AND (exp IS NULL OR exp > ?)" ); let sql = adapt_sql(&raw_sql, backend); let mut q = sqlx::query_as(&sql); @@ -186,7 +186,10 @@ auth.require(Permission::RecordsDeleteCollection).await?; auth.require(Permission::RecordsDelete).await?; let backend = state.db_backend; - let sql = adapt_sql("DELETE FROM records WHERE collection = ?", backend); + let sql = adapt_sql( + "DELETE FROM happyview_records WHERE collection = ?", + backend, + ); let result = sqlx::query(&sql) .bind(¶ms.collection) .execute(&state.db) @@ -206,7 +209,7 @@ ) -> Result { auth.require(Permission::RecordsDelete).await?; let backend = state.db_backend; - let sql = adapt_sql("DELETE FROM records WHERE uri = ?", backend); + let sql = adapt_sql("DELETE FROM happyview_records WHERE uri = ?", backend); let result = sqlx::query(&sql) .bind(¶ms.uri) .execute(&state.db) @@ -228,7 +231,7 @@ auth.require(Permission::RecordsRead).await?; let sql = adapt_sql( - "SELECT id FROM lexicons WHERE json_extract(lexicon_json, '$.defs.main.type') = 'record' ORDER BY id", + "SELECT id FROM happyview_lexicons WHERE json_extract(lexicon_json, '$.defs.main.type') = 'record' ORDER BY id", state.db_backend, ); let rows: Vec<(String,)> = sqlx::query_as(&sql) diff --git a/src/admin/script_variables.rs b/src/admin/script_variables.rs --- a/src/admin/script_variables.rs +++ b/src/admin/script_variables.rs @@ -20,7 +20,7 @@ let backend = state.db_backend; let sql = adapt_sql( - "SELECT key, value, created_at, updated_at FROM script_variables ORDER BY key", + "SELECT key, value, created_at, updated_at FROM happyview_script_variables ORDER BY key", backend, ); let rows: Vec<(String, String, String, String)> = sqlx::query_as(&sql) @@ -56,7 +56,7 @@ let now = now_rfc3339(); let sql = adapt_sql( r#" - INSERT INTO script_variables (key, value, created_at) + INSERT INTO happyview_script_variables (key, value, created_at) VALUES (?, ?, ?) ON CONFLICT (key) DO UPDATE SET value = ?, updated_at = ? "#, @@ -97,7 +97,10 @@ auth.require(Permission::ScriptVariablesDelete).await?; let backend = state.db_backend; - let sql = adapt_sql("DELETE FROM script_variables WHERE key = ?", backend); + let sql = adapt_sql( + "DELETE FROM happyview_script_variables WHERE key = ?", + backend, + ); let result = sqlx::query(&sql) .bind(&key) .execute(&state.db) diff --git a/src/admin/scripts.rs b/src/admin/scripts.rs --- a/src/admin/scripts.rs +++ b/src/admin/scripts.rs @@ -107,7 +107,7 @@ let backend = state.db_backend; let mut sql = String::from( "SELECT id, script_type, body, description, outbound_xrpcs, created_at, updated_at - FROM scripts", + FROM happyview_scripts", ); if query.suffix.is_some() { sql.push_str(" WHERE id LIKE ?"); @@ -207,17 +207,19 @@ let description = body.description.as_deref().filter(|s| !s.is_empty()); // Distinguish create vs update so we can return 201 vs 200. - let pre_exists: Option<(String,)> = - sqlx::query_as(&adapt_sql("SELECT id FROM scripts WHERE id = ?", backend)) - .bind(&body.id) - .fetch_optional(&state.db) - .await - .map_err(|e| AppError::Internal(format!("failed to check script existence: {e}")))?; + let pre_exists: Option<(String,)> = sqlx::query_as(&adapt_sql( + "SELECT id FROM happyview_scripts WHERE id = ?", + backend, + )) + .bind(&body.id) + .fetch_optional(&state.db) + .await + .map_err(|e| AppError::Internal(format!("failed to check script existence: {e}")))?; let was_new = pre_exists.is_none(); let sql = adapt_sql( r#" - INSERT INTO scripts (id, script_type, body, description, outbound_xrpcs, created_at, updated_at) + INSERT INTO happyview_scripts (id, script_type, body, description, outbound_xrpcs, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?) ON CONFLICT (id) DO UPDATE SET script_type = EXCLUDED.script_type, @@ -331,7 +333,7 @@ let sql = adapt_sql( r#" - UPDATE scripts + UPDATE happyview_scripts SET script_type = ?, body = ?, description = ?, @@ -381,7 +383,7 @@ auth.require(Permission::ScriptsManage).await?; let backend = state.db_backend; - let sql = adapt_sql("DELETE FROM scripts WHERE id = ?", backend); + let sql = adapt_sql("DELETE FROM happyview_scripts WHERE id = ?", backend); let result = sqlx::query(&sql) .bind(&id) .execute(&state.db) @@ -415,7 +417,7 @@ let backend = state.db_backend; let sql = adapt_sql( "SELECT id, script_type, body, description, outbound_xrpcs, created_at, updated_at - FROM scripts WHERE id = ?", + FROM happyview_scripts WHERE id = ?", backend, ); #[allow(clippy::type_complexity)] diff --git a/src/admin/service_entries.rs b/src/admin/service_entries.rs --- a/src/admin/service_entries.rs +++ b/src/admin/service_entries.rs @@ -253,7 +253,7 @@ // Decrypt the rotation key for signing let rotation_key_enc_sql = crate::db::adapt_sql( - "SELECT rotation_key_enc FROM service_identity WHERE id = 1", + "SELECT rotation_key_enc FROM happyview_service_identity WHERE id = 1", state.db_backend, ); let row: Option<(Option,)> = sqlx::query_as(&rotation_key_enc_sql) @@ -303,7 +303,7 @@ let account_did = match identity.mode { IdentityMode::AttachAccount => { let sql = crate::db::adapt_sql( - "SELECT attached_account_did FROM service_identity WHERE id = 1", + "SELECT attached_account_did FROM happyview_service_identity WHERE id = 1", state.db_backend, ); let row: Option<(Option,)> = sqlx::query_as(&sql) @@ -367,7 +367,7 @@ let account_did = match identity.mode { IdentityMode::AttachAccount => { let sql = crate::db::adapt_sql( - "SELECT attached_account_did FROM service_identity WHERE id = 1", + "SELECT attached_account_did FROM happyview_service_identity WHERE id = 1", state.db_backend, ); let row: Option<(Option,)> = sqlx::query_as(&sql) diff --git a/src/admin/settings.rs b/src/admin/settings.rs --- a/src/admin/settings.rs +++ b/src/admin/settings.rs @@ -36,7 +36,10 @@ /// Resolve a setting value: check the DB first, then fall back to env var. pub async fn get_setting(pool: &AnyPool, key: &str, backend: DatabaseBackend) -> Option { - let sql = adapt_sql("SELECT value FROM instance_settings WHERE key = ?", backend); + let sql = adapt_sql( + "SELECT value FROM happyview_instance_settings WHERE key = ?", + backend, + ); let row: Option<(String,)> = sqlx::query_as(&sql) .bind(key) .fetch_optional(pool) @@ -67,7 +70,7 @@ let backend = state.db_backend; let sql = adapt_sql( - "SELECT key, value FROM instance_settings ORDER BY key", + "SELECT key, value FROM happyview_instance_settings ORDER BY key", backend, ); let rows: Vec<(String, String)> = sqlx::query_as(&sql) @@ -115,7 +118,7 @@ let now = now_rfc3339(); let sql = adapt_sql( r#" - INSERT INTO instance_settings (key, value, updated_at) + INSERT INTO happyview_instance_settings (key, value, updated_at) VALUES (?, ?, ?) ON CONFLICT (key) DO UPDATE SET value = ?, updated_at = ? "#, @@ -156,7 +159,10 @@ auth.require(Permission::SettingsManage).await?; let backend = state.db_backend; - let sql = adapt_sql("DELETE FROM instance_settings WHERE key = ?", backend); + let sql = adapt_sql( + "DELETE FROM happyview_instance_settings WHERE key = ?", + backend, + ); let result = sqlx::query(&sql) .bind(&key) .execute(&state.db) @@ -277,7 +283,7 @@ let backend = state.db_backend; let now = now_rfc3339(); let sql = adapt_sql( - "INSERT INTO instance_settings (key, value, updated_at) VALUES (?, ?, ?) ON CONFLICT (key) DO UPDATE SET value = ?, updated_at = ?", + "INSERT INTO happyview_instance_settings (key, value, updated_at) VALUES (?, ?, ?) ON CONFLICT (key) DO UPDATE SET value = ?, updated_at = ?", backend, ); for (key, value) in [ @@ -319,7 +325,10 @@ auth.require(Permission::SettingsManage).await?; let backend = state.db_backend; - let sql = adapt_sql("DELETE FROM instance_settings WHERE key IN (?, ?)", backend); + let sql = adapt_sql( + "DELETE FROM happyview_instance_settings WHERE key IN (?, ?)", + backend, + ); sqlx::query(&sql) .bind("logo_data") .bind("logo_content_type") @@ -349,7 +358,7 @@ ) -> Result { let backend = state.db_backend; let sql = adapt_sql( - "SELECT key, value FROM instance_settings WHERE key IN (?, ?)", + "SELECT key, value FROM happyview_instance_settings WHERE key IN (?, ?)", backend, ); let rows: Vec<(String, String)> = sqlx::query_as(&sql) diff --git a/src/admin/stats.rs b/src/admin/stats.rs --- a/src/admin/stats.rs +++ b/src/admin/stats.rs @@ -15,7 +15,7 @@ auth: UserAuth, ) -> Result, AppError> { auth.require(Permission::StatsRead).await?; - let total: (i64,) = sqlx::query_as("SELECT COUNT(*) FROM records") + let total: (i64,) = sqlx::query_as("SELECT COUNT(*) FROM happyview_records") .fetch_one(&state.db) .await .map_err(|e| AppError::Internal(format!("failed to count records: {e}")))?; @@ -24,11 +24,11 @@ r#" SELECT c.collection, COALESCE(r.cnt, 0) AS count FROM ( - SELECT id AS collection FROM lexicons + SELECT id AS collection FROM happyview_lexicons WHERE json_extract(lexicon_json, '$.defs.main.type') = 'record' ) c LEFT JOIN ( - SELECT collection, COUNT(*) AS cnt FROM records GROUP BY collection + SELECT collection, COUNT(*) AS cnt FROM happyview_records GROUP BY collection ) r ON r.collection = c.collection ORDER BY c.collection "#, diff --git a/src/admin/users.rs b/src/admin/users.rs --- a/src/admin/users.rs +++ b/src/admin/users.rs @@ -60,7 +60,7 @@ let backend = state.db_backend; let insert_sql = adapt_sql( - "INSERT INTO users (id, did, is_super, created_at) VALUES (?, ?, ?, ?)", + "INSERT INTO happyview_users (id, did, is_super, created_at) VALUES (?, ?, ?, ?)", backend, ); @@ -74,7 +74,7 @@ .map_err(|e| AppError::Internal(format!("failed to create user: {e}")))?; let perm_sql = adapt_sql( - "INSERT INTO user_permissions (user_id, permission, granted_by, granted_at) VALUES (?, ?, ?, ?) ON CONFLICT DO NOTHING", + "INSERT INTO happyview_user_permissions (user_id, permission, granted_by, granted_at) VALUES (?, ?, ?, ?) ON CONFLICT DO NOTHING", backend, ); @@ -129,7 +129,7 @@ let backend = state.db_backend; let select_sql = adapt_sql( - "SELECT id, did, is_super, created_at, last_used_at FROM users ORDER BY created_at", + "SELECT id, did, is_super, created_at, last_used_at FROM happyview_users ORDER BY created_at", backend, ); @@ -139,7 +139,7 @@ .map_err(|e| AppError::Internal(format!("failed to list users: {e}")))?; let perm_sql = adapt_sql( - "SELECT permission FROM user_permissions WHERE user_id = ? ORDER BY permission", + "SELECT permission FROM happyview_user_permissions WHERE user_id = ? ORDER BY permission", backend, ); @@ -175,7 +175,7 @@ let backend = state.db_backend; let select_sql = adapt_sql( - "SELECT id, did, is_super, created_at, last_used_at FROM users WHERE id = ?", + "SELECT id, did, is_super, created_at, last_used_at FROM happyview_users WHERE id = ?", backend, ); @@ -190,7 +190,7 @@ }; let perm_sql = adapt_sql( - "SELECT permission FROM user_permissions WHERE user_id = ? ORDER BY permission", + "SELECT permission FROM happyview_user_permissions WHERE user_id = ? ORDER BY permission", backend, ); @@ -229,7 +229,7 @@ } // Cannot modify super user's permissions - let select_sql = adapt_sql("SELECT is_super FROM users WHERE id = ?", backend); + let select_sql = adapt_sql("SELECT is_super FROM happyview_users WHERE id = ?", backend); let target: Option<(i32,)> = sqlx::query_as(&select_sql) .bind(&id) .fetch_optional(&state.db) @@ -276,7 +276,7 @@ let now = now_rfc3339(); let grant_sql = adapt_sql( - "INSERT INTO user_permissions (user_id, permission, granted_by, granted_at) VALUES (?, ?, ?, ?) ON CONFLICT DO NOTHING", + "INSERT INTO happyview_user_permissions (user_id, permission, granted_by, granted_at) VALUES (?, ?, ?, ?) ON CONFLICT DO NOTHING", backend, ); @@ -292,7 +292,7 @@ } let revoke_sql = adapt_sql( - "DELETE FROM user_permissions WHERE user_id = ? AND permission = ?", + "DELETE FROM happyview_user_permissions WHERE user_id = ? AND permission = ?", backend, ); @@ -340,7 +340,7 @@ } // Cannot delete super user - let select_sql = adapt_sql("SELECT is_super FROM users WHERE id = ?", backend); + let select_sql = adapt_sql("SELECT is_super FROM happyview_users WHERE id = ?", backend); let target: Option<(i32,)> = sqlx::query_as(&select_sql) .bind(&id) .fetch_optional(&state.db) @@ -359,7 +359,7 @@ let now = now_rfc3339(); let revoke_keys_sql = adapt_sql( - "UPDATE api_keys SET revoked_at = ? WHERE user_id = ? AND revoked_at IS NULL", + "UPDATE happyview_api_keys SET revoked_at = ? WHERE user_id = ? AND revoked_at IS NULL", backend, ); @@ -370,7 +370,7 @@ .await .map_err(|e| AppError::Internal(format!("failed to revoke api keys: {e}")))?; - let delete_sql = adapt_sql("DELETE FROM users WHERE id = ?", backend); + let delete_sql = adapt_sql("DELETE FROM happyview_users WHERE id = ?", backend); let result = sqlx::query(&delete_sql) .bind(&id) @@ -414,7 +414,10 @@ let now = now_rfc3339(); // Remove super from current user - let update1_sql = adapt_sql("UPDATE users SET is_super = ? WHERE id = ?", backend); + let update1_sql = adapt_sql( + "UPDATE happyview_users SET is_super = ? WHERE id = ?", + backend, + ); sqlx::query(&update1_sql) .bind(0_i32) .bind(&auth.user_id) @@ -423,7 +426,10 @@ .map_err(|e| AppError::Internal(format!("failed to remove super: {e}")))?; // Set super on target user - let update2_sql = adapt_sql("UPDATE users SET is_super = ? WHERE id = ?", backend); + let update2_sql = adapt_sql( + "UPDATE happyview_users SET is_super = ? WHERE id = ?", + backend, + ); let result = sqlx::query(&update2_sql) .bind(1_i32) .bind(&body.target_user_id) @@ -433,7 +439,10 @@ if result.rows_affected() == 0 { // Restore super on current user - let restore_sql = adapt_sql("UPDATE users SET is_super = ? WHERE id = ?", backend); + let restore_sql = adapt_sql( + "UPDATE happyview_users SET is_super = ? WHERE id = ?", + backend, + ); let _ = sqlx::query(&restore_sql) .bind(1_i32) .bind(&auth.user_id) @@ -447,7 +456,7 @@ // Ensure target has all permissions let perm_sql = adapt_sql( - "INSERT INTO user_permissions (user_id, permission, granted_by, granted_at) VALUES (?, ?, ?, ?) ON CONFLICT DO NOTHING", + "INSERT INTO happyview_user_permissions (user_id, permission, granted_by, granted_at) VALUES (?, ?, ?, ?) ON CONFLICT DO NOTHING", backend, ); diff --git a/src/auth/client_registry.rs b/src/auth/client_registry.rs --- a/src/auth/client_registry.rs +++ b/src/auth/client_registry.rs @@ -242,7 +242,7 @@ session_store_pool: sqlx::AnyPool, ) { let sql = adapt_sql( - "SELECT client_id_url, client_uri, redirect_uris, scopes FROM api_clients WHERE is_active = 1", + "SELECT client_id_url, client_uri, redirect_uris, scopes FROM happyview_api_clients WHERE is_active = 1", db_backend, ); diff --git a/src/auth/middleware.rs b/src/auth/middleware.rs --- a/src/auth/middleware.rs +++ b/src/auth/middleware.rs @@ -139,7 +139,7 @@ let hash = hex::encode(Sha256::digest(token.as_bytes())); let sql = adapt_sql( - "SELECT u.did FROM api_keys k JOIN users u ON k.user_id = u.id WHERE k.key_hash = ? AND k.revoked_at IS NULL", + "SELECT u.did FROM happyview_api_keys k JOIN happyview_users u ON k.user_id = u.id WHERE k.key_hash = ? AND k.revoked_at IS NULL", state.db_backend, ); let row: Option<(String,)> = sqlx::query_as(&sql) diff --git a/src/auth/oauth_store.rs b/src/auth/oauth_store.rs --- a/src/auth/oauth_store.rs +++ b/src/auth/oauth_store.rs @@ -63,7 +63,7 @@ async fn get(&self, key: &Did) -> Result, Self::Error> { let row: Option<(String,)> = sqlx::query_as(&adapt_sql( - "SELECT session_data FROM oauth_sessions WHERE did = ?", + "SELECT session_data FROM happyview_oauth_sessions WHERE did = ?", self.backend, )) .bind(key.as_ref()) @@ -79,7 +79,7 @@ async fn set(&self, key: Did, value: Session) -> Result<(), Self::Error> { let json = serde_json::to_string(&value)?; sqlx::query(&adapt_sql( - "INSERT INTO oauth_sessions (did, session_data, updated_at) VALUES (?, ?, datetime('now')) + "INSERT INTO happyview_oauth_sessions (did, session_data, updated_at) VALUES (?, ?, datetime('now')) ON CONFLICT (did) DO UPDATE SET session_data = EXCLUDED.session_data, updated_at = datetime('now')", self.backend, )) @@ -92,7 +92,7 @@ async fn del(&self, key: &Did) -> Result<(), Self::Error> { sqlx::query(&adapt_sql( - "DELETE FROM oauth_sessions WHERE did = ?", + "DELETE FROM happyview_oauth_sessions WHERE did = ?", self.backend, )) .bind(key.as_ref()) @@ -102,7 +102,7 @@ } async fn clear(&self) -> Result<(), Self::Error> { - sqlx::query("DELETE FROM oauth_sessions") + sqlx::query("DELETE FROM happyview_oauth_sessions") .execute(&self.pool) .await?; Ok(()) @@ -146,7 +146,7 @@ async fn get(&self, key: &String) -> Result, Self::Error> { let row: Option<(String,)> = sqlx::query_as(&adapt_sql( - "SELECT state_data FROM oauth_state WHERE state_key = ?", + "SELECT state_data FROM happyview_oauth_state WHERE state_key = ?", self.backend, )) .bind(key) @@ -162,7 +162,7 @@ async fn set(&self, key: String, value: InternalStateData) -> Result<(), Self::Error> { let json = serde_json::to_string(&value)?; sqlx::query(&adapt_sql( - "INSERT INTO oauth_state (state_key, state_data) VALUES (?, ?) + "INSERT INTO happyview_oauth_state (state_key, state_data) VALUES (?, ?) ON CONFLICT (state_key) DO UPDATE SET state_data = EXCLUDED.state_data", self.backend, )) @@ -176,7 +176,7 @@ async fn del(&self, key: &String) -> Result<(), Self::Error> { sqlx::query(&adapt_sql( - "DELETE FROM oauth_state WHERE state_key = ?", + "DELETE FROM happyview_oauth_state WHERE state_key = ?", self.backend, )) .bind(key) @@ -186,7 +186,7 @@ } async fn clear(&self) -> Result<(), Self::Error> { - sqlx::query("DELETE FROM oauth_state") + sqlx::query("DELETE FROM happyview_oauth_state") .execute(&self.pool) .await?; Ok(()) diff --git a/src/auth/routes.rs b/src/auth/routes.rs --- a/src/auth/routes.rs +++ b/src/auth/routes.rs @@ -129,7 +129,7 @@ let now = now_rfc3339(); let expires_at = (chrono::Utc::now() + chrono::Duration::minutes(10)).to_rfc3339(); let sql = adapt_sql( - "INSERT INTO auth_login_redirects (state, redirect_uri, client_id, created_at, expires_at) VALUES (?, ?, ?, ?, ?)", + "INSERT INTO happyview_auth_login_redirects (state, redirect_uri, client_id, created_at, expires_at) VALUES (?, ?, ?, ?, ?)", state.db_backend, ); let _ = sqlx::query(&sql) @@ -158,7 +158,7 @@ // Look up the redirect URI and client_id from the database before the OAuth library consumes the state let (redirect_url, client_id) = if let Some(oauth_state) = &query.state { let sql = adapt_sql( - "SELECT redirect_uri, client_id FROM auth_login_redirects WHERE state = ? AND expires_at > ?", + "SELECT redirect_uri, client_id FROM happyview_auth_login_redirects WHERE state = ? AND expires_at > ?", state.db_backend, ); let now = now_rfc3339(); @@ -172,7 +172,7 @@ // Clean up the row (one-time use) if row.is_some() { let delete_sql = adapt_sql( - "DELETE FROM auth_login_redirects WHERE state = ?", + "DELETE FROM happyview_auth_login_redirects WHERE state = ?", state.db_backend, ); let _ = sqlx::query(&delete_sql) @@ -218,14 +218,14 @@ // Allow login when no users exist yet (first user will be bootstrapped as admin). // Also allow login for the configured attached account DID (setup attach-auth flow). // Otherwise, only allow users already in the users table. - let user_count: (i64,) = sqlx::query_as("SELECT COUNT(*) FROM users") + let user_count: (i64,) = sqlx::query_as("SELECT COUNT(*) FROM happyview_users") .fetch_one(&state.db) .await .map_err(|e| AppError::Internal(format!("user count query failed: {e}")))?; if user_count.0 > 0 { let user_exists: Option<(i32,)> = sqlx::query_as(&adapt_sql( - "SELECT 1 FROM users WHERE did = ?", + "SELECT 1 FROM happyview_users WHERE did = ?", state.db_backend, )) .bind(did.as_ref()) @@ -236,7 +236,7 @@ if user_exists.is_none() { // Allow login if this DID is the configured attached account (setup flow) let is_attached_account: Option<(i32,)> = sqlx::query_as(&adapt_sql( - "SELECT 1 FROM service_identity WHERE attached_account_did = ?", + "SELECT 1 FROM happyview_service_identity WHERE attached_account_did = ?", state.db_backend, )) .bind(did.as_ref()) @@ -260,7 +260,7 @@ // for per-client rate limiting. let client_key = if let Some(ref cid) = client_id { let sql = adapt_sql( - "SELECT client_key FROM api_clients WHERE client_id_url = ? AND is_active = 1", + "SELECT client_key FROM happyview_api_clients WHERE client_id_url = ? AND is_active = 1", state.db_backend, ); let row: Option<(String,)> = sqlx::query_as(&sql) @@ -360,12 +360,14 @@ let did = raw.split('\n').next().unwrap_or(&raw).to_string(); let backend = state.db_backend; - let user: Option<(i32,)> = - sqlx::query_as(&adapt_sql("SELECT 1 FROM users WHERE did = ?", backend)) - .bind(&did) - .fetch_optional(&state.db) - .await - .map_err(|e| AppError::Internal(format!("user lookup failed: {e}")))?; + let user: Option<(i32,)> = sqlx::query_as(&adapt_sql( + "SELECT 1 FROM happyview_users WHERE did = ?", + backend, + )) + .bind(&did) + .fetch_optional(&state.db) + .await + .map_err(|e| AppError::Internal(format!("user lookup failed: {e}")))?; Ok(Json(MeResponse { did, diff --git a/src/delegation/db.rs b/src/delegation/db.rs --- a/src/delegation/db.rs +++ b/src/delegation/db.rs @@ -13,7 +13,7 @@ ) -> Result<(), AppError> { let now = now_rfc3339(); let sql = adapt_sql( - "INSERT INTO delegated_accounts (account_did, linked_by, api_client_id, created_at) VALUES (?, ?, ?, ?)", + "INSERT INTO happyview_delegated_accounts (account_did, linked_by, api_client_id, created_at) VALUES (?, ?, ?, ?)", backend, ); sqlx::query(&sql) @@ -33,7 +33,7 @@ account_did: &str, ) -> Result<(), AppError> { let sql = adapt_sql( - "DELETE FROM delegated_accounts WHERE account_did = ?", + "DELETE FROM happyview_delegated_accounts WHERE account_did = ?", backend, ); sqlx::query(&sql) @@ -50,7 +50,7 @@ account_did: &str, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT linked_by FROM delegated_accounts WHERE account_did = ?", + "SELECT linked_by FROM happyview_delegated_accounts WHERE account_did = ?", backend, ); let row: Option<(String,)> = sqlx::query_as(&sql) @@ -76,7 +76,7 @@ account_did: &str, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT api_client_id FROM delegated_accounts WHERE account_did = ?", + "SELECT api_client_id FROM happyview_delegated_accounts WHERE account_did = ?", backend, ); let row: Option<(String,)> = sqlx::query_as(&sql) @@ -97,7 +97,7 @@ ) -> Result<(), AppError> { let now = now_rfc3339(); let sql = adapt_sql( - "INSERT INTO account_delegates (account_did, user_did, role, granted_by, created_at) VALUES (?, ?, ?, ?, ?)", + "INSERT INTO happyview_account_delegates (account_did, user_did, role, granted_by, created_at) VALUES (?, ?, ?, ?, ?)", backend, ); sqlx::query(&sql) @@ -119,7 +119,7 @@ user_did: &str, ) -> Result<(), AppError> { let sql = adapt_sql( - "DELETE FROM account_delegates WHERE account_did = ? AND user_did = ?", + "DELETE FROM happyview_account_delegates WHERE account_did = ? AND user_did = ?", backend, ); sqlx::query(&sql) @@ -138,7 +138,7 @@ user_did: &str, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT role FROM account_delegates WHERE account_did = ? AND user_did = ?", + "SELECT role FROM happyview_account_delegates WHERE account_did = ? AND user_did = ?", backend, ); let row: Option<(String,)> = sqlx::query_as(&sql) @@ -157,7 +157,7 @@ api_client_id: &str, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT ad.account_did, ad.role, ad.created_at FROM account_delegates ad JOIN delegated_accounts da ON da.account_did = ad.account_did WHERE ad.user_did = ? AND da.api_client_id = ? ORDER BY ad.created_at DESC", + "SELECT ad.account_did, ad.role, ad.created_at FROM happyview_account_delegates ad JOIN happyview_delegated_accounts da ON da.account_did = ad.account_did WHERE ad.user_did = ? AND da.api_client_id = ? ORDER BY ad.created_at DESC", backend, ); let rows: Vec<(String, String, String)> = sqlx::query_as(&sql) @@ -184,7 +184,7 @@ user_did: &str, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT da.linked_by, ad.role, ad.created_at FROM delegated_accounts da JOIN account_delegates ad ON da.account_did = ad.account_did WHERE da.account_did = ? AND ad.user_did = ?", + "SELECT da.linked_by, ad.role, ad.created_at FROM happyview_delegated_accounts da JOIN happyview_account_delegates ad ON da.account_did = ad.account_did WHERE da.account_did = ? AND ad.user_did = ?", backend, ); let row: Option<(String, String, String)> = sqlx::query_as(&sql) @@ -202,7 +202,7 @@ account_did: &str, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT user_did, role, granted_by, created_at FROM account_delegates WHERE account_did = ? ORDER BY created_at ASC", + "SELECT user_did, role, granted_by, created_at FROM happyview_account_delegates WHERE account_did = ? ORDER BY created_at ASC", backend, ); let rows: Vec<(String, String, String, String)> = sqlx::query_as(&sql) diff --git a/src/delegation/link_account.rs b/src/delegation/link_account.rs --- a/src/delegation/link_account.rs +++ b/src/delegation/link_account.rs @@ -47,7 +47,7 @@ let api_client_id = crate::repo::get_dpop_client_id(&state, client_key).await?; let session_check_sql = crate::db::adapt_sql( - "SELECT id FROM dpop_sessions WHERE api_client_id = ? AND user_did = ?", + "SELECT id FROM happyview_dpop_sessions WHERE api_client_id = ? AND user_did = ?", state.db_backend, ); let session_exists: Option<(String,)> = sqlx::query_as(&session_check_sql) diff --git a/src/dev_happyview/create_client.rs b/src/dev_happyview/create_client.rs --- a/src/dev_happyview/create_client.rs +++ b/src/dev_happyview/create_client.rs @@ -61,7 +61,7 @@ .map_err(|_| AppError::Auth("Invalid client".into()))?; let parent_check_sql = adapt_sql( - "SELECT parent_client_id, created_by FROM api_clients WHERE id = ?", + "SELECT parent_client_id, created_by FROM happyview_api_clients WHERE id = ?", state.db_backend, ); let parent_row: Option<(Option, String)> = sqlx::query_as(&parent_check_sql) @@ -91,7 +91,7 @@ // 5. Check for duplicate client_id_url let dup_check_sql = adapt_sql( - "SELECT id FROM api_clients WHERE client_id_url = ?", + "SELECT id FROM happyview_api_clients WHERE client_id_url = ?", state.db_backend, ); let dup: Option<(String,)> = sqlx::query_as(&dup_check_sql) @@ -132,7 +132,7 @@ .map(|origins| serde_json::to_string(origins).unwrap_or_else(|_| "[]".to_string())); let insert_sql = adapt_sql( - "INSERT INTO api_clients (id, client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, rate_limit_capacity, rate_limit_refill_rate, client_type, allowed_origins, is_active, created_by, created_at, updated_at, parent_client_id, owner_did) VALUES (?, ?, ?, ?, ?, ?, ?, ?, NULL, NULL, ?, ?, 1, ?, ?, ?, ?, ?)", + "INSERT INTO happyview_api_clients (id, client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, rate_limit_capacity, rate_limit_refill_rate, client_type, allowed_origins, is_active, created_by, created_at, updated_at, parent_client_id, owner_did) VALUES (?, ?, ?, ?, ?, ?, ?, ?, NULL, NULL, ?, ?, 1, ?, ?, ?, ?, ?)", state.db_backend, ); sqlx::query(&insert_sql) diff --git a/src/dev_happyview/delete_client.rs b/src/dev_happyview/delete_client.rs --- a/src/dev_happyview/delete_client.rs +++ b/src/dev_happyview/delete_client.rs @@ -48,7 +48,7 @@ // 3. Look up client_id_url and client_key before deleting (scoped to owner) let lookup_sql = adapt_sql( - "SELECT client_id_url, client_key FROM api_clients WHERE id = ? AND owner_did = ?", + "SELECT client_id_url, client_key FROM happyview_api_clients WHERE id = ? AND owner_did = ?", state.db_backend, ); let client_info: Option<(String, String)> = sqlx::query_as(&lookup_sql) @@ -60,7 +60,7 @@ // 4. Look up child clients before deleting (ON DELETE CASCADE will remove DB rows) let children_sql = adapt_sql( - "SELECT client_id_url, client_key FROM api_clients WHERE parent_client_id = ?", + "SELECT client_id_url, client_key FROM happyview_api_clients WHERE parent_client_id = ?", state.db_backend, ); let children: Vec<(String, String)> = sqlx::query_as(&children_sql) @@ -71,7 +71,7 @@ // 5. Delete from DB — scoped to owner_did so users cannot delete others' clients let delete_sql = adapt_sql( - "DELETE FROM api_clients WHERE id = ? AND owner_did = ?", + "DELETE FROM happyview_api_clients WHERE id = ? AND owner_did = ?", state.db_backend, ); let result = sqlx::query(&delete_sql) diff --git a/src/dev_happyview/get_client.rs b/src/dev_happyview/get_client.rs --- a/src/dev_happyview/get_client.rs +++ b/src/dev_happyview/get_client.rs @@ -50,7 +50,7 @@ let sql = adapt_sql( "SELECT id, client_key, name, client_id_url, client_uri, redirect_uris, scopes, client_type, allowed_origins, is_active, created_at \ - FROM api_clients \ + FROM happyview_api_clients \ WHERE id = $1 AND owner_did = $2", state.db_backend, ); diff --git a/src/dev_happyview/list_clients.rs b/src/dev_happyview/list_clients.rs --- a/src/dev_happyview/list_clients.rs +++ b/src/dev_happyview/list_clients.rs @@ -44,7 +44,7 @@ // Reject requests from child clients if let Some(client_key) = claims.client_key() { let sql = adapt_sql( - "SELECT parent_client_id FROM api_clients WHERE client_key = $1", + "SELECT parent_client_id FROM happyview_api_clients WHERE client_key = $1", state.db_backend, ); let parent_check: Option> = sqlx::query_scalar(&sql) @@ -63,7 +63,7 @@ // Fetch all clients owned by the authenticated user let sql = adapt_sql( "SELECT id, client_key, name, client_id_url, client_uri, redirect_uris, scopes, client_type, allowed_origins, is_active, created_at \ - FROM api_clients \ + FROM happyview_api_clients \ WHERE owner_did = $1 \ ORDER BY created_at DESC", state.db_backend, diff --git a/src/external_auth/routes.rs b/src/external_auth/routes.rs --- a/src/external_auth/routes.rs +++ b/src/external_auth/routes.rs @@ -461,7 +461,7 @@ // Try to load from database first (if encryption key is available) if let Some(key) = encryption_key { let sql = crate::db::adapt_sql( - "SELECT config FROM plugin_configs WHERE plugin_id = ?", + "SELECT config FROM happyview_plugin_configs WHERE plugin_id = ?", db_backend, ); diff --git a/src/external_auth/state.rs b/src/external_auth/state.rs --- a/src/external_auth/state.rs +++ b/src/external_auth/state.rs @@ -39,7 +39,7 @@ let expires_str = expires_at.to_rfc3339(); let sql = adapt_sql( - "INSERT INTO external_auth_state (state, did, plugin_id, redirect_uri, created_at, expires_at) VALUES (?, ?, ?, ?, ?, ?)", + "INSERT INTO happyview_external_auth_state (state, did, plugin_id, redirect_uri, created_at, expires_at) VALUES (?, ?, ?, ?, ?, ?)", backend, ); @@ -68,7 +68,7 @@ // Get state if not expired let sql = adapt_sql( - "SELECT did, plugin_id, redirect_uri FROM external_auth_state WHERE state = ? AND expires_at > ?", + "SELECT did, plugin_id, redirect_uri FROM happyview_external_auth_state WHERE state = ? AND expires_at > ?", backend, ); @@ -81,7 +81,10 @@ let (did, plugin_id, redirect_uri) = row.ok_or(StateError::NotFound)?; // Delete the state (one-time use) - let delete_sql = adapt_sql("DELETE FROM external_auth_state WHERE state = ?", backend); + let delete_sql = adapt_sql( + "DELETE FROM happyview_external_auth_state WHERE state = ?", + backend, + ); sqlx::query(&delete_sql).bind(state).execute(db).await?; Ok(StoredState { @@ -99,7 +102,7 @@ let now = now_rfc3339(); let sql = adapt_sql( - "DELETE FROM external_auth_state WHERE expires_at <= ?", + "DELETE FROM happyview_external_auth_state WHERE expires_at <= ?", backend, ); let result = sqlx::query(&sql).bind(&now).execute(db).await?; diff --git a/src/external_auth/sync.rs b/src/external_auth/sync.rs --- a/src/external_auth/sync.rs +++ b/src/external_auth/sync.rs @@ -32,7 +32,7 @@ // For now, just track dedup key if let Some(dedup_key) = &record.dedup_key { let sql = adapt_sql( - "INSERT INTO plugin_dedup_keys (plugin_id, did, dedup_key, record_uri, updated_at) + "INSERT INTO happyview_plugin_dedup_keys (plugin_id, did, dedup_key, record_uri, updated_at) VALUES (?, ?, ?, ?, datetime('now')) ON CONFLICT (plugin_id, did, dedup_key) DO UPDATE SET record_uri = excluded.record_uri, updated_at = excluded.updated_at", diff --git a/src/external_auth/tokens.rs b/src/external_auth/tokens.rs --- a/src/external_auth/tokens.rs +++ b/src/external_auth/tokens.rs @@ -62,7 +62,7 @@ let now = now_rfc3339(); let sql = adapt_sql( - "INSERT INTO external_account_tokens (id, did, plugin_id, account_id, access_token, refresh_token, token_type, scope, expires_at, created_at, updated_at) + "INSERT INTO happyview_external_account_tokens (id, did, plugin_id, account_id, access_token, refresh_token, token_type, scope, expires_at, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT (did, plugin_id) DO UPDATE SET account_id = excluded.account_id, access_token = excluded.access_token, refresh_token = excluded.refresh_token, token_type = excluded.token_type, scope = excluded.scope, expires_at = excluded.expires_at, updated_at = excluded.updated_at", @@ -98,7 +98,7 @@ let key = encryption_key.ok_or(TokenError::KeyNotConfigured)?; let sql = adapt_sql( - "SELECT account_id, access_token, refresh_token, token_type, scope, expires_at FROM external_account_tokens WHERE did = ? AND plugin_id = ?", + "SELECT account_id, access_token, refresh_token, token_type, scope, expires_at FROM happyview_external_account_tokens WHERE did = ? AND plugin_id = ?", backend, ); @@ -140,7 +140,7 @@ plugin_id: &str, ) -> Result { let sql = adapt_sql( - "DELETE FROM external_account_tokens WHERE did = ? AND plugin_id = ?", + "DELETE FROM happyview_external_account_tokens WHERE did = ? AND plugin_id = ?", backend, ); @@ -161,7 +161,7 @@ plugin_id: &str, ) -> Result { let sql = adapt_sql( - "SELECT 1 FROM external_account_tokens WHERE did = ? AND plugin_id = ?", + "SELECT 1 FROM happyview_external_account_tokens WHERE did = ? AND plugin_id = ?", backend, ); @@ -182,7 +182,7 @@ plugin_id: &str, ) -> Result, TokenError> { let sql = adapt_sql( - "SELECT account_id FROM external_account_tokens WHERE did = ? AND plugin_id = ?", + "SELECT account_id FROM happyview_external_account_tokens WHERE did = ? AND plugin_id = ?", backend, ); @@ -211,7 +211,7 @@ did: &str, ) -> Result, TokenError> { let sql = adapt_sql( - "SELECT plugin_id, account_id, created_at, updated_at FROM external_account_tokens WHERE did = ? ORDER BY created_at DESC", + "SELECT plugin_id, account_id, created_at, updated_at FROM happyview_external_account_tokens WHERE did = ? ORDER BY created_at DESC", backend, ); diff --git a/src/lua/atproto_api.rs b/src/lua/atproto_api.rs --- a/src/lua/atproto_api.rs +++ b/src/lua/atproto_api.rs @@ -119,7 +119,7 @@ let backend = state.db_backend; let now = now_rfc3339(); let sql = adapt_sql( - "SELECT src, uri, val, cts FROM labels WHERE uri = ? AND (exp IS NULL OR exp > ?)", + "SELECT src, uri, val, cts FROM happyview_labels WHERE uri = ? AND (exp IS NULL OR exp > ?)", backend, ); let rows: Vec<(String, String, String, String)> = sqlx::query_as(&sql) @@ -143,7 +143,7 @@ } // Check for self-labels in the record itself. - let record_sql = adapt_sql("SELECT did, record FROM records WHERE uri = ?", backend); + let record_sql = adapt_sql("SELECT did, record FROM happyview_records WHERE uri = ?", backend); let record: Option<(String, String)> = sqlx::query_as(&record_sql) .bind(&uri) .fetch_optional(&state.db) @@ -191,7 +191,7 @@ // Query labels for all URIs (one query per URI since AnyPool doesn't support array binding). let label_sql = adapt_sql( - "SELECT src, uri, val, cts FROM labels WHERE uri = ? AND (exp IS NULL OR exp > ?)", + "SELECT src, uri, val, cts FROM happyview_labels WHERE uri = ? AND (exp IS NULL OR exp > ?)", backend, ); let mut rows: Vec<(String, String, String, String)> = Vec::new(); @@ -210,7 +210,7 @@ // Query records for self-labels. let record_sql = adapt_sql( - "SELECT uri, did, record FROM records WHERE uri = ?", + "SELECT uri, did, record FROM happyview_records WHERE uri = ?", backend, ); let mut records: Vec<(String, String, String)> = Vec::new(); diff --git a/src/lua/db_api.rs b/src/lua/db_api.rs --- a/src/lua/db_api.rs +++ b/src/lua/db_api.rs @@ -210,7 +210,7 @@ let did_clause = if did.is_some() { " AND did = ?" } else { "" }; let sql = adapt_sql( - &format!("SELECT uri, did, record FROM records WHERE collection = ?{did_clause}{filter_clause} ORDER BY {order_expr} LIMIT ? OFFSET ?"), + &format!("SELECT uri, did, record FROM happyview_records WHERE collection = ?{did_clause}{filter_clause} ORDER BY {order_expr} LIMIT ? OFFSET ?"), backend, ); let mut q = sqlx::query_as(&sql).bind(&collection); @@ -262,7 +262,7 @@ }; let sql = adapt_sql( &format!( - "SELECT uri, did, record, created_at FROM records \ + "SELECT uri, did, record, created_at FROM happyview_records \ WHERE collection = ?{did_clause}{cursor_clause}{filter_clause} \ ORDER BY created_at DESC, uri DESC \ LIMIT ?" @@ -321,7 +321,10 @@ let state = state_get.clone(); async move { let backend = state.db_backend; - let sql = adapt_sql("SELECT record FROM records WHERE uri = ?", backend); + let sql = adapt_sql( + "SELECT record FROM happyview_records WHERE uri = ?", + backend, + ); let row: Option<(String,)> = sqlx::query_as(&sql) .bind(&uri) .fetch_optional(&state.db) @@ -366,7 +369,7 @@ let rows: Vec<(String, String, String)> = match backend { DatabaseBackend::Sqlite => { let sql = format!( - "SELECT uri, did, record FROM records \ + "SELECT uri, did, record FROM happyview_records \ WHERE collection = ? \ AND json_extract(record, '$.{field}') LIKE ? COLLATE NOCASE \ ORDER BY \ @@ -390,7 +393,7 @@ } DatabaseBackend::Postgres => { let sql = format!( - "SELECT uri, did, record FROM records \ + "SELECT uri, did, record FROM happyview_records \ WHERE collection = $1 \ AND record::jsonb->>'{field}' ILIKE $2 \ ORDER BY \ @@ -448,7 +451,7 @@ let backend = state.db_backend; let count: (i64,) = if let Some(ref did) = did { let sql = adapt_sql( - "SELECT COUNT(*) FROM records WHERE collection = ? AND did = ?", + "SELECT COUNT(*) FROM happyview_records WHERE collection = ? AND did = ?", backend, ); sqlx::query_as(&sql) @@ -458,8 +461,10 @@ .await .map_err(|e| mlua::Error::runtime(format!("DB count failed: {e}")))? } else { - let sql = - adapt_sql("SELECT COUNT(*) FROM records WHERE collection = ?", backend); + let sql = adapt_sql( + "SELECT COUNT(*) FROM happyview_records WHERE collection = ?", + backend, + ); sqlx::query_as(&sql) .bind(&collection) .fetch_one(&state.db) @@ -491,8 +496,8 @@ let rows_raw: Vec = match (&did, &cursor_parts) { (Some(did), Some((cursor_ts, cursor_uri))) => { let sql = adapt_sql( - "SELECT r.uri, r.did, r.record, r.created_at FROM records r \ - INNER JOIN record_refs ref ON ref.source_uri = r.uri \ + "SELECT r.uri, r.did, r.record, r.created_at FROM happyview_records r \ + INNER JOIN happyview_record_refs ref ON ref.source_uri = r.uri \ WHERE ref.target_uri = ? AND ref.collection = ? AND r.did = ? \ AND (r.created_at < ? OR (r.created_at = ? AND r.uri < ?)) \ ORDER BY r.created_at DESC, r.uri DESC \ @@ -513,8 +518,8 @@ } (Some(did), None) => { let sql = adapt_sql( - "SELECT r.uri, r.did, r.record, r.created_at FROM records r \ - INNER JOIN record_refs ref ON ref.source_uri = r.uri \ + "SELECT r.uri, r.did, r.record, r.created_at FROM happyview_records r \ + INNER JOIN happyview_record_refs ref ON ref.source_uri = r.uri \ WHERE ref.target_uri = ? AND ref.collection = ? AND r.did = ? \ ORDER BY r.created_at DESC, r.uri DESC \ LIMIT ?", @@ -531,8 +536,8 @@ } (None, Some((cursor_ts, cursor_uri))) => { let sql = adapt_sql( - "SELECT r.uri, r.did, r.record, r.created_at FROM records r \ - INNER JOIN record_refs ref ON ref.source_uri = r.uri \ + "SELECT r.uri, r.did, r.record, r.created_at FROM happyview_records r \ + INNER JOIN happyview_record_refs ref ON ref.source_uri = r.uri \ WHERE ref.target_uri = ? AND ref.collection = ? \ AND (r.created_at < ? OR (r.created_at = ? AND r.uri < ?)) \ ORDER BY r.created_at DESC, r.uri DESC \ @@ -552,8 +557,8 @@ } (None, None) => { let sql = adapt_sql( - "SELECT r.uri, r.did, r.record, r.created_at FROM records r \ - INNER JOIN record_refs ref ON ref.source_uri = r.uri \ + "SELECT r.uri, r.did, r.record, r.created_at FROM happyview_records r \ + INNER JOIN happyview_record_refs ref ON ref.source_uri = r.uri \ WHERE ref.target_uri = ? AND ref.collection = ? \ ORDER BY r.created_at DESC, r.uri DESC \ LIMIT ?", @@ -808,7 +813,7 @@ let state = test_state(); let lua = setup(&state); let result: Result = lua - .load(r#"return db.raw("DELETE FROM records")"#) + .load(r#"return db.raw("DELETE FROM happyview_records")"#) .eval_async() .await; // Should fail with a DB connection error, NOT a validation error diff --git a/src/lua/execute.rs b/src/lua/execute.rs --- a/src/lua/execute.rs +++ b/src/lua/execute.rs @@ -23,7 +23,7 @@ /// Load all script variables from the database as a key-value map. async fn load_env_vars(db: &sqlx::AnyPool, backend: DatabaseBackend) -> HashMap { - let sql = adapt_sql("SELECT key, value FROM script_variables", backend); + let sql = adapt_sql("SELECT key, value FROM happyview_script_variables", backend); sqlx::query_as::<_, (String, String)>(&sql) .fetch_all(db) .await diff --git a/src/lua/record.rs b/src/lua/record.rs --- a/src/lua/record.rs +++ b/src/lua/record.rs @@ -148,7 +148,7 @@ let now = now_rfc3339(); let data_str = serde_json::to_string(&data).unwrap_or_default(); let upsert_sql = adapt_sql( - r#"INSERT INTO records (uri, did, collection, rkey, record, cid, indexed_at, created_at) + r#"INSERT INTO happyview_records (uri, did, collection, rkey, record, cid, indexed_at, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT (uri) DO UPDATE SET record = EXCLUDED.record, @@ -212,7 +212,7 @@ let data_str = serde_json::to_string(&data).unwrap_or_default(); let now = now_rfc3339(); let upsert_sql = adapt_sql( - r#"INSERT INTO records (uri, did, collection, rkey, record, cid, created_at) + r#"INSERT INTO happyview_records (uri, did, collection, rkey, record, cid, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) ON CONFLICT (uri) DO UPDATE SET record = EXCLUDED.record, @@ -317,7 +317,7 @@ // Always delete locally — operator's logical action is // "remove this record from view" regardless of PDS outcome. - let delete_sql = adapt_sql("DELETE FROM records WHERE uri = ?", backend); + let delete_sql = adapt_sql("DELETE FROM happyview_records WHERE uri = ?", backend); let _ = sqlx::query(&delete_sql).bind(&uri).execute(&state.db).await; this.raw_set("_uri", mlua::Value::Nil)?; @@ -417,7 +417,7 @@ // NULL CID — no PDS round-trip means we have no real CID // to record. let upsert_sql = adapt_sql( - r#"INSERT INTO records (uri, did, collection, rkey, record, cid, indexed_at, created_at) + r#"INSERT INTO happyview_records (uri, did, collection, rkey, record, cid, indexed_at, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT (uri) DO UPDATE SET record = EXCLUDED.record, @@ -462,7 +462,7 @@ mlua::Error::runtime("cannot delete_local a Record that has no _uri") })?; - let delete_sql = adapt_sql("DELETE FROM records WHERE uri = ?", backend); + let delete_sql = adapt_sql("DELETE FROM happyview_records WHERE uri = ?", backend); sqlx::query(&delete_sql) .bind(&uri) .execute(&state.db) @@ -749,7 +749,7 @@ let now = now_rfc3339(); let data_str = serde_json::to_string(&data).unwrap_or_default(); let upsert_sql = adapt_sql( - r#"INSERT INTO records (uri, did, collection, rkey, record, cid, indexed_at, created_at) + r#"INSERT INTO happyview_records (uri, did, collection, rkey, record, cid, indexed_at, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT (uri) DO UPDATE SET record = EXCLUDED.record, @@ -818,7 +818,7 @@ let data_str = serde_json::to_string(&data).unwrap_or_default(); let now = now_rfc3339(); let upsert_sql = adapt_sql( - r#"INSERT INTO records (uri, did, collection, rkey, record, cid, created_at) + r#"INSERT INTO happyview_records (uri, did, collection, rkey, record, cid, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) ON CONFLICT (uri) DO UPDATE SET record = EXCLUDED.record, @@ -874,7 +874,7 @@ async move { let backend = state.db_backend; let sql = adapt_sql( - "SELECT collection, record, cid FROM records WHERE uri = ?", + "SELECT collection, record, cid FROM happyview_records WHERE uri = ?", backend, ); let row: Option<(String, String, String)> = sqlx::query_as(&sql) @@ -941,7 +941,7 @@ let uri = uri.clone(); async move { let sql = adapt_sql( - "SELECT collection, record, cid FROM records WHERE uri = ?", + "SELECT collection, record, cid FROM happyview_records WHERE uri = ?", backend, ); let row: Option<(String, String, String)> = sqlx::query_as(&sql) @@ -1020,7 +1020,7 @@ let state = state.clone(); async move { let backend = state.db_backend; - let delete_sql = adapt_sql("DELETE FROM records WHERE uri = ?", backend); + let delete_sql = adapt_sql("DELETE FROM happyview_records WHERE uri = ?", backend); let res = sqlx::query(&delete_sql) .bind(&uri) .execute(&state.db) diff --git a/src/lua/scripts.rs b/src/lua/scripts.rs --- a/src/lua/scripts.rs +++ b/src/lua/scripts.rs @@ -223,7 +223,7 @@ /// the row's `script_type` is unknown to this binary (logged at warn). pub async fn resolve(state: &AppState, trigger_id: &str) -> Option { let sql = adapt_sql( - "SELECT id, body, script_type FROM scripts WHERE id = ?", + "SELECT id, body, script_type FROM happyview_scripts WHERE id = ?", state.db_backend, ); let row: Option<(String, String, String)> = match sqlx::query_as(&sql) @@ -791,7 +791,7 @@ db: &sqlx::AnyPool, backend: DatabaseBackend, ) -> std::collections::HashMap { - let sql = adapt_sql("SELECT key, value FROM script_variables", backend); + let sql = adapt_sql("SELECT key, value FROM happyview_script_variables", backend); sqlx::query_as::<_, (String, String)>(&sql) .fetch_all(db) .await @@ -813,7 +813,7 @@ async fn write_dead_letter(state: &AppState, entry: &DeadLetterEntry<'_>) { let payload_str = serde_json::to_string(entry.payload).unwrap_or_else(|_| "{}".to_string()); let sql = adapt_sql( - "INSERT INTO dead_letter_scripts + "INSERT INTO happyview_dead_letter_scripts (script_ref, host_kind, host_id, payload, error, attempts, created_at, collection) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", state.db_backend, diff --git a/src/lua/xrpc_api.rs b/src/lua/xrpc_api.rs --- a/src/lua/xrpc_api.rs +++ b/src/lua/xrpc_api.rs @@ -313,7 +313,7 @@ async fn seed_script(state: &AppState, trigger: &str, body: &str) { sqlx::query( r#" - CREATE TABLE IF NOT EXISTS scripts ( + CREATE TABLE IF NOT EXISTS happyview_scripts ( id TEXT PRIMARY KEY, body TEXT NOT NULL, description TEXT, @@ -327,7 +327,7 @@ .await .unwrap(); sqlx::query( - "INSERT OR REPLACE INTO scripts (id, body, script_type, created_at, updated_at) + "INSERT OR REPLACE INTO happyview_scripts (id, body, script_type, created_at, updated_at) VALUES (?, ?, 'lua', datetime('now'), datetime('now'))", ) .bind(trigger) diff --git a/src/oauth/client_auth.rs b/src/oauth/client_auth.rs --- a/src/oauth/client_auth.rs +++ b/src/oauth/client_auth.rs @@ -22,7 +22,7 @@ let secret_hash = hex::encode(Sha256::digest(client_secret.as_bytes())); let sql = adapt_sql( - "SELECT id, client_key, client_type, scopes, allowed_origins, client_secret_hash FROM api_clients WHERE client_key = ? AND is_active = 1", + "SELECT id, client_key, client_type, scopes, allowed_origins, client_secret_hash FROM happyview_api_clients WHERE client_key = ? AND is_active = 1", backend, ); @@ -67,7 +67,7 @@ origin: Option<&str>, ) -> Result { let sql = adapt_sql( - "SELECT id, client_key, client_type, scopes, allowed_origins FROM api_clients WHERE client_key = ? AND is_active = 1", + "SELECT id, client_key, client_type, scopes, allowed_origins FROM happyview_api_clients WHERE client_key = ? AND is_active = 1", backend, ); @@ -126,7 +126,7 @@ client_key: &str, ) -> Result { let sql = adapt_sql( - "SELECT id, client_key, client_type, scopes, allowed_origins FROM api_clients WHERE client_key = ? AND is_active = 1", + "SELECT id, client_key, client_type, scopes, allowed_origins FROM happyview_api_clients WHERE client_key = ? AND is_active = 1", backend, ); diff --git a/src/oauth/keys.rs b/src/oauth/keys.rs --- a/src/oauth/keys.rs +++ b/src/oauth/keys.rs @@ -117,7 +117,7 @@ let now = now_rfc3339(); let sql = adapt_sql( - "INSERT INTO dpop_keys (id, provision_id, api_client_id, private_key_enc, jwk_thumbprint, pkce_challenge, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", + "INSERT INTO happyview_dpop_keys (id, provision_id, api_client_id, private_key_enc, jwk_thumbprint, pkce_challenge, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", backend, ); @@ -145,7 +145,7 @@ ) -> Result<(String, String, serde_json::Value, String, Option), AppError> { // Returns: (id, api_client_id, private_jwk, thumbprint, pkce_challenge) let sql = adapt_sql( - "SELECT id, api_client_id, private_key_enc, jwk_thumbprint, pkce_challenge FROM dpop_keys WHERE provision_id = ?", + "SELECT id, api_client_id, private_key_enc, jwk_thumbprint, pkce_challenge FROM happyview_dpop_keys WHERE provision_id = ?", backend, ); @@ -174,7 +174,10 @@ backend: DatabaseBackend, key_id: &str, ) -> Result { - let sql = adapt_sql("SELECT jwk_thumbprint FROM dpop_keys WHERE id = ?", backend); + let sql = adapt_sql( + "SELECT jwk_thumbprint FROM happyview_dpop_keys WHERE id = ?", + backend, + ); let row: Option<(String,)> = sqlx::query_as(&sql) .bind(key_id) @@ -194,7 +197,7 @@ thumbprint: &str, ) -> Result { let sql = adapt_sql( - "SELECT id FROM dpop_keys WHERE api_client_id = ? AND jwk_thumbprint = ?", + "SELECT id FROM happyview_dpop_keys WHERE api_client_id = ? AND jwk_thumbprint = ?", backend, ); @@ -216,13 +219,16 @@ dpop_key_id: &str, ) -> Result<(), AppError> { // Session is deleted by CASCADE, but be explicit for clarity - let session_sql = adapt_sql("DELETE FROM dpop_sessions WHERE dpop_key_id = ?", backend); + let session_sql = adapt_sql( + "DELETE FROM happyview_dpop_sessions WHERE dpop_key_id = ?", + backend, + ); let _ = sqlx::query(&session_sql) .bind(dpop_key_id) .execute(pool) .await; - let key_sql = adapt_sql("DELETE FROM dpop_keys WHERE id = ?", backend); + let key_sql = adapt_sql("DELETE FROM happyview_dpop_keys WHERE id = ?", backend); sqlx::query(&key_sql) .bind(dpop_key_id) .execute(pool) diff --git a/src/oauth/pds_write.rs b/src/oauth/pds_write.rs --- a/src/oauth/pds_write.rs +++ b/src/oauth/pds_write.rs @@ -47,7 +47,7 @@ }; let key_sql = crate::db::adapt_sql( - "SELECT private_key_enc FROM dpop_keys WHERE id = ?", + "SELECT private_key_enc FROM happyview_dpop_keys WHERE id = ?", backend, ); let row: Option<(Vec,)> = sqlx::query_as(&key_sql) @@ -593,7 +593,7 @@ api_client_id: &str, ) -> Result { let sql = crate::db::adapt_sql( - "SELECT client_id_url FROM api_clients WHERE id = ?", + "SELECT client_id_url FROM happyview_api_clients WHERE id = ?", backend, ); let row: Option<(String,)> = sqlx::query_as(&sql) diff --git a/src/oauth/sessions.rs b/src/oauth/sessions.rs --- a/src/oauth/sessions.rs +++ b/src/oauth/sessions.rs @@ -57,7 +57,7 @@ let now = now_rfc3339(); let sql = adapt_sql( - r#"INSERT INTO dpop_sessions (id, api_client_id, dpop_key_id, user_did, access_token_enc, refresh_token_enc, token_expires_at, scopes, pds_url, issuer, created_at, updated_at) + r#"INSERT INTO happyview_dpop_sessions (id, api_client_id, dpop_key_id, user_did, access_token_enc, refresh_token_enc, token_expires_at, scopes, pds_url, issuer, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT (api_client_id, user_did, dpop_key_id) DO UPDATE SET access_token_enc = EXCLUDED.access_token_enc, @@ -100,7 +100,7 @@ dpop_key_id: &str, ) -> Result { let sql = adapt_sql( - "SELECT id, access_token_enc, refresh_token_enc, token_expires_at, scopes, pds_url, issuer FROM dpop_sessions WHERE api_client_id = ? AND user_did = ? AND dpop_key_id = ?", + "SELECT id, access_token_enc, refresh_token_enc, token_expires_at, scopes, pds_url, issuer FROM happyview_dpop_sessions WHERE api_client_id = ? AND user_did = ? AND dpop_key_id = ?", backend, ); @@ -163,7 +163,7 @@ dpop_key_id: &str, ) -> Result { let sql = adapt_sql( - "SELECT id, user_did, access_token_enc, refresh_token_enc, token_expires_at, scopes, pds_url, issuer FROM dpop_sessions WHERE api_client_id = ? AND dpop_key_id = ?", + "SELECT id, user_did, access_token_enc, refresh_token_enc, token_expires_at, scopes, pds_url, issuer FROM happyview_dpop_sessions WHERE api_client_id = ? AND dpop_key_id = ?", backend, ); @@ -225,7 +225,7 @@ dpop_key_id: &str, ) -> Result { let del_session_sql = adapt_sql( - "DELETE FROM dpop_sessions WHERE api_client_id = ? AND user_did = ? AND dpop_key_id = ?", + "DELETE FROM happyview_dpop_sessions WHERE api_client_id = ? AND user_did = ? AND dpop_key_id = ?", backend, ); sqlx::query(&del_session_sql) @@ -236,7 +236,7 @@ .await .map_err(|e| AppError::Internal(format!("failed to delete DPoP session: {e}")))?; - let del_key_sql = adapt_sql("DELETE FROM dpop_keys WHERE id = ?", backend); + let del_key_sql = adapt_sql("DELETE FROM happyview_dpop_keys WHERE id = ?", backend); sqlx::query(&del_key_sql) .bind(dpop_key_id) .execute(pool) @@ -254,7 +254,7 @@ user_did: &str, ) -> Result<(), AppError> { let key_ids_sql = adapt_sql( - "SELECT dpop_key_id FROM dpop_sessions WHERE api_client_id = ? AND user_did = ?", + "SELECT dpop_key_id FROM happyview_dpop_sessions WHERE api_client_id = ? AND user_did = ?", backend, ); let key_ids: Vec<(String,)> = sqlx::query_as(&key_ids_sql) @@ -265,7 +265,7 @@ .map_err(|e| AppError::Internal(format!("failed to list DPoP sessions: {e}")))?; let del_sessions_sql = adapt_sql( - "DELETE FROM dpop_sessions WHERE api_client_id = ? AND user_did = ?", + "DELETE FROM happyview_dpop_sessions WHERE api_client_id = ? AND user_did = ?", backend, ); sqlx::query(&del_sessions_sql) @@ -275,7 +275,7 @@ .await .map_err(|e| AppError::Internal(format!("failed to delete DPoP sessions: {e}")))?; - let del_key_sql = adapt_sql("DELETE FROM dpop_keys WHERE id = ?", backend); + let del_key_sql = adapt_sql("DELETE FROM happyview_dpop_keys WHERE id = ?", backend); for (key_id,) in key_ids { let _ = sqlx::query(&del_key_sql).bind(&key_id).execute(pool).await; } @@ -291,7 +291,7 @@ user_did: &str, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT id, dpop_key_id, scopes, created_at, updated_at FROM dpop_sessions WHERE api_client_id = ? AND user_did = ?", + "SELECT id, dpop_key_id, scopes, created_at, updated_at FROM happyview_dpop_sessions WHERE api_client_id = ? AND user_did = ?", backend, ); @@ -327,7 +327,7 @@ user_did: &str, ) -> Result { let sql = adapt_sql( - "SELECT id, dpop_key_id, access_token_enc, refresh_token_enc, token_expires_at, scopes, pds_url, issuer FROM dpop_sessions WHERE api_client_id = ? AND user_did = ? LIMIT 1", + "SELECT id, dpop_key_id, access_token_enc, refresh_token_enc, token_expires_at, scopes, pds_url, issuer FROM happyview_dpop_sessions WHERE api_client_id = ? AND user_did = ? LIMIT 1", backend, ); @@ -389,7 +389,7 @@ user_did: &str, ) -> Result { let lookup_sql = adapt_sql( - "SELECT dpop_key_id FROM dpop_sessions WHERE id = ? AND api_client_id = ? AND user_did = ?", + "SELECT dpop_key_id FROM happyview_dpop_sessions WHERE id = ? AND api_client_id = ? AND user_did = ?", backend, ); let row: Option<(String,)> = sqlx::query_as(&lookup_sql) @@ -402,14 +402,14 @@ let (dpop_key_id,) = row.ok_or_else(|| AppError::NotFound("DPoP session not found".into()))?; - let del_session_sql = adapt_sql("DELETE FROM dpop_sessions WHERE id = ?", backend); + let del_session_sql = adapt_sql("DELETE FROM happyview_dpop_sessions WHERE id = ?", backend); sqlx::query(&del_session_sql) .bind(session_id) .execute(pool) .await .map_err(|e| AppError::Internal(format!("failed to delete DPoP session: {e}")))?; - let del_key_sql = adapt_sql("DELETE FROM dpop_keys WHERE id = ?", backend); + let del_key_sql = adapt_sql("DELETE FROM happyview_dpop_keys WHERE id = ?", backend); sqlx::query(&del_key_sql) .bind(&dpop_key_id) .execute(pool) diff --git a/src/plugin/attestation.rs b/src/plugin/attestation.rs --- a/src/plugin/attestation.rs +++ b/src/plugin/attestation.rs @@ -362,7 +362,10 @@ let default_sig_type = "games.gamesgamesgamesgames.attestation".to_string(); // 2. Try loading from instance_settings - let sql = adapt_sql("SELECT value FROM instance_settings WHERE key = ?", backend); + let sql = adapt_sql( + "SELECT value FROM happyview_instance_settings WHERE key = ?", + backend, + ); let existing: Option<(String,)> = sqlx::query_as(&sql) .bind("attestation_private_key") .fetch_optional(db) @@ -404,7 +407,7 @@ }; let upsert_sql = adapt_sql( - "INSERT INTO instance_settings (key, value, updated_at) VALUES (?, ?, ?) \ + "INSERT INTO happyview_instance_settings (key, value, updated_at) VALUES (?, ?, ?) \ ON CONFLICT (key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at", backend, ); @@ -596,7 +599,7 @@ .await .unwrap(); sqlx::query( - "CREATE TABLE instance_settings (key TEXT PRIMARY KEY, value TEXT NOT NULL, updated_at TEXT NOT NULL DEFAULT '')", + "CREATE TABLE happyview_instance_settings (key TEXT PRIMARY KEY, value TEXT NOT NULL, updated_at TEXT NOT NULL DEFAULT '')", ) .execute(&pool) .await @@ -635,7 +638,7 @@ .await .unwrap(); sqlx::query( - "CREATE TABLE instance_settings (key TEXT PRIMARY KEY, value TEXT NOT NULL, updated_at TEXT NOT NULL DEFAULT '')", + "CREATE TABLE happyview_instance_settings (key TEXT PRIMARY KEY, value TEXT NOT NULL, updated_at TEXT NOT NULL DEFAULT '')", ) .execute(&pool) .await diff --git a/src/plugin/mod.rs b/src/plugin/mod.rs --- a/src/plugin/mod.rs +++ b/src/plugin/mod.rs @@ -81,7 +81,7 @@ let now = now_rfc3339(); let sql = adapt_sql( - "INSERT INTO plugins (id, source, url, sha256, enabled, loaded_at, api_version, manifest) + "INSERT INTO happyview_plugins (id, source, url, sha256, enabled, loaded_at, api_version, manifest) VALUES (?, ?, ?, ?, 1, ?, ?, ?) ON CONFLICT (id) DO UPDATE SET source = excluded.source, @@ -126,7 +126,7 @@ }; let sql = adapt_sql( - "SELECT id, source, url, sha256 FROM plugins WHERE enabled = true", + "SELECT id, source, url, sha256 FROM happyview_plugins WHERE enabled = true", self.db_backend, ); diff --git a/src/plugin/sync.rs b/src/plugin/sync.rs --- a/src/plugin/sync.rs +++ b/src/plugin/sync.rs @@ -225,7 +225,7 @@ let sql = adapt_sql( &format!( - "SELECT uri, cid FROM records WHERE collection = 'games.gamesgamesgamesgames.game' AND {} = ? LIMIT 1", + "SELECT uri, cid FROM happyview_records WHERE collection = 'games.gamesgamesgamesgames.game' AND {} = ? LIMIT 1", json_path ), backend, diff --git a/src/repo/session.rs b/src/repo/session.rs --- a/src/repo/session.rs +++ b/src/repo/session.rs @@ -12,7 +12,7 @@ client_key: &str, ) -> Result { let sql = adapt_sql( - "SELECT id FROM api_clients WHERE client_key = ? AND is_active = 1", + "SELECT id FROM happyview_api_clients WHERE client_key = ? AND is_active = 1", state.db_backend, ); diff --git a/src/spaces/auth.rs b/src/spaces/auth.rs --- a/src/spaces/auth.rs +++ b/src/spaces/auth.rs @@ -97,7 +97,7 @@ space: &Space, ) -> Result { let sql = adapt_sql( - "SELECT signing_key_enc FROM space_dids WHERE space_id = ?", + "SELECT signing_key_enc FROM happyview_space_dids WHERE space_id = ?", backend, ); let row: Option<(Vec,)> = sqlx::query_as(&sql) @@ -129,7 +129,7 @@ let now = now_rfc3339(); let insert_sql = adapt_sql( - "INSERT INTO space_dids (id, did, space_id, signing_key_enc, rotation_key_enc, created_by, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", + "INSERT INTO happyview_space_dids (id, did, space_id, signing_key_enc, rotation_key_enc, created_by, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", backend, ); @@ -198,7 +198,7 @@ .unwrap_or_default(); let sql = adapt_sql( - "INSERT INTO space_credentials (id, space_id, issued_to, token_hash, expires_at, created_at) VALUES (?, ?, ?, ?, ?, ?)", + "INSERT INTO happyview_space_credentials (id, space_id, issued_to, token_hash, expires_at, created_at) VALUES (?, ?, ?, ?, ?, ?)", backend, ); diff --git a/src/spaces/db.rs b/src/spaces/db.rs --- a/src/spaces/db.rs +++ b/src/spaces/db.rs @@ -24,7 +24,7 @@ .map(|v| serde_json::to_string(v).unwrap_or_default()); let sql = adapt_sql( - "INSERT INTO spaces (id, did, owner_did, type_nsid, skey, display_name, description, access_mode, app_allowlist, app_denylist, managing_app_did, config, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", + "INSERT INTO happyview_spaces (id, did, owner_did, type_nsid, skey, display_name, description, access_mode, app_allowlist, app_denylist, managing_app_did, config, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", backend, ); @@ -56,7 +56,7 @@ id: &str, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT id, did, owner_did, type_nsid, skey, display_name, description, access_mode, app_allowlist, app_denylist, managing_app_did, config, revision, created_at, updated_at FROM spaces WHERE id = ?", + "SELECT id, did, owner_did, type_nsid, skey, display_name, description, access_mode, app_allowlist, app_denylist, managing_app_did, config, revision, created_at, updated_at FROM happyview_spaces WHERE id = ?", backend, ); @@ -77,7 +77,7 @@ skey: &str, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT id, did, owner_did, type_nsid, skey, display_name, description, access_mode, app_allowlist, app_denylist, managing_app_did, config, revision, created_at, updated_at FROM spaces WHERE did = ? AND type_nsid = ? AND skey = ?", + "SELECT id, did, owner_did, type_nsid, skey, display_name, description, access_mode, app_allowlist, app_denylist, managing_app_did, config, revision, created_at, updated_at FROM happyview_spaces WHERE did = ? AND type_nsid = ? AND skey = ?", backend, ); @@ -98,7 +98,7 @@ owner_did: &str, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT id, did, owner_did, type_nsid, skey, display_name, description, access_mode, app_allowlist, app_denylist, managing_app_did, config, revision, created_at, updated_at FROM spaces WHERE owner_did = ? ORDER BY created_at DESC", + "SELECT id, did, owner_did, type_nsid, skey, display_name, description, access_mode, app_allowlist, app_denylist, managing_app_did, config, revision, created_at, updated_at FROM happyview_spaces WHERE owner_did = ? ORDER BY created_at DESC", backend, ); @@ -128,12 +128,12 @@ let sql = if decoded_cursor.is_some() { adapt_sql( - "SELECT s.did, s.owner_did, s.type_nsid, s.skey, sm.created_at FROM space_members sm JOIN spaces s ON s.id = sm.space_id WHERE sm.member_did = ? AND (sm.created_at > ? OR (sm.created_at = ? AND ('ats://' || s.did || '/' || s.type_nsid || '/' || s.skey) > ?)) ORDER BY sm.created_at ASC, ('ats://' || s.did || '/' || s.type_nsid || '/' || s.skey) ASC LIMIT ?", + "SELECT s.did, s.owner_did, s.type_nsid, s.skey, sm.created_at FROM happyview_space_members sm JOIN happyview_spaces s ON s.id = sm.space_id WHERE sm.member_did = ? AND (sm.created_at > ? OR (sm.created_at = ? AND ('ats://' || s.did || '/' || s.type_nsid || '/' || s.skey) > ?)) ORDER BY sm.created_at ASC, ('ats://' || s.did || '/' || s.type_nsid || '/' || s.skey) ASC LIMIT ?", backend, ) } else { adapt_sql( - "SELECT s.did, s.owner_did, s.type_nsid, s.skey, sm.created_at FROM space_members sm JOIN spaces s ON s.id = sm.space_id WHERE sm.member_did = ? ORDER BY sm.created_at ASC, ('ats://' || s.did || '/' || s.type_nsid || '/' || s.skey) ASC LIMIT ?", + "SELECT s.did, s.owner_did, s.type_nsid, s.skey, sm.created_at FROM happyview_space_members sm JOIN happyview_spaces s ON s.id = sm.space_id WHERE sm.member_did = ? ORDER BY sm.created_at ASC, ('ats://' || s.did || '/' || s.type_nsid || '/' || s.skey) ASC LIMIT ?", backend, ) }; @@ -187,7 +187,7 @@ .map(|v| serde_json::to_string(v).unwrap_or_default()); let sql = adapt_sql( - "UPDATE spaces SET display_name = ?, description = ?, access_mode = ?, app_allowlist = ?, app_denylist = ?, managing_app_did = ?, config = ?, updated_at = ? WHERE id = ?", + "UPDATE happyview_spaces SET display_name = ?, description = ?, access_mode = ?, app_allowlist = ?, app_denylist = ?, managing_app_did = ?, config = ?, updated_at = ? WHERE id = ?", backend, ); @@ -213,7 +213,7 @@ backend: DatabaseBackend, id: &str, ) -> Result { - let sql = adapt_sql("DELETE FROM spaces WHERE id = ?", backend); + let sql = adapt_sql("DELETE FROM happyview_spaces WHERE id = ?", backend); let result = sqlx::query(&sql) .bind(id) @@ -288,7 +288,7 @@ ) -> Result<(), AppError> { let now = now_rfc3339(); let sql = adapt_sql( - "INSERT INTO space_members (id, space_id, member_did, access, is_delegation, granted_by, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", + "INSERT INTO happyview_space_members (id, space_id, member_did, access, is_delegation, granted_by, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", backend, ); @@ -314,7 +314,7 @@ did: &str, ) -> Result { let sql = adapt_sql( - "DELETE FROM space_members WHERE space_id = ? AND member_did = ?", + "DELETE FROM happyview_space_members WHERE space_id = ? AND member_did = ?", backend, ); @@ -335,7 +335,7 @@ did: &str, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT id, space_id, member_did, access, is_delegation, granted_by, created_at FROM space_members WHERE space_id = ? AND member_did = ?", + "SELECT id, space_id, member_did, access, is_delegation, granted_by, created_at FROM happyview_space_members WHERE space_id = ? AND member_did = ?", backend, ); @@ -355,7 +355,7 @@ space_id: &str, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT id, space_id, member_did, access, is_delegation, granted_by, created_at FROM space_members WHERE space_id = ? ORDER BY created_at ASC", + "SELECT id, space_id, member_did, access, is_delegation, granted_by, created_at FROM happyview_space_members WHERE space_id = ? ORDER BY created_at ASC", backend, ); @@ -374,7 +374,7 @@ did: &str, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT id, space_id, member_did, access, is_delegation, granted_by, created_at FROM space_members WHERE member_did = ? ORDER BY created_at ASC", + "SELECT id, space_id, member_did, access, is_delegation, granted_by, created_at FROM happyview_space_members WHERE member_did = ? ORDER BY created_at ASC", backend, ); @@ -419,10 +419,10 @@ let sql = match backend { DatabaseBackend::Sqlite => { - "INSERT OR REPLACE INTO space_records (uri, space_id, author_did, collection, rkey, record, cid, indexed_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)".to_string() + "INSERT OR REPLACE INTO happyview_space_records (uri, space_id, author_did, collection, rkey, record, cid, indexed_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)".to_string() } DatabaseBackend::Postgres => adapt_sql( - "INSERT INTO space_records (uri, space_id, author_did, collection, rkey, record, cid, indexed_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT (uri) DO UPDATE SET record = EXCLUDED.record, cid = EXCLUDED.cid, indexed_at = EXCLUDED.indexed_at", + "INSERT INTO happyview_space_records (uri, space_id, author_did, collection, rkey, record, cid, indexed_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT (uri) DO UPDATE SET record = EXCLUDED.record, cid = EXCLUDED.cid, indexed_at = EXCLUDED.indexed_at", backend, ), }; @@ -449,7 +449,7 @@ uri: &str, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT uri, space_id, author_did, collection, rkey, record, cid, indexed_at FROM space_records WHERE uri = ?", + "SELECT uri, space_id, author_did, collection, rkey, record, cid, indexed_at FROM happyview_space_records WHERE uri = ?", backend, ); @@ -470,7 +470,7 @@ rkey: &str, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT uri, space_id, author_did, collection, rkey, record, cid, indexed_at FROM space_records WHERE space_id = ? AND collection = ? AND rkey = ? LIMIT 1", + "SELECT uri, space_id, author_did, collection, rkey, record, cid, indexed_at FROM happyview_space_records WHERE space_id = ? AND collection = ? AND rkey = ? LIMIT 1", backend, ); @@ -514,7 +514,7 @@ let where_clause = conditions.join(" AND "); let raw = format!( - "SELECT uri, space_id, author_did, collection, rkey, record, cid, indexed_at FROM space_records WHERE {} ORDER BY indexed_at {}, uri {} LIMIT ?", + "SELECT uri, space_id, author_did, collection, rkey, record, cid, indexed_at FROM happyview_space_records WHERE {} ORDER BY indexed_at {}, uri {} LIMIT ?", where_clause, order, order ); let sql = adapt_sql(&raw, backend); @@ -560,7 +560,7 @@ .map_err(|e| AppError::Internal(format!("failed to serialize record: {e}")))?; let sql = adapt_sql( - "INSERT INTO space_records (uri, space_id, author_did, collection, rkey, record, cid, indexed_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", + "INSERT INTO happyview_space_records (uri, space_id, author_did, collection, rkey, record, cid, indexed_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", backend, ); @@ -598,7 +598,7 @@ .map_err(|e| AppError::Internal(format!("failed to serialize record: {e}")))?; let sql = adapt_sql( - "UPDATE space_records SET record = ?, cid = ?, indexed_at = ? WHERE uri = ? AND cid = ?", + "UPDATE happyview_space_records SET record = ?, cid = ?, indexed_at = ? WHERE uri = ? AND cid = ?", backend, ); @@ -628,7 +628,7 @@ backend: DatabaseBackend, uri: &str, ) -> Result { - let sql = adapt_sql("DELETE FROM space_records WHERE uri = ?", backend); + let sql = adapt_sql("DELETE FROM happyview_space_records WHERE uri = ?", backend); let result = sqlx::query(&sql) .bind(uri) @@ -646,7 +646,7 @@ swap_cid: &str, ) -> Result { let sql = adapt_sql( - "DELETE FROM space_records WHERE uri = ? AND cid = ?", + "DELETE FROM happyview_space_records WHERE uri = ? AND cid = ?", backend, ); @@ -676,7 +676,7 @@ ) -> Result<(), AppError> { let now = now_rfc3339(); let sql = adapt_sql( - "UPDATE spaces SET revision = ?, updated_at = ? WHERE id = ?", + "UPDATE happyview_spaces SET revision = ?, updated_at = ? WHERE id = ?", backend, ); @@ -729,7 +729,7 @@ ) -> Result<(), AppError> { let now = now_rfc3339(); let sql = adapt_sql( - "INSERT INTO space_invites (id, space_id, token_hash, created_by, access, max_uses, uses, expires_at, revoked, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", + "INSERT INTO happyview_space_invites (id, space_id, token_hash, created_by, access, max_uses, uses, expires_at, revoked, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", backend, ); @@ -757,7 +757,7 @@ token_hash: &str, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT id, space_id, token_hash, created_by, access, max_uses, uses, expires_at, revoked, created_at FROM space_invites WHERE token_hash = ?", + "SELECT id, space_id, token_hash, created_by, access, max_uses, uses, expires_at, revoked, created_at FROM happyview_space_invites WHERE token_hash = ?", backend, ); @@ -776,7 +776,7 @@ invite_id: &str, ) -> Result<(), AppError> { let sql = adapt_sql( - "UPDATE space_invites SET uses = uses + 1 WHERE id = ?", + "UPDATE happyview_space_invites SET uses = uses + 1 WHERE id = ?", backend, ); @@ -794,7 +794,10 @@ backend: DatabaseBackend, invite_id: &str, ) -> Result { - let sql = adapt_sql("UPDATE space_invites SET revoked = 1 WHERE id = ?", backend); + let sql = adapt_sql( + "UPDATE happyview_space_invites SET revoked = 1 WHERE id = ?", + backend, + ); let result = sqlx::query(&sql) .bind(invite_id) @@ -811,7 +814,7 @@ space_id: &str, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT id, space_id, token_hash, created_by, access, max_uses, uses, expires_at, revoked, created_at FROM space_invites WHERE space_id = ? ORDER BY created_at DESC", + "SELECT id, space_id, token_hash, created_by, access, max_uses, uses, expires_at, revoked, created_at FROM happyview_space_invites WHERE space_id = ? ORDER BY created_at DESC", backend, ); diff --git a/src/spaces/routes.rs b/src/spaces/routes.rs --- a/src/spaces/routes.rs +++ b/src/spaces/routes.rs @@ -324,7 +324,10 @@ if space.owner_did == did { return Ok(()); } - let sql = adapt_sql("SELECT is_super FROM users WHERE did = ?", state.db_backend); + let sql = adapt_sql( + "SELECT is_super FROM happyview_users WHERE did = ?", + state.db_backend, + ); let row: Option<(i32,)> = sqlx::query_as(&sql) .bind(did) .fetch_optional(&state.db) diff --git a/src/xrpc/procedure.rs b/src/xrpc/procedure.rs --- a/src/xrpc/procedure.rs +++ b/src/xrpc/procedure.rs @@ -59,7 +59,7 @@ // Check token scope against outbound XRPCs declared by the script let outbound_sql = adapt_sql( - "SELECT outbound_xrpcs FROM scripts WHERE id = ?", + "SELECT outbound_xrpcs FROM happyview_scripts WHERE id = ?", state.db_backend, ); if let Ok(Some((Some(json_str),))) = sqlx::query_as::<_, (Option,)>(&outbound_sql) @@ -246,7 +246,7 @@ let record_str = serde_json::to_string(&record).unwrap_or_default(); let sql = adapt_sql( r#" - INSERT INTO records (uri, did, collection, rkey, record, cid, created_at) + INSERT INTO happyview_records (uri, did, collection, rkey, record, cid, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) ON CONFLICT (uri) DO UPDATE SET record = EXCLUDED.record, @@ -334,7 +334,7 @@ let now = now_rfc3339(); let sql = adapt_sql( r#" - INSERT INTO records (uri, did, collection, rkey, record, cid, created_at) + INSERT INTO happyview_records (uri, did, collection, rkey, record, cid, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) ON CONFLICT (uri) DO UPDATE SET record = EXCLUDED.record, @@ -401,7 +401,7 @@ .map_err(|e| AppError::Internal(format!("failed to read PDS response: {e}")))?; let backend = state.db_backend; - let sql = adapt_sql("DELETE FROM records WHERE uri = ?", backend); + let sql = adapt_sql("DELETE FROM happyview_records WHERE uri = ?", backend); let _ = sqlx::query(&sql).bind(uri).execute(&state.db).await; Ok(( diff --git a/src/xrpc/query.rs b/src/xrpc/query.rs --- a/src/xrpc/query.rs +++ b/src/xrpc/query.rs @@ -66,7 +66,7 @@ let rows: Vec<(String, String, String)> = if let Some(did) = did { let sql = adapt_sql( - "SELECT uri, did, record FROM records WHERE collection = ? AND did = ? ORDER BY indexed_at DESC LIMIT ? OFFSET ?", + "SELECT uri, did, record FROM happyview_records WHERE collection = ? AND did = ? ORDER BY indexed_at DESC LIMIT ? OFFSET ?", backend, ); sqlx::query_as(&sql) @@ -79,7 +79,7 @@ .map_err(|e| AppError::Internal(format!("DB query failed: {e}")))? } else { let sql = adapt_sql( - "SELECT uri, did, record FROM records WHERE collection = ? ORDER BY indexed_at DESC LIMIT ? OFFSET ?", + "SELECT uri, did, record FROM happyview_records WHERE collection = ? ORDER BY indexed_at DESC LIMIT ? OFFSET ?", backend, ); sqlx::query_as(&sql) @@ -118,7 +118,10 @@ pub(super) async fn handle_get_record(state: &AppState, uri: &str) -> Result { let backend = state.db_backend; - let sql = adapt_sql("SELECT record FROM records WHERE uri = ?", backend); + let sql = adapt_sql( + "SELECT record FROM happyview_records WHERE uri = ?", + backend, + ); let row: Option<(String,)> = sqlx::query_as(&sql) .bind(uri) .fetch_optional(&state.db) diff --git a/tests/common/app.rs b/tests/common/app.rs --- a/tests/common/app.rs +++ b/tests/common/app.rs @@ -70,7 +70,7 @@ }; let sql = adapt_sql( - "INSERT INTO users (id, did, is_super, created_at) VALUES (?, ?, ?, ?) ON CONFLICT DO NOTHING", + "INSERT INTO happyview_users (id, did, is_super, created_at) VALUES (?, ?, ?, ?) ON CONFLICT DO NOTHING", backend, ); sqlx::query(&sql) @@ -245,7 +245,7 @@ .map(|o| serde_json::to_string(o).unwrap_or_else(|_| "[]".to_string())); let sql = adapt_sql( - "INSERT INTO api_clients (id, client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, client_type, allowed_origins, is_active, created_by, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?)", + "INSERT INTO happyview_api_clients (id, client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, client_type, allowed_origins, is_active, created_by, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?)", self.state.db_backend, ); diff --git a/tests/common/db.rs b/tests/common/db.rs --- a/tests/common/db.rs +++ b/tests/common/db.rs @@ -48,7 +48,7 @@ match backend { DatabaseBackend::Postgres => { sqlx::query( - "TRUNCATE records, lexicons, backfill_jobs, users, user_permissions, api_keys, event_logs, script_variables, scripts, dead_letter_scripts, dead_letter_hooks, record_refs, labeler_subscriptions, labels, instance_settings, domains, dpop_sessions, dpop_keys, api_clients, delegated_accounts, account_delegates, service_identity, service_entries, service_entry_xrpcs RESTART IDENTITY CASCADE", + "TRUNCATE happyview_records, happyview_lexicons, happyview_backfill_jobs, happyview_users, happyview_user_permissions, happyview_api_keys, happyview_event_logs, happyview_script_variables, happyview_scripts, happyview_dead_letter_scripts, happyview_dead_letter_hooks, happyview_record_refs, happyview_labeler_subscriptions, happyview_labels, happyview_instance_settings, happyview_domains, happyview_dpop_sessions, happyview_dpop_keys, happyview_api_clients, happyview_delegated_accounts, happyview_account_delegates, happyview_service_identity, happyview_service_entries, happyview_service_entry_xrpcs RESTART IDENTITY CASCADE", ) .execute(pool) .await @@ -56,30 +56,30 @@ } DatabaseBackend::Sqlite => { let tables = [ - "service_entry_xrpcs", - "service_entries", - "service_identity", - "account_delegates", - "delegated_accounts", - "dpop_sessions", - "dpop_keys", - "api_clients", - "records", - "lexicons", - "backfill_jobs", - "users", - "user_permissions", - "api_keys", - "event_logs", - "script_variables", - "scripts", - "dead_letter_scripts", - "dead_letter_hooks", - "record_refs", - "labeler_subscriptions", - "labels", - "instance_settings", - "domains", + "happyview_service_entry_xrpcs", + "happyview_service_entries", + "happyview_service_identity", + "happyview_account_delegates", + "happyview_delegated_accounts", + "happyview_dpop_sessions", + "happyview_dpop_keys", + "happyview_api_clients", + "happyview_records", + "happyview_lexicons", + "happyview_backfill_jobs", + "happyview_users", + "happyview_user_permissions", + "happyview_api_keys", + "happyview_event_logs", + "happyview_script_variables", + "happyview_scripts", + "happyview_dead_letter_scripts", + "happyview_dead_letter_hooks", + "happyview_record_refs", + "happyview_labeler_subscriptions", + "happyview_labels", + "happyview_instance_settings", + "happyview_domains", ]; for table in tables { sqlx::query(&format!("DELETE FROM {table}")) diff --git a/src/plugin/host/kv.rs b/src/plugin/host/kv.rs --- a/src/plugin/host/kv.rs +++ b/src/plugin/host/kv.rs @@ -11,7 +11,7 @@ pub async fn kv_get(ctx: &HostContext, key: &str) -> Result>, KvError> { let sql = adapt_sql( - "SELECT value FROM plugin_kv + "SELECT value FROM happyview_plugin_kv WHERE plugin_id = ? AND scope = ? AND key = ? AND (expires_at IS NULL OR expires_at > datetime('now'))", ctx.db_backend, @@ -45,7 +45,7 @@ // Upsert let sql = adapt_sql( - "INSERT INTO plugin_kv (plugin_id, scope, key, value, expires_at, created_at) + "INSERT INTO happyview_plugin_kv (plugin_id, scope, key, value, expires_at, created_at) VALUES (?, ?, ?, ?, ?, datetime('now')) ON CONFLICT (plugin_id, scope, key) DO UPDATE SET value = excluded.value, expires_at = excluded.expires_at", @@ -66,7 +66,7 @@ pub async fn kv_delete(ctx: &HostContext, key: &str) -> Result<(), KvError> { let sql = adapt_sql( - "DELETE FROM plugin_kv WHERE plugin_id = ? AND scope = ? AND key = ?", + "DELETE FROM happyview_plugin_kv WHERE plugin_id = ? AND scope = ? AND key = ?", ctx.db_backend, ); diff --git a/src/plugin/host/lookup.rs b/src/plugin/host/lookup.rs --- a/src/plugin/host/lookup.rs +++ b/src/plugin/host/lookup.rs @@ -40,7 +40,7 @@ let json_path = format!("$.{}", external_id_field); let sql = adapt_sql( - "SELECT uri, cid FROM records + "SELECT uri, cid FROM happyview_records WHERE collection = ? AND json_extract(record, ?) = ? LIMIT 1", diff --git a/web/tests/e2e/auth-helper.ts b/web/tests/e2e/auth-helper.ts --- a/web/tests/e2e/auth-helper.ts +++ b/web/tests/e2e/auth-helper.ts @@ -52,7 +52,7 @@ const id = "e2e-test-user-id" const now = new Date().toISOString() await client.query( - `INSERT INTO users (id, did, is_super, created_at) + `INSERT INTO happyview_users (id, did, is_super, created_at) VALUES ($1, $2, 1, $3) ON CONFLICT (did) DO NOTHING`, [id, did, now], @@ -66,7 +66,7 @@ const client = new pg.Client(DB_URL) await client.connect() try { - await client.query("DELETE FROM service_identity") + await client.query("DELETE FROM happyview_service_identity") } finally { await client.end() } @@ -81,7 +81,7 @@ try { const now = new Date().toISOString() await client.query( - `INSERT INTO service_identity (id, mode, did, attached_account_did, setup_complete, created_at, updated_at) + `INSERT INTO happyview_service_identity (id, mode, did, attached_account_did, setup_complete, created_at, updated_at) VALUES (1, $1, $2, $3, TRUE, $4, $4) ON CONFLICT (id) DO UPDATE SET mode = $1, diff --git a/web/tests/e2e/record-delete.spec.ts b/web/tests/e2e/record-delete.spec.ts --- a/web/tests/e2e/record-delete.spec.ts +++ b/web/tests/e2e/record-delete.spec.ts @@ -42,7 +42,7 @@ const uri = `at://did:plc:e2e-test-admin/${COLLECTION}/record-${i}` const now = new Date().toISOString() await client.query( - `INSERT INTO records (uri, did, collection, rkey, record, cid, indexed_at, created_at) + `INSERT INTO happyview_records (uri, did, collection, rkey, record, cid, indexed_at, created_at) VALUES ($1, $2, $3, $4, $5, $6, $7, $8) ON CONFLICT (uri) DO NOTHING`, [ @@ -68,7 +68,7 @@ const client = new pg.Client(DB_URL) await client.connect() try { - await client.query("DELETE FROM records WHERE collection = $1", [COLLECTION]) + await client.query("DELETE FROM happyview_records WHERE collection = $1", [COLLECTION]) } finally { await client.end() } -- tangled.sh