use sea_orm_migration::prelude::*; pub struct Migration; impl MigrationName for Migration { fn name(&self) -> &str { "project_message_favorite" } } #[async_trait::async_trait] impl MigrationTrait for Migration { async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { manager .get_connection() .execute_unprepared( r#" create table if not exists project_message_favorite ( uid uuid not null primary key, project uuid not null, room uuid not null, message uuid not null, user_uuid uuid not null, created_at timestamp with time zone not null ); create unique index if not exists idx_project_message_favorite_user_message on project_message_favorite (user_uuid, message); create index if not exists idx_project_message_favorite_project_user on project_message_favorite (project, user_uuid, created_at desc); create index if not exists idx_project_message_favorite_room on project_message_favorite (room); "#, ) .await?; Ok(()) } async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { manager .get_connection() .execute_unprepared( r#" drop index if exists idx_project_message_favorite_room; drop index if exists idx_project_message_favorite_project_user; drop index if exists idx_project_message_favorite_user_message; drop table if exists project_message_favorite; "#, ) .await?; Ok(()) } }