Migrate to the new entity format

This commit is contained in:
2025-11-02 11:04:19 -07:00
parent 508c4ed32f
commit c5475585d4
69 changed files with 2815 additions and 4038 deletions
+42 -46
View File
@@ -1,53 +1,40 @@
use seamantic::schema::sqlite_rowid_alias;
use sea_orm::sea_query;
use sea_orm::sea_query::{Index, Table};
use sea_orm::{DbErr, Iden};
use sea_orm_migration::SchemaManager;
use sea_orm_migration::schema::{date, string};
#[derive(Iden)]
pub enum FlixInfoShows {
Table,
Id,
Title,
Tagline,
Overview,
Date,
}
use sea_orm::prelude::*;
use sea_orm::sea_query::Table;
use sea_orm::{ConnectionTrait, DbBackend, Statement};
use sea_orm_migration::prelude::*;
pub async fn up(manager: &SchemaManager<'_>) -> Result<(), DbErr> {
manager
.create_table(
Table::create()
.table(FlixInfoShows::Table)
.col(sqlite_rowid_alias(FlixInfoShows::Id))
.col(string(FlixInfoShows::Title))
.col(string(FlixInfoShows::Tagline))
.col(string(FlixInfoShows::Overview))
.col(date(FlixInfoShows::Date))
.to_owned(),
)
.drop_table(Table::drop().table("flix_watched_shows").to_owned())
.await?;
manager
.create_index(
Index::create()
.name("idx-flix_info_shows-title")
.table(FlixInfoShows::Table)
.col(FlixInfoShows::Title)
.to_owned(),
)
.await?;
manager
.create_index(
Index::create()
.name("idx-flix_info_shows-date")
.table(FlixInfoShows::Table)
.col(FlixInfoShows::Date)
.to_owned(),
)
.get_connection()
.execute_raw(Statement::from_string(
DbBackend::Sqlite,
r#"
CREATE VIEW flix_watched_shows AS
SELECT
w.show_id as id,
w.user_id,
MAX(w.watched_date) AS watched_date
FROM flix_watched_seasons w
WHERE NOT EXISTS (
SELECT 1
FROM flix_seasons s
WHERE s.show_id = w.show_id
AND NOT EXISTS (
SELECT 1
FROM flix_watched_seasons wc
WHERE wc.show_id = s.show_id
AND wc.season_number = s.season_number
AND wc.user_id = w.user_id
)
)
GROUP BY w.show_id, w.user_id
;
"#,
))
.await?;
Ok(())
@@ -55,6 +42,15 @@ pub async fn up(manager: &SchemaManager<'_>) -> Result<(), DbErr> {
pub async fn down(manager: &SchemaManager<'_>) -> Result<(), DbErr> {
manager
.drop_table(Table::drop().table(FlixInfoShows::Table).to_owned())
.await
.get_connection()
.execute_raw(Statement::from_string(
DbBackend::Sqlite,
r#"
DROP VIEW flix_watched_shows
;
"#,
))
.await?;
Ok(())
}