wip refactoring

This commit is contained in:
2026-03-29 10:58:26 +00:00
parent b0968a4f28
commit 97cdbdec0b
4 changed files with 63 additions and 43 deletions
+5 -2
View File
@@ -2,10 +2,13 @@ use std::collections::HashMap;
use entities::{channel, members, messages, server}; use entities::{channel, members, messages, server};
use sea_orm::{ColumnTrait, DatabaseConnection, EntityTrait, QueryFilter, Related}; use sea_orm::{ColumnTrait, DatabaseConnection, EntityTrait, QueryFilter, Related};
use serenity::all::{ use serenity::{
all::{
Color, Command, CommandInteraction, Context, CreateCommand, CreateEmbed, CreateEmbedFooter, Color, Command, CommandInteraction, Context, CreateCommand, CreateEmbed, CreateEmbedFooter,
CreateInteractionResponse, CreateInteractionResponseMessage, Embed, EmbedMessageBuilding, CreateInteractionResponse, CreateInteractionResponseMessage, Embed, EmbedMessageBuilding,
InteractionContext, Message, MessageBuilder, MessageId, ResolvedOption, InteractionContext, Message, MessageBuilder, MessageId, ResolvedOption,
},
model::guild,
}; };
use crate::common::{self, error_msg}; use crate::common::{self, error_msg};
@@ -27,7 +30,7 @@ impl Retrive {
return error_msg(Box::new(e)); return error_msg(Box::new(e));
} }
let server_db_id = server::Model::get_by_discord_id(guild_id, db).await; let server_db_id = server::Model::get_by_discord_id(guild_id, "".into(), db).await;
if let Err(e) = server_db_id { if let Err(e) = server_db_id {
return error_msg(Box::new(e)); return error_msg(Box::new(e));
+8 -38
View File
@@ -15,7 +15,8 @@ pub async fn log_message(
let content = content::Model::get_or_create(msg.content.clone(), db).await?; let content = content::Model::get_or_create(msg.content.clone(), db).await?;
let member = let member =
members::Model::get_or_create(msg.author.id.get().try_into()?, msg.author.name, db).await?; members::Model::get_or_create(msg.author.id.get().try_into()?, msg.clone().author.name, db)
.await?;
let server_id = msg.guild_id.unwrap().get(); let server_id = msg.guild_id.unwrap().get();
let server_id_i32 = server_id.clone() as i64; let server_id_i32 = server_id.clone() as i64;
@@ -28,58 +29,27 @@ pub async fn log_message(
.name .name
.clone(); .clone();
let server_db = entities::server::Entity::find() let server = server::Model::get_or_create(server_id_i32, guild_name, db).await?;
.filter(entities::server::Column::IdDiscord.eq(server_id_i32))
.one(db)
.await
.unwrap();
let server_db = match server_db {
Some(x) => x,
None => {
let activeModel = server::ActiveModel {
id: sea_orm::ActiveValue::NotSet,
name: sea_orm::ActiveValue::Set(guild_name.to_string()),
id_discord: sea_orm::ActiveValue::Set(server_id.clone() as i64),
};
activeModel.insert(db).await.unwrap()
}
};
let channel_id = msg.channel(&ctx.http).await.unwrap().id().get() as i64; let channel_id = msg.channel(&ctx.http).await.unwrap().id().get() as i64;
let channel = entities::channel::Entity::find() let channel = channel::Model::get_or_create(channel_id, db).await?;
.filter(entities::channel::Column::IdDiscord.eq(channel_id))
.one(db)
.await
.unwrap();
let channel = match channel {
Some(x) => x,
None => {
let activeModel = channel::ActiveModel {
id: sea_orm::ActiveValue::NotSet,
id_discord: sea_orm::ActiveValue::Set(channel_id as i64),
};
activeModel.insert(db).await.unwrap()
}
};
println!( println!(
"{}, {}, {}, {}, {}", "{}, {}, {}, {}, {}",
msg.id.get(), msg.id.get(),
member, member,
server.id, server,
content, content,
channel.id channel
); );
let activeModel = messages::ActiveModel { let activeModel = messages::ActiveModel {
id: sea_orm::ActiveValue::NotSet, id: sea_orm::ActiveValue::NotSet,
id_discord: sea_orm::ActiveValue::Set(msg.id.get() as i64), id_discord: sea_orm::ActiveValue::Set(msg.id.get() as i64),
id_sender: sea_orm::ActiveValue::Set(member), id_sender: sea_orm::ActiveValue::Set(member),
id_server: sea_orm::ActiveValue::Set(server.id), id_server: sea_orm::ActiveValue::Set(server),
id_content: sea_orm::ActiveValue::Set(content), id_content: sea_orm::ActiveValue::Set(content),
id_channel: sea_orm::ActiveValue::Set(channel.id), id_channel: sea_orm::ActiveValue::Set(channel),
}; };
activeModel.insert(db).await; activeModel.insert(db).await;
Ok(()) Ok(())
+22
View File
@@ -10,6 +10,28 @@ pub struct Model {
pub id_discord: i64, pub id_discord: i64,
} }
impl Model {
pub async fn get_or_create(id: i64, db: &DatabaseConnection) -> Result<i32, DbErr> {
let channel = Entity::find()
.filter(Column::IdDiscord.eq(id))
.one(db)
.await
.unwrap();
let channel = match channel {
Some(x) => x,
None => {
let activeModel = ActiveModel {
id: sea_orm::ActiveValue::NotSet,
id_discord: sea_orm::ActiveValue::Set(id as i64),
};
activeModel.insert(db).await.unwrap()
}
};
Ok(channel.id)
}
}
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
pub enum Relation { pub enum Relation {
#[sea_orm(has_many = "super::messages::Entity")] #[sea_orm(has_many = "super::messages::Entity")]
+25
View File
@@ -15,6 +15,7 @@ pub struct Model {
impl Model { impl Model {
pub async fn get_by_discord_id( pub async fn get_by_discord_id(
id: i64, id: i64,
name: String,
db: &DatabaseConnection, db: &DatabaseConnection,
) -> Result<Option<Model>, DbErr> { ) -> Result<Option<Model>, DbErr> {
let server_db_id = Entity::find() let server_db_id = Entity::find()
@@ -30,6 +31,30 @@ impl Model {
Err(e) => Err(e), Err(e) => Err(e),
} }
} }
pub async fn get_or_create(
id: i64,
name: String,
db: &DatabaseConnection,
) -> Result<i32, DbErr> {
let server_db = Entity::find()
.filter(Column::IdDiscord.eq(id))
.one(db)
.await
.unwrap();
let reply = match server_db {
Some(x) => x.id,
None => {
let activeModel = ActiveModel {
id: sea_orm::ActiveValue::NotSet,
name: sea_orm::ActiveValue::Set(name),
id_discord: sea_orm::ActiveValue::Set(id),
};
activeModel.insert(db).await.unwrap().id
}
};
Ok(reply)
}
} }
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]