Skip to content
Clone
26af08e
24 lines 1016 B Rust
use crate::errors::AuthResult;
const USER_PREFIX: &str = "models::users::";
const SPACE_PREFIX: &str = "models::space::";
pub async fn sync_schema(db: &crate::db::DbConn) -> AuthResult<()> {
crate::db::migrate::EntityFirst::new(&[USER_PREFIX, SPACE_PREFIX])
.before([
"DROP TABLE IF EXISTS oauth_refresh_tokens",
"DROP TABLE IF EXISTS oauth_consents",
"DROP TABLE IF EXISTS oauth_clients",
"DROP TABLE IF EXISTS user_access_tokens",
"DROP TABLE IF EXISTS service_token_revocations",
])
.after([
// 邮箱查询一律走 lower(email),表达式唯一索引把大小写变体挡在数据库层。
"CREATE UNIQUE INDEX IF NOT EXISTS auth_users_lower_email_idx ON auth_users (lower(email))",
])
.run(db.write())
.await?;
// 事件 outbox 与业务表一起在启动时建好,relay 随后才能领取。
crate::events::outbox::sync_schema(db.write()).await?;
Ok(())
}