refactor: music-db crate
This commit is contained in:
14
Cargo.lock
generated
14
Cargo.lock
generated
@@ -946,6 +946,17 @@ dependencies = [
|
||||
"windows-sys 0.59.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "music-db"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"rust_decimal",
|
||||
"rustc-hash",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"spdlog-rs",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nanorand"
|
||||
version = "0.7.0"
|
||||
@@ -1481,9 +1492,8 @@ dependencies = [
|
||||
"flate2",
|
||||
"hmac-sha256",
|
||||
"md5",
|
||||
"music-db",
|
||||
"nyquest",
|
||||
"rust_decimal",
|
||||
"rustc-hash",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"snafu",
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
[workspace]
|
||||
members = ["sdgb-api", "sdgb-cli"]
|
||||
members = ["music_db", "sdgb-api", "sdgb-cli"]
|
||||
resolver = "3"
|
||||
default-members = ["sdgb-cli"]
|
||||
|
||||
[workspace.dependencies]
|
||||
music-db = { path = "./music_db", default-features = false }
|
||||
sdgb-api = { path = "./sdgb-api", default-features = false }
|
||||
|
||||
spdlog-rs = { version = "0.4.3", default-features = false, features = [
|
||||
|
||||
18
music_db/Cargo.toml
Normal file
18
music_db/Cargo.toml
Normal file
@@ -0,0 +1,18 @@
|
||||
[package]
|
||||
name = "music-db"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
rustc-hash = "2.1.1"
|
||||
rust_decimal = { version = "1.37.2", default-features = false, features = [
|
||||
"serde-with-arbitrary-precision",
|
||||
"macros",
|
||||
] }
|
||||
|
||||
serde = { workspace = true }
|
||||
serde_json = { workspace = true }
|
||||
spdlog-rs = { workspace = true, optional = true }
|
||||
|
||||
[features]
|
||||
log = ["dep:spdlog-rs"]
|
||||
@@ -1,9 +1,8 @@
|
||||
use std::{fs::OpenOptions, io::BufReader, sync::LazyLock, time::SystemTime};
|
||||
use std::{fs::OpenOptions, io::BufReader, sync::LazyLock};
|
||||
|
||||
use rust_decimal::{Decimal, dec, serde::DecimalFromString};
|
||||
use rustc_hash::FxHashMap;
|
||||
use serde::Deserialize;
|
||||
use spdlog::{info, warn};
|
||||
|
||||
#[derive(Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
@@ -42,26 +41,24 @@ pub fn query_music_level(music_id: u32, level: u32) -> Option<&'static Level> {
|
||||
}
|
||||
|
||||
pub static MUSIC_DB: LazyLock<Option<MusicDB>> = LazyLock::new(|| {
|
||||
let time = SystemTime::now();
|
||||
info!("loading musicDB...");
|
||||
|
||||
let json = OpenOptions::new()
|
||||
.read(true)
|
||||
.create(false)
|
||||
.open("musicDB.json")
|
||||
.inspect_err(|e| warn!("failed to load musicDB: {e}"))
|
||||
.inspect_err(|_e| {
|
||||
#[cfg(feature = "log")]
|
||||
spdlog::warn!("failed to load musicDB: {_e}")
|
||||
})
|
||||
.ok()?;
|
||||
let buf_reader = BufReader::new(json);
|
||||
|
||||
let db: Vec<MusicInfo> = serde_json::from_reader(buf_reader)
|
||||
.inspect_err(|e| warn!("failed to load musicDB: {e}"))
|
||||
.inspect_err(|_e| {
|
||||
#[cfg(feature = "log")]
|
||||
spdlog::warn!("failed to load musicDB: {_e}")
|
||||
})
|
||||
.ok()?;
|
||||
|
||||
info!(
|
||||
"loaded musicDB, cost {}ms",
|
||||
time.elapsed().unwrap_or_default().as_millis()
|
||||
);
|
||||
|
||||
Some(db.into_iter().map(|entry| (entry.id, entry)).collect())
|
||||
});
|
||||
|
||||
@@ -18,6 +18,7 @@ strum = { workspace = true }
|
||||
tokio = { workspace = true, optional = true }
|
||||
compio = { workspace = true, optional = true }
|
||||
spdlog-rs = { workspace = true }
|
||||
music-db = { workspace = true }
|
||||
|
||||
# (de)serialization
|
||||
serde = { workspace = true }
|
||||
@@ -43,8 +44,3 @@ bincode = { version = "2.0.1", optional = true }
|
||||
|
||||
# magic macro
|
||||
crabtime = { git = "https://github.com/wdanilo/crabtime.git", rev = "2ed856f5" }
|
||||
rustc-hash = "2.1.1"
|
||||
rust_decimal = { version = "1.37.2", default-features = false, features = [
|
||||
"serde-with-arbitrary-precision",
|
||||
"macros",
|
||||
] }
|
||||
|
||||
@@ -9,6 +9,3 @@ pub fn level_name(level: u32) -> &'static str {
|
||||
_ => "Unknown",
|
||||
}
|
||||
}
|
||||
|
||||
mod music_db;
|
||||
pub use music_db::{Level, MusicInfo, query_music, query_music_level, preload_db};
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
use crate::{
|
||||
helper::query_music,
|
||||
title::model::{
|
||||
dxrating::{DxCalculatedEntries, DxLevelName, DxMusicRecord, DxSheetId},
|
||||
get_user_music_api::UserMusicDetail,
|
||||
get_user_rating_api::{MusicRating, UserRating},
|
||||
},
|
||||
use music_db::query_music;
|
||||
|
||||
use crate::title::model::{
|
||||
dxrating::{DxCalculatedEntries, DxLevelName, DxMusicRecord, DxSheetId},
|
||||
get_user_music_api::UserMusicDetail,
|
||||
get_user_rating_api::{MusicRating, UserRating},
|
||||
};
|
||||
|
||||
impl DxCalculatedEntries {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
use std::fmt::Display;
|
||||
|
||||
use music_db::query_music;
|
||||
use music_db::query_music_level;
|
||||
use serde::Deserialize;
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::helper::level_name;
|
||||
use crate::helper::query_music;
|
||||
use crate::helper::query_music_level;
|
||||
|
||||
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
|
||||
@@ -2,12 +2,12 @@ use std::fmt::Display;
|
||||
|
||||
use bincode::Decode;
|
||||
use bincode::Encode;
|
||||
use music_db::query_music;
|
||||
use music_db::query_music_level;
|
||||
use serde::Deserialize;
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::helper::level_name;
|
||||
use crate::helper::query_music;
|
||||
use crate::helper::query_music_level;
|
||||
|
||||
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
|
||||
@@ -13,7 +13,6 @@ use spdlog::{Level, LevelFilter::MoreSevereEqual, sink::StdStreamSink, terminal_
|
||||
use sdgb_api::{
|
||||
all_net::QRCode,
|
||||
auth_lite::{SDGB, SDHJ, delivery_raw},
|
||||
helper::preload_db,
|
||||
title::{
|
||||
MaiVersionExt, Sdgb1_50,
|
||||
methods::APIMethod,
|
||||
@@ -76,7 +75,6 @@ async fn main() -> Result<(), Box<dyn snafu::Error>> {
|
||||
let human_readable = !machine_readable;
|
||||
|
||||
let client = ClientBuilder::default().build_async().await?;
|
||||
preload_db();
|
||||
|
||||
// TODO: refactor via enum_dispatch
|
||||
match command {
|
||||
|
||||
@@ -62,6 +62,11 @@ def main():
|
||||
"players.json",
|
||||
"players_pub.json",
|
||||
)
|
||||
process(
|
||||
lambda d: d["userRating"].pop("rating"),
|
||||
"b50.json",
|
||||
"b50_pub.json",
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user