49 lines
1.7 KiB
Rust
49 lines
1.7 KiB
Rust
use sea_orm_migration::prelude::*;
|
|
|
|
#[derive(DeriveMigrationName)]
|
|
pub struct Migration;
|
|
|
|
#[async_trait::async_trait]
|
|
impl MigrationTrait for Migration {
|
|
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
|
// --- Users Table ---
|
|
// Add the tsvector column for users
|
|
manager.get_connection().execute_unprepared(
|
|
"ALTER TABLE \"user\" ADD COLUMN \"search_document\" tsvector \
|
|
GENERATED ALWAYS AS (to_tsvector('english', username || ' ' || coalesce(display_name, ''))) STORED"
|
|
).await?;
|
|
// Add the GIN index for users
|
|
manager.get_connection().execute_unprepared(
|
|
"CREATE INDEX \"user_search_document_idx\" ON \"user\" USING GIN(\"search_document\")"
|
|
).await?;
|
|
|
|
// --- Thoughts Table ---
|
|
// Add the tsvector column for thoughts
|
|
manager
|
|
.get_connection()
|
|
.execute_unprepared(
|
|
"ALTER TABLE \"thought\" ADD COLUMN \"search_document\" tsvector \
|
|
GENERATED ALWAYS AS (to_tsvector('english', content)) STORED",
|
|
)
|
|
.await?;
|
|
// Add the GIN index for thoughts
|
|
manager.get_connection().execute_unprepared(
|
|
"CREATE INDEX \"thought_search_document_idx\" ON \"thought\" USING GIN(\"search_document\")"
|
|
).await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
|
manager
|
|
.get_connection()
|
|
.execute_unprepared("ALTER TABLE \"user\" DROP COLUMN \"search_document\"")
|
|
.await?;
|
|
manager
|
|
.get_connection()
|
|
.execute_unprepared("ALTER TABLE \"thought\" DROP COLUMN \"search_document\"")
|
|
.await?;
|
|
Ok(())
|
|
}
|
|
}
|