wip refactoring
This commit is contained in:
@@ -2,10 +2,13 @@ use std::collections::HashMap;
|
||||
|
||||
use entities::{channel, members, messages, server};
|
||||
use sea_orm::{ColumnTrait, DatabaseConnection, EntityTrait, QueryFilter, Related};
|
||||
use serenity::all::{
|
||||
Color, Command, CommandInteraction, Context, CreateCommand, CreateEmbed, CreateEmbedFooter,
|
||||
CreateInteractionResponse, CreateInteractionResponseMessage, Embed, EmbedMessageBuilding,
|
||||
InteractionContext, Message, MessageBuilder, MessageId, ResolvedOption,
|
||||
use serenity::{
|
||||
all::{
|
||||
Color, Command, CommandInteraction, Context, CreateCommand, CreateEmbed, CreateEmbedFooter,
|
||||
CreateInteractionResponse, CreateInteractionResponseMessage, Embed, EmbedMessageBuilding,
|
||||
InteractionContext, Message, MessageBuilder, MessageId, ResolvedOption,
|
||||
},
|
||||
model::guild,
|
||||
};
|
||||
|
||||
use crate::common::{self, error_msg};
|
||||
@@ -27,7 +30,7 @@ impl Retrive {
|
||||
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 {
|
||||
return error_msg(Box::new(e));
|
||||
|
||||
@@ -15,7 +15,8 @@ pub async fn log_message(
|
||||
let content = content::Model::get_or_create(msg.content.clone(), db).await?;
|
||||
|
||||
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_i32 = server_id.clone() as i64;
|
||||
@@ -28,58 +29,27 @@ pub async fn log_message(
|
||||
.name
|
||||
.clone();
|
||||
|
||||
let server_db = entities::server::Entity::find()
|
||||
.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 server = server::Model::get_or_create(server_id_i32, guild_name, db).await?;
|
||||
|
||||
let channel_id = msg.channel(&ctx.http).await.unwrap().id().get() as i64;
|
||||
let channel = entities::channel::Entity::find()
|
||||
.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()
|
||||
}
|
||||
};
|
||||
let channel = channel::Model::get_or_create(channel_id, db).await?;
|
||||
|
||||
println!(
|
||||
"{}, {}, {}, {}, {}",
|
||||
msg.id.get(),
|
||||
member,
|
||||
server.id,
|
||||
server,
|
||||
content,
|
||||
channel.id
|
||||
channel
|
||||
);
|
||||
|
||||
let activeModel = messages::ActiveModel {
|
||||
id: sea_orm::ActiveValue::NotSet,
|
||||
id_discord: sea_orm::ActiveValue::Set(msg.id.get() as i64),
|
||||
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_channel: sea_orm::ActiveValue::Set(channel.id),
|
||||
id_channel: sea_orm::ActiveValue::Set(channel),
|
||||
};
|
||||
activeModel.insert(db).await;
|
||||
Ok(())
|
||||
|
||||
@@ -10,6 +10,28 @@ pub struct Model {
|
||||
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)]
|
||||
pub enum Relation {
|
||||
#[sea_orm(has_many = "super::messages::Entity")]
|
||||
|
||||
@@ -15,6 +15,7 @@ pub struct Model {
|
||||
impl Model {
|
||||
pub async fn get_by_discord_id(
|
||||
id: i64,
|
||||
name: String,
|
||||
db: &DatabaseConnection,
|
||||
) -> Result<Option<Model>, DbErr> {
|
||||
let server_db_id = Entity::find()
|
||||
@@ -30,6 +31,30 @@ impl Model {
|
||||
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)]
|
||||
|
||||
Reference in New Issue
Block a user