fix primary key specifier

This commit is contained in:
Namekuji 2023-06-01 04:06:31 -04:00
parent 98f2397fbb
commit d28f74b513
No known key found for this signature in database
GPG Key ID: B541BD6E646CABC7
1 changed files with 64 additions and 40 deletions

View File

@ -1,7 +1,7 @@
use model::entity::{ use model::entity::{
access_token, antenna, app, emoji, gallery_post, hashtag, messaging_message, meta, access_token, antenna, app, emoji, gallery_post, hashtag, messaging_message, meta,
newtype::{I32Vec, StringVec}, newtype::{I32Vec, StringVec},
note, note_edit, poll, registry_item, user, user_profile, webhook, note, note_edit, page, poll, registry_item, user, user_profile, webhook,
}; };
use sea_orm_migration::{ use sea_orm_migration::{
prelude::*, prelude::*,
@ -181,37 +181,13 @@ impl MigrationTrait for Migration {
note_edit, note_edit,
file_ids file_ids
); );
convert_to_stringvec_json!(
// Convert poll here because its primary key is not id, but note_id. Page::Table,
let query = select_query(Poll::Table, Poll::NoteId, Poll::Choices); Page::Id,
let res = get_vec::<Vec<String>>(db, query).await?; Page::VisibleUserIds,
convert_col(manager, Poll::Table, Poll::Choices).await?; page,
let poll_models: Vec<poll::ActiveModel> = res visible_user_ids
.iter() );
.map(|(id, r)| poll::ActiveModel {
note_id: sea_orm::Set(id.to_owned()),
choices: sea_orm::Set(StringVec::from(r.to_owned())),
..Default::default()
})
.collect();
for model in poll_models {
poll::Entity::update(model).exec(db).await?;
}
let query = select_query(Poll::Table, Poll::NoteId, Poll::Votes);
let res = get_vec::<Vec<i32>>(db, query).await?;
convert_col(manager, Poll::Table, Poll::Votes).await?;
let poll_models: Vec<poll::ActiveModel> = res
.iter()
.map(|(id, r)| poll::ActiveModel {
note_id: sea_orm::Set(id.to_owned()),
votes: sea_orm::Set(I32Vec::from(r.to_owned())),
..Default::default()
})
.collect();
for model in poll_models {
poll::Entity::update(model).exec(db).await?;
}
convert_to_stringvec_json!( convert_to_stringvec_json!(
RegistryItem::Table, RegistryItem::Table,
RegistryItem::Id, RegistryItem::Id,
@ -221,15 +197,63 @@ impl MigrationTrait for Migration {
); );
convert_to_stringvec_json!(User::Table, User::Id, User::Tags, user, tags); convert_to_stringvec_json!(User::Table, User::Id, User::Tags, user, tags);
convert_to_stringvec_json!(User::Table, User::Id, User::Emojis, user, emojis); convert_to_stringvec_json!(User::Table, User::Id, User::Emojis, user, emojis);
convert_to_stringvec_json!(
UserProfile::Table,
UserProfile::Id,
UserProfile::MutingNotificationTypes,
user_profile,
muting_notification_types
);
convert_to_stringvec_json!(Webhook::Table, Webhook::Id, Webhook::On, webhook, on); convert_to_stringvec_json!(Webhook::Table, Webhook::Id, Webhook::On, webhook, on);
// Convert poll here because its primary key is not id, but note_id.
let query = select_query(Poll::Table, Poll::NoteId, Poll::Choices);
let res = get_vec::<Vec<String>>(db, query).await?;
convert_col(manager, Poll::Table, Poll::Choices).await?;
let models: Vec<poll::ActiveModel> = res
.iter()
.map(|(id, r)| poll::ActiveModel {
note_id: sea_orm::Set(id.to_owned()),
choices: sea_orm::Set(StringVec::from(r.to_owned())),
..Default::default()
})
.collect();
for model in models {
poll::Entity::update(model).exec(db).await?;
}
let query = select_query(Poll::Table, Poll::NoteId, Poll::Votes);
let res = get_vec::<Vec<i32>>(db, query).await?;
convert_col(manager, Poll::Table, Poll::Votes).await?;
let models: Vec<poll::ActiveModel> = res
.iter()
.map(|(id, r)| poll::ActiveModel {
note_id: sea_orm::Set(id.to_owned()),
votes: sea_orm::Set(I32Vec::from(r.to_owned())),
..Default::default()
})
.collect();
for model in models {
poll::Entity::update(model).exec(db).await?;
}
// Convert user_profile here because its primary key is not id, but user_id.
let query = select_query(
UserProfile::Table,
UserProfile::UserId,
UserProfile::MutingNotificationTypes,
);
let res = get_vec::<Vec<String>>(db, query).await?;
convert_col(
manager,
UserProfile::Table,
UserProfile::MutingNotificationTypes,
)
.await?;
let models: Vec<user_profile::ActiveModel> = res
.iter()
.map(|(id, r)| user_profile::ActiveModel {
user_id: sea_orm::Set(id.to_owned()),
muting_notification_types: sea_orm::Set(StringVec::from(r.to_owned())),
..Default::default()
})
.collect();
for model in models {
user_profile::Entity::update(model).exec(db).await?;
}
Ok(()) Ok(())
} }
@ -346,7 +370,7 @@ enum User {
#[derive(Iden, Clone)] #[derive(Iden, Clone)]
enum UserProfile { enum UserProfile {
Table, Table,
Id, UserId,
MutingNotificationTypes, MutingNotificationTypes,
} }
#[derive(Iden, Clone)] #[derive(Iden, Clone)]