更?
This commit is contained in:
parent
6d6ec7b05c
commit
af355c6b72
@ -1,11 +1,14 @@
|
|||||||
pub use sea_orm_migration::prelude::*;
|
pub use sea_orm_migration::prelude::*;
|
||||||
|
|
||||||
mod m20240719_00001_create_main_data_table;
|
pub mod m20240719_00001_create_main_data_table;
|
||||||
mod m20240719_00002_create_long_data_table;
|
pub mod m20240719_00002_create_long_data_table;
|
||||||
mod m20240721_221623_create_indexs;
|
pub mod m20240721_221623_create_indexs;
|
||||||
|
|
||||||
pub use m20240721_221623_create_indexs::FULL_DATA_VIEW;
|
pub use m20240721_221623_create_indexs::FULL_DATA_VIEW;
|
||||||
|
|
||||||
|
pub const TEXT_DATA_MAX_LEN: usize = 1024;
|
||||||
|
|
||||||
|
pub type SaveId = u32;
|
||||||
pub struct Migrator;
|
pub struct Migrator;
|
||||||
|
|
||||||
#[async_trait::async_trait]
|
#[async_trait::async_trait]
|
||||||
|
@ -2,6 +2,8 @@ use sea_orm::{EnumIter, Iterable};
|
|||||||
use sea_orm_migration::prelude::extension::postgres::Type;
|
use sea_orm_migration::prelude::extension::postgres::Type;
|
||||||
use sea_orm_migration::prelude::*;
|
use sea_orm_migration::prelude::*;
|
||||||
|
|
||||||
|
use crate::TEXT_DATA_MAX_LEN;
|
||||||
|
|
||||||
#[derive(DeriveMigrationName)]
|
#[derive(DeriveMigrationName)]
|
||||||
pub struct Migration;
|
pub struct Migration;
|
||||||
|
|
||||||
@ -56,7 +58,7 @@ impl MigrationTrait for Migration {
|
|||||||
// len = 64
|
// len = 64
|
||||||
.col(ColumnDef::new(MainData::BlakeHash).char_len(64).not_null())
|
.col(ColumnDef::new(MainData::BlakeHash).char_len(64).not_null())
|
||||||
.col(ColumnDef::new(MainData::Len).big_integer().not_null())
|
.col(ColumnDef::new(MainData::Len).big_integer().not_null())
|
||||||
.col(ColumnDef::new(MainData::ShortData).string_len(1024))
|
.col(ColumnDef::new(MainData::ShortData).string_len(TEXT_DATA_MAX_LEN as u32))
|
||||||
.to_owned(),
|
.to_owned(),
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
@ -3,6 +3,10 @@ name = "sr_download"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "get-save"
|
||||||
|
path = "./src/get-save.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
reqwest = "0.12.5"
|
reqwest = "0.12.5"
|
||||||
tokio = { version = "1.38.1", features = ["full"] }
|
tokio = { version = "1.38.1", features = ["full"] }
|
||||||
|
@ -2,7 +2,7 @@ use std::path::Path;
|
|||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::SaveId;
|
use migration::SaveId;
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
pub struct ConfigFile {
|
pub struct ConfigFile {
|
||||||
|
@ -6,10 +6,10 @@ use sea_orm::{
|
|||||||
};
|
};
|
||||||
use tracing::{event, Level};
|
use tracing::{event, Level};
|
||||||
|
|
||||||
|
use crate::config::ConfigFile;
|
||||||
|
use crate::model;
|
||||||
use crate::model::sea_orm_active_enums::SaveType;
|
use crate::model::sea_orm_active_enums::SaveType;
|
||||||
use crate::{config::ConfigFile, SaveId};
|
use migration::{Migrator, MigratorTrait, SaveId, FULL_DATA_VIEW, TEXT_DATA_MAX_LEN};
|
||||||
use crate::{model, TEXT_DATA_MAX_LEN};
|
|
||||||
use migration::{Migrator, MigratorTrait, FULL_DATA_VIEW};
|
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct DbData {
|
pub struct DbData {
|
||||||
@ -83,12 +83,16 @@ pub async fn connect(conf: &ConfigFile) -> anyhow::Result<DatabaseConnection> {
|
|||||||
event!(Level::INFO, "Connecting to database");
|
event!(Level::INFO, "Connecting to database");
|
||||||
let db: DatabaseConnection = Database::connect(opt).await?;
|
let db: DatabaseConnection = Database::connect(opt).await?;
|
||||||
db.ping().await?;
|
db.ping().await?;
|
||||||
event!(Level::INFO, "Connected to database, starting migration");
|
|
||||||
Migrator::up(&db, None).await?;
|
|
||||||
event!(Level::INFO, "Migration finished");
|
|
||||||
Ok(db)
|
Ok(db)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn migrate(db: &DatabaseConnection) -> anyhow::Result<()> {
|
||||||
|
event!(Level::INFO, "Starting migration");
|
||||||
|
Migrator::up(db, None).await?;
|
||||||
|
event!(Level::INFO, "Migration finished");
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn find_max_id(db: &DatabaseConnection) -> SaveId {
|
pub async fn find_max_id(db: &DatabaseConnection) -> SaveId {
|
||||||
// SELECT save_id from main_data ORDER BY save_id DESC LIMIT 1
|
// SELECT save_id from main_data ORDER BY save_id DESC LIMIT 1
|
||||||
// 我丢你老母, 有这时间写这个, 我都写完 sql 语句了
|
// 我丢你老母, 有这时间写这个, 我都写完 sql 语句了
|
||||||
@ -112,11 +116,22 @@ pub async fn find_max_id(db: &DatabaseConnection) -> SaveId {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(non_snake_case)]
|
||||||
|
pub fn SaveType_from_str(str: String) -> Option<SaveType> {
|
||||||
|
match str.to_lowercase().as_str() {
|
||||||
|
"save" => Some(SaveType::Save),
|
||||||
|
"ship" => Some(SaveType::Ship),
|
||||||
|
"none" => Some(SaveType::None),
|
||||||
|
"unknown" => Some(SaveType::Unknown),
|
||||||
|
_ => None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// 直接从数据库中查询数据, 这里数据库已经准备好了根据长度区分过的数据
|
/// 直接从数据库中查询数据, 这里数据库已经准备好了根据长度区分过的数据
|
||||||
/// 可以从 full view 里直接选数据
|
/// 可以从 full view 里直接选数据
|
||||||
pub async fn get_raw_data(save_id: SaveId, db: &DatabaseConnection) -> Option<DbData> {
|
pub async fn get_raw_data(save_id: SaveId, db: &DatabaseConnection) -> Option<DbData> {
|
||||||
let sql = format!(
|
let sql = format!(
|
||||||
"SELECT data, save_type, blake_hash FROM {} WHERE save_id = {}",
|
"SELECT data, save_type::text FROM {} WHERE save_id = {}",
|
||||||
FULL_DATA_VIEW, save_id
|
FULL_DATA_VIEW, save_id
|
||||||
);
|
);
|
||||||
let datas = db
|
let datas = db
|
||||||
@ -126,9 +141,8 @@ pub async fn get_raw_data(save_id: SaveId, db: &DatabaseConnection) -> Option<Db
|
|||||||
))
|
))
|
||||||
.await
|
.await
|
||||||
.ok()??;
|
.ok()??;
|
||||||
let text: String = datas.try_get_by_index(0).ok()?;
|
let text: String = datas.try_get("", "data").ok()?;
|
||||||
let save_type: SaveType = datas.try_get_by_index(1).ok()?;
|
let save_type: SaveType = SaveType_from_str(datas.try_get("", "save_type").ok()?)?;
|
||||||
let blake_hash: String = datas.try_get_by_index(2).ok()?;
|
|
||||||
Some(DbData::new(save_id, text, save_type))
|
Some(DbData::new(save_id, text, save_type))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
24
sr_download/src/get-save.rs
Normal file
24
sr_download/src/get-save.rs
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
use std::path::Path;
|
||||||
|
|
||||||
|
#[allow(unused)]
|
||||||
|
mod config;
|
||||||
|
#[allow(unused)]
|
||||||
|
mod db_part;
|
||||||
|
#[allow(unused)]
|
||||||
|
mod model;
|
||||||
|
|
||||||
|
use migration::SaveId;
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() -> anyhow::Result<()> {
|
||||||
|
let config = config::ConfigFile::read_from_file(Path::new("config.toml")).unwrap();
|
||||||
|
let db = db_part::connect(&config).await.unwrap();
|
||||||
|
|
||||||
|
let want_get_id = std::env::args().nth(1).ok_or(anyhow::anyhow!("No input"))?.parse::<SaveId>()?;
|
||||||
|
|
||||||
|
let data = db_part::get_raw_data(want_get_id, &db).await.ok_or(anyhow::anyhow!("No data"))?;
|
||||||
|
|
||||||
|
println!("{}", data.text.ok_or(anyhow::anyhow!("No text"))?);
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
@ -10,12 +10,10 @@ mod db_part;
|
|||||||
mod model;
|
mod model;
|
||||||
mod net;
|
mod net;
|
||||||
|
|
||||||
pub type SaveId = u32;
|
|
||||||
pub const TEXT_DATA_MAX_LEN: usize = 1024;
|
|
||||||
|
|
||||||
use model::sea_orm_active_enums::SaveType;
|
use model::sea_orm_active_enums::SaveType;
|
||||||
|
|
||||||
use crate::db_part::CoverStrategy;
|
use crate::db_part::CoverStrategy;
|
||||||
|
use migration::SaveId;
|
||||||
|
|
||||||
async fn big_worker(
|
async fn big_worker(
|
||||||
db: sea_orm::DatabaseConnection,
|
db: sea_orm::DatabaseConnection,
|
||||||
@ -89,6 +87,7 @@ async fn main_works(mut stop_receiver: Receiver<()>) -> anyhow::Result<()> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let db_connect = db_part::connect(&conf).await?;
|
let db_connect = db_part::connect(&conf).await?;
|
||||||
|
db_part::migrate(&db_connect).await?;
|
||||||
let db_max_id = db_part::find_max_id(&db_connect).await;
|
let db_max_id = db_part::find_max_id(&db_connect).await;
|
||||||
|
|
||||||
event!(
|
event!(
|
||||||
|
Loading…
Reference in New Issue
Block a user