fix: fix subscription and mikan doppel

This commit is contained in:
2025-05-11 03:41:02 +08:00
parent 8144986a48
commit 0df371adb7
61 changed files with 10241 additions and 47 deletions

View File

@@ -248,8 +248,15 @@ impl Model {
subscriber_id: ActiveValue::Set(subscriber_id),
..Default::default()
})
.on_conflict_do_nothing()
.exec(db)
.on_conflict(
OnConflict::columns([
subscription_bangumi::Column::SubscriptionId,
subscription_bangumi::Column::BangumiId,
])
.do_nothing()
.to_owned(),
)
.exec_without_returning(db)
.await?;
}
Ok(new_bangumi_model)

View File

@@ -224,6 +224,10 @@ impl Model {
})
.collect::<Result<_, _>>()?;
if new_episode_active_modes.is_empty() {
return Ok(());
}
let new_episode_ids = Entity::insert_many(new_episode_active_modes)
.on_conflict(
OnConflict::columns([Column::MikanEpisodeId, Column::SubscriberId])

View File

@@ -1,5 +1,5 @@
use async_trait::async_trait;
use sea_orm::{ActiveValue, entity::prelude::*};
use sea_orm::{ActiveValue, entity::prelude::*, sea_query::OnConflict};
use serde::{Deserialize, Serialize};
use crate::{app::AppContextTrait, errors::RecorderResult};
@@ -96,15 +96,29 @@ impl Model {
subscription_id: i32,
) -> RecorderResult<()> {
let db = ctx.db();
Entity::insert_many(bangumi_ids.map(|bangumi_id| ActiveModel {
bangumi_id: ActiveValue::Set(bangumi_id),
subscriber_id: ActiveValue::Set(subscriber_id),
subscription_id: ActiveValue::Set(subscription_id),
..Default::default()
}))
.on_conflict_do_nothing()
.exec(db)
.await?;
let active_models = bangumi_ids
.map(|bangumi_id| {
ActiveModel::from_subscription_and_bangumi(
subscriber_id,
subscription_id,
bangumi_id,
)
})
.collect::<Vec<_>>();
if active_models.is_empty() {
return Ok(());
}
Entity::insert_many(active_models)
.on_conflict(
OnConflict::columns([Column::SubscriptionId, Column::BangumiId])
.do_nothing()
.to_owned(),
)
.exec_without_returning(db)
.await?;
Ok(())
}

View File

@@ -1,5 +1,5 @@
use async_trait::async_trait;
use sea_orm::{ActiveValue, entity::prelude::*};
use sea_orm::{ActiveValue, entity::prelude::*, sea_query::OnConflict};
use serde::{Deserialize, Serialize};
use crate::{app::AppContextTrait, errors::RecorderResult};
@@ -81,15 +81,28 @@ impl Model {
subscription_id: i32,
) -> RecorderResult<()> {
let db = ctx.db();
Entity::insert_many(episode_ids.map(|episode_id| ActiveModel {
episode_id: ActiveValue::Set(episode_id),
subscription_id: ActiveValue::Set(subscription_id),
subscriber_id: ActiveValue::Set(subscriber_id),
..Default::default()
}))
.on_conflict_do_nothing()
.exec(db)
.await?;
let active_models = episode_ids
.map(|episode_id| ActiveModel {
episode_id: ActiveValue::Set(episode_id),
subscription_id: ActiveValue::Set(subscription_id),
subscriber_id: ActiveValue::Set(subscriber_id),
..Default::default()
})
.collect::<Vec<_>>();
if active_models.is_empty() {
return Ok(());
}
Entity::insert_many(active_models)
.on_conflict(
OnConflict::columns([Column::SubscriptionId, Column::EpisodeId])
.do_nothing()
.to_owned(),
)
.exec_without_returning(db)
.await?;
Ok(())
}