From ddb35c51333f186b5c339ea3511d91dd82aeb506 Mon Sep 17 00:00:00 2001 From: Michael Chung Date: Fri, 24 Nov 2023 22:24:34 -0500 Subject: [PATCH] Added more data for seeding Added to test lists need to get list_weights_by_user tested --- crates/cli/dev_database_seed/src/main.rs | 2 + .../src/seeding/model_weights.rs | 241 ++++++++-- .../model_weights/list_weights_by_user.rs | 432 +++++++++++------- .../src/queries/model_weights/mod.rs | 2 +- .../queries/model_weights/table_reference.sql | 37 ++ .../src/queries/model_weights/tests.rs | 4 +- 6 files changed, 516 insertions(+), 202 deletions(-) create mode 100644 crates/lib/mysql_queries/src/queries/model_weights/table_reference.sql diff --git a/crates/cli/dev_database_seed/src/main.rs b/crates/cli/dev_database_seed/src/main.rs index 8a7c5191d8..7fd5cef9d1 100644 --- a/crates/cli/dev_database_seed/src/main.rs +++ b/crates/cli/dev_database_seed/src/main.rs @@ -10,10 +10,12 @@ use errors::AnyhowResult; use crate::cli_args::parse_cli_args; use crate::seeding::model_weights::seed_weights; +use crate::seeding::model_weights::seed_weights_for_user_token; use crate::seeding::users::seed_user_accounts; use crate::seeding::voice_conversion::seed_voice_conversion; use crate::seeding::zero_shot_tts::seed_zero_shot_tts; + pub mod cli_args; pub mod seeding; diff --git a/crates/cli/dev_database_seed/src/seeding/model_weights.rs b/crates/cli/dev_database_seed/src/seeding/model_weights.rs index d22f0e7a44..de9bcd90a9 100644 --- a/crates/cli/dev_database_seed/src/seeding/model_weights.rs +++ b/crates/cli/dev_database_seed/src/seeding/model_weights.rs @@ -7,13 +7,164 @@ use enums::by_table::model_weights::{ weights_category::WeightsCategory, }; use errors::{ anyhow, AnyhowResult }; -use mysql_queries::queries::users::user::get_user_token_by_username::get_user_token_by_username; use crate::seeding::users::HANASHI_USERNAME; use mysql_queries::queries::model_weights::create_weight::{ create_weight, CreateModelWeightsArgs }; use tokens::tokens::model_weights::ModelWeightToken; use enums::common::visibility::Visibility; +use mysql_queries::queries::users::user::get_user_token_by_username::get_user_token_by_username; + +pub async fn seed_weights_for_user_token( + mysql_pool: &Pool, + user_token: UserToken +) -> AnyhowResult<()> { + info!("Seeding weights..."); + + let model_weight_token1 = ModelWeightToken("11".to_string()); + let model_weight_token2 = ModelWeightToken("22".to_string()); + let model_weight_token3 = ModelWeightToken("33".to_string()); + let model_weight_token4 = ModelWeightToken("44".to_string()); + let model_weight_token5 = ModelWeightToken("55".to_string()); + + let model_weights_args = vec![ + CreateModelWeightsArgs { + token: &model_weight_token1, // replace with actual ModelWeightToken + weights_type: WeightsType::RvcV2, // replace with actual WeightsType + weights_category: WeightsCategory::VoiceConversion, // replace with actual WeightsCategory + title: "Title 1".to_string(), + maybe_thumbnail_token: Some("Thumbnail 1".to_string()), + description_markdown: "Description 1".to_string(), + description_rendered_html: "

Description 1

".to_string(), + creator_user_token: Some(&user_token), // replace with actual UserToken + creator_ip_address: "192.168.1.1", + creator_set_visibility: Visibility::Public, + maybe_last_update_user_token: Some("Last Update User Token 1".to_string()), + original_download_url: Some("http://example.com/download1".to_string()), + original_filename: Some("filename1.txt".to_string()), + file_size_bytes: 1024, + file_checksum_sha2: "checksum1".to_string(), + private_bucket_hash: "bucket_hash1".to_string(), + maybe_private_bucket_prefix: Some("_fake".to_string()), + maybe_private_bucket_extension: Some("rvc".to_string()), + cached_user_ratings_total_count: 10, + cached_user_ratings_positive_count: 9, + cached_user_ratings_negative_count: 1, + maybe_cached_user_ratings_ratio: Some(0.9), + version: 1, + mysql_pool: &mysql_pool, // replace with actual MySqlPool + }, + CreateModelWeightsArgs { + token: &model_weight_token2, // replace with actual ModelWeightToken + weights_type: WeightsType::HifiganTacotron2, // replace with actual WeightsType + weights_category: WeightsCategory::TextToSpeech, // replace with actual WeightsCategory + title: "Title 2".to_string(), + maybe_thumbnail_token: Some("Thumbnail 2".to_string()), + description_markdown: "Description 2".to_string(), + description_rendered_html: "

Description 2

".to_string(), + creator_user_token: Some(&user_token), // replace with actual UserToken + creator_ip_address: "292.268.2.2", + creator_set_visibility: Visibility::Public, + maybe_last_update_user_token: Some("Last Update User Token 2".to_string()), + original_download_url: Some("http://example.com/download2".to_string()), + original_filename: Some("filename2.txt".to_string()), + file_size_bytes: 2024, + file_checksum_sha2: "checksum2".to_string(), + private_bucket_hash: "bucket_hash2".to_string(), + maybe_private_bucket_prefix: Some("_fake".to_string()), + maybe_private_bucket_extension: Some("tt2".to_string()), + cached_user_ratings_total_count: 20, + cached_user_ratings_positive_count: 9, + cached_user_ratings_negative_count: 2, + maybe_cached_user_ratings_ratio: Some(0.9), + version: 2, + mysql_pool: &mysql_pool, // replace with actual MySqlPool + }, + CreateModelWeightsArgs { + token: &model_weight_token3, // replace with actual ModelWeightToken + weights_type: WeightsType::StableDiffusion15, // replace with actual WeightsType + weights_category: WeightsCategory::ImageGeneration, // replace with actual WeightsCategory + title: "Title 3".to_string(), + maybe_thumbnail_token: Some("Thumbnail 3".to_string()), + description_markdown: "Description 3".to_string(), + description_rendered_html: "

Description 3

".to_string(), + creator_user_token: Some(&user_token), // replace with actual UserToken + creator_ip_address: "392.368.3.3", + creator_set_visibility: Visibility::Public, + maybe_last_update_user_token: Some("Last Update User Token 3".to_string()), + original_download_url: Some("http://example.com/download3".to_string()), + original_filename: Some("filename3.txt".to_string()), + file_size_bytes: 3024, + file_checksum_sha2: "checksum3".to_string(), + private_bucket_hash: "bucket_hash3".to_string(), + maybe_private_bucket_prefix: Some("_fake".to_string()), + maybe_private_bucket_extension: Some("safetensors".to_string()), + cached_user_ratings_total_count: 10, + cached_user_ratings_positive_count: 9, + cached_user_ratings_negative_count: 1, + maybe_cached_user_ratings_ratio: Some(0.9), + version: 1, + mysql_pool: &mysql_pool, // replace with actual MySqlPool + }, + CreateModelWeightsArgs { + token: &model_weight_token4, // replace with actual ModelWeightToken + weights_type: WeightsType::LoRA, // replace with actual WeightsType + weights_category: WeightsCategory::ImageGeneration, // replace with actual WeightsCategory + title: "Title 4".to_string(), + maybe_thumbnail_token: Some("Thumbnail 4".to_string()), + description_markdown: "Description 4".to_string(), + description_rendered_html: "

Description 4

".to_string(), + creator_user_token: Some(&user_token), // replace with actual UserToken + creator_ip_address: "192.168.1.1", + creator_set_visibility: Visibility::Public, + maybe_last_update_user_token: Some("Last Update User Token 4".to_string()), + original_download_url: Some("http://example.com/download1".to_string()), + original_filename: Some("filename1.txt".to_string()), + file_size_bytes: 1024, + file_checksum_sha2: "checksum4".to_string(), + private_bucket_hash: "bucket_hash4".to_string(), + maybe_private_bucket_prefix: Some("_fake".to_string()), + maybe_private_bucket_extension: Some("LoRA".to_string()), + cached_user_ratings_total_count: 10, + cached_user_ratings_positive_count: 9, + cached_user_ratings_negative_count: 1, + maybe_cached_user_ratings_ratio: Some(0.9), + version: 2, + mysql_pool: &mysql_pool, // replace with actual MySqlPool + }, + CreateModelWeightsArgs { + token: &model_weight_token5, // replace with actual ModelWeightToken + weights_type: WeightsType::LoRA, // replace with actual WeightsType + weights_category: WeightsCategory::ImageGeneration, // replace with actual WeightsCategory + title: "Title 5".to_string(), + maybe_thumbnail_token: Some("Thumbnail 4".to_string()), + description_markdown: "Description 4".to_string(), + description_rendered_html: "

Description 4

".to_string(), + creator_user_token: Some(&user_token), // replace with actual UserToken + creator_ip_address: "192.168.1.1", + creator_set_visibility: Visibility::Public, + maybe_last_update_user_token: Some("Last Update User Token 4".to_string()), + original_download_url: Some("http://example.com/download1".to_string()), + original_filename: Some("filename1.txt".to_string()), + file_size_bytes: 1024, + file_checksum_sha2: "checksum4".to_string(), + private_bucket_hash: "bucket_hash4".to_string(), + maybe_private_bucket_prefix: Some("_fake".to_string()), + maybe_private_bucket_extension: Some("LoRA".to_string()), + cached_user_ratings_total_count: 10, + cached_user_ratings_positive_count: 9, + cached_user_ratings_negative_count: 1, + maybe_cached_user_ratings_ratio: Some(0.9), + version: 2, + mysql_pool: &mysql_pool, // replace with actual MySqlPool + } + ]; + + for model_weights_arg in model_weights_args { + create_weight(model_weights_arg).await?; + } + Ok(()) +} pub async fn seed_weights(mysql_pool: &Pool) -> AnyhowResult<()> { info!("Seeding weights..."); @@ -25,7 +176,7 @@ pub async fn seed_weights(mysql_pool: &Pool) -> AnyhowResult<()> { }; let model_weight_token1 = ModelWeightToken("1".to_string()); - let creator_token1 = UserToken("creatorToken!1".to_string()); + let creator_token1 = UserToken("creatorToken1".to_string()); let model_weight_token2 = ModelWeightToken("2".to_string()); let creator_token2 = UserToken("creatorToken2".to_string()); @@ -36,6 +187,9 @@ pub async fn seed_weights(mysql_pool: &Pool) -> AnyhowResult<()> { let model_weight_token4 = ModelWeightToken("4".to_string()); let creator_token4 = UserToken("creatorToken4".to_string()); + let model_weight_token5 = ModelWeightToken("5".to_string()); + let creator_token5 = UserToken("creatorToken5".to_string()); + let model_weights_args = vec![ CreateModelWeightsArgs { token: &model_weight_token1, // replace with actual ModelWeightToken @@ -116,37 +270,66 @@ pub async fn seed_weights(mysql_pool: &Pool) -> AnyhowResult<()> { mysql_pool: &mysql_pool, // replace with actual MySqlPool }, CreateModelWeightsArgs { - token: &model_weight_token4, // replace with actual ModelWeightToken - weights_type: WeightsType::LoRA, // replace with actual WeightsType - weights_category: WeightsCategory::ImageGeneration, // replace with actual WeightsCategory - title: "Title 4".to_string(), - maybe_thumbnail_token: Some("Thumbnail 4".to_string()), - description_markdown: "Description 4".to_string(), - description_rendered_html: "

Description 4

".to_string(), - creator_user_token: Some(&creator_token4), // replace with actual UserToken - creator_ip_address: "192.168.1.1", - creator_set_visibility: Visibility::Public, - maybe_last_update_user_token: Some("Last Update User Token 4".to_string()), - original_download_url: Some("http://example.com/download1".to_string()), - original_filename: Some("filename1.txt".to_string()), - file_size_bytes: 1024, - file_checksum_sha2: "checksum4".to_string(), - private_bucket_hash: "bucket_hash4".to_string(), - maybe_private_bucket_prefix: Some("_fake".to_string()), - maybe_private_bucket_extension: Some("LoRA".to_string()), - cached_user_ratings_total_count: 10, - cached_user_ratings_positive_count: 9, - cached_user_ratings_negative_count: 1, - maybe_cached_user_ratings_ratio: Some(0.9), - version: 2, - mysql_pool: &mysql_pool, // replace with actual MySqlPool - } + token: &model_weight_token4, // replace with actual ModelWeightToken + weights_type: WeightsType::LoRA, // replace with actual WeightsType + weights_category: WeightsCategory::ImageGeneration, // replace with actual WeightsCategory + title: "Title 4".to_string(), + maybe_thumbnail_token: Some("Thumbnail 4".to_string()), + description_markdown: "Description 4".to_string(), + description_rendered_html: "

Description 4

".to_string(), + creator_user_token: Some(&creator_token4), // replace with actual UserToken + creator_ip_address: "192.168.1.1", + creator_set_visibility: Visibility::Public, + maybe_last_update_user_token: Some("Last Update User Token 4".to_string()), + original_download_url: Some("http://example.com/download1".to_string()), + original_filename: Some("filename1.txt".to_string()), + file_size_bytes: 1024, + file_checksum_sha2: "checksum4".to_string(), + private_bucket_hash: "bucket_hash4".to_string(), + maybe_private_bucket_prefix: Some("_fake".to_string()), + maybe_private_bucket_extension: Some("LoRA".to_string()), + cached_user_ratings_total_count: 10, + cached_user_ratings_positive_count: 9, + cached_user_ratings_negative_count: 1, + maybe_cached_user_ratings_ratio: Some(0.9), + version: 2, + mysql_pool: &mysql_pool, // replace with actual MySqlPool + }, + CreateModelWeightsArgs { + token: &model_weight_token5, // replace with actual ModelWeightToken + weights_type: WeightsType::LoRA, // replace with actual WeightsType + weights_category: WeightsCategory::ImageGeneration, // replace with actual WeightsCategory + title: "Title 5".to_string(), + maybe_thumbnail_token: Some("Thumbnail 5".to_string()), + description_markdown: "Description 5".to_string(), + description_rendered_html: "

Description 5

".to_string(), + creator_user_token: Some(&creator_token5), // replace with actual UserToken + creator_ip_address: "192.168.1.1", + creator_set_visibility: Visibility::Public, + maybe_last_update_user_token: Some("Last Update User Token 5".to_string()), + original_download_url: Some("http://example.com/download1".to_string()), + original_filename: Some("filename1.txt".to_string()), + file_size_bytes: 1025, + file_checksum_sha2: "checksum5".to_string(), + private_bucket_hash: "bucket_hash5".to_string(), + maybe_private_bucket_prefix: Some("_fake".to_string()), + maybe_private_bucket_extension: Some("LoRA".to_string()), + cached_user_ratings_total_count: 10, + cached_user_ratings_positive_count: 9, + cached_user_ratings_negative_count: 1, + maybe_cached_user_ratings_ratio: Some(0.9), + version: 2, + mysql_pool: &mysql_pool, // replace with actual MySqlPool + } ]; for model_weights_arg in model_weights_args { create_weight(model_weights_arg).await?; } + + // adds this to HANASHI + get_user_token_by_username(HANASHI_USERNAME, mysql_pool).await?; + seed_weights_for_user_token(mysql_pool, user_token).await?; + Ok(()) - } - diff --git a/crates/lib/mysql_queries/src/queries/model_weights/list_weights_by_user.rs b/crates/lib/mysql_queries/src/queries/model_weights/list_weights_by_user.rs index 609b5d7c56..9db157428d 100644 --- a/crates/lib/mysql_queries/src/queries/model_weights/list_weights_by_user.rs +++ b/crates/lib/mysql_queries/src/queries/model_weights/list_weights_by_user.rs @@ -1,9 +1,35 @@ use anyhow::anyhow; -use chrono::{DateTime, Utc}; -use log::{info, warn}; -use sqlx::{MySql, MySqlPool}; +use chrono::{ DateTime, Utc }; +use log::{ info, warn }; +use sqlx::{ MySql, MySqlPool, query }; use sqlx::pool::PoolConnection; +// let result = sqlx + // ::query_as!( + // RawWeightJoinUser, + // r#" + // SELECT + // mw.token as `token: tokens::tokens::model_weights::ModelWeightsToken`, + // mw.title, + // users.token as `creator_user_token: tokens::tokens::users::UserToken`, + // users.username as creator_username, + // users.display_name as creator_display_name, + // users.email_gravatar_hash as creator_email_gravatar_hash, + // mw.creator_set_visibility as `creator_set_visibility: enums::common::visibility::Visibility`, + // mw.created_at, + // mw.updated_at + // FROM model_weights as mw + // JOIN users + // ON users.token = mw.creator_user_token + // WHERE + // users.username = ? + // AND mw.user_deleted_at IS NULL + // AND mw.mod_deleted_at IS NULL + // "#, + // creator_username + // ) + // .fetch_all(mysql_connection).await? + use enums::common::visibility::Visibility; use errors::AnyhowResult; use tokens::tokens::model_weights::ModelWeightToken; @@ -21,174 +47,19 @@ pub struct WeightsJoinUserRecord { pub weights_type: WeightsType, pub weights_category: WeightsCategory, pub maybe_thumbnail_token: Option, + pub description_markdown: String, pub description_rendered_html: String, + pub creator_user_token: UserToken, pub creator_ip_address: String, pub creator_set_visibility: Visibility, pub maybe_last_update_user_token: Option, - pub original_download_url: Option, - pub original_filename: Option, - pub file_size_bytes: i32, - pub file_checksum_sha2: String, - pub private_bucket_hash: String, - pub maybe_private_bucket_prefix: Option, - pub maybe_private_bucket_extension: Option, - pub cached_user_ratings_negative_count: u32, - pub cached_user_ratings_positive_count: u32, - pub cached_user_ratings_total_count: u32, - pub maybe_cached_user_ratings_ratio: Option, - pub cached_user_ratings_last_updated_at: DateTime, - pub version: i32, - pub created_at: DateTime, - pub updated_at: DateTime, - pub user_deleted_at: Option>, - pub mod_deleted_at: Option> -} -pub async fn list_weights_by_username( - mysql_pool: &MySqlPool, - username: &str, - can_see_deleted: bool, -) -> AnyhowResult> { - let mut connection = mysql_pool.acquire().await?; - list_weights_by_username_with_connection(&mut connection, username, can_see_deleted).await -} + pub creator_username: String, + pub creator_display_name: String, + pub creator_email_gravatar_hash: String, -pub async fn list_weights_by_username_with_connection( - mysql_connection: &mut PoolConnection, - creator_username: &str, - can_see_deleted: bool, -) -> AnyhowResult> { - - let datasets = - list_datasets_by_creator_username(mysql_connection, creator_username, can_see_deleted) - .await; - - let datasets : Vec = match datasets { - Ok(datasets) => datasets, - Err(err) => { - match err { - RowNotFound => { - return Ok(Vec::new()); - }, - _ => { - warn!("weights dataset list query error: {:?}", err); - return Err(anyhow!("weights dataset list query error")); - } - } - } - }; - - Ok(datasets.into_iter() - .map(|dataset: WeightsJoinUserRecord| { - WeightsJoinUserRecord { - // weights_token: ModelWeightToken(dataset.token), - // title: dataset.title, - // creator_user_token: dataset.creator_user_token, - // creator_username: dataset.creator_username, - // creator_ip_address: dataset.creator_ip_address, - // weights_type: dataset.weights_type, - // weights_category: dataset.weights_category, - // description_markdown: dataset.description_markdown, - // description_rendered_html: dataset.description_rendered_html, - // cached_user_ratings_negative_count: dataset.cached_user_ratings_negative_count, - // cached_user_ratings_positive_count: dataset.cached_user_ratings_positive_count, - // cached_user_ratings_total_count: dataset.cached_user_ratings_total_count, - // maybe_cached_user_ratings_ratio: dataset.maybe_cached_user_ratings_ratio, - // cached_user_ratings_total_count: dataset.cached_user_ratings_total_count, - // created_at: dataset.created_at, - // updated_at: dataset.updated_at, - } - }) - .filter(|dataset| { - dataset.weights_token == creator_username || dataset.creator_set_visibility == Visibility::Public || can_see_deleted - }) - .collect::>()) -} - - -async fn list_weights_by_creator_username( - mysql_connection: &mut PoolConnection, - creator_username: &str, - can_see_deleted: bool, -) -> AnyhowResult> { - // TODO: There has to be a better way. - // Sqlx doesn't like anything except string literals. - let maybe_datasets = if !can_see_deleted { - info!("listing datasets for user;"); - sqlx::query_as!( - WeightsRecord, - r#" - SELECT - zd.token as `token: tokens::tokens::zs_voice_datasets::ZsVoiceDatasetToken`, - zd.title, - zd.ietf_language_tag, - zd.ietf_primary_language_subtag, - users.token as `creator_user_token: tokens::tokens::users::UserToken`, - users.username as creator_username, - users.display_name as creator_display_name, - users.email_gravatar_hash as creator_email_gravatar_hash, - zd.creator_set_visibility as `creator_set_visibility: enums::common::visibility::Visibility`, - zd.created_at, - zd.updated_at - FROM zs_voice_datasets as zd - JOIN users - ON users.token = zd.maybe_creator_user_token - WHERE - users.username = ? - AND zd.user_deleted_at IS NULL - AND zd.mod_deleted_at IS NULL - "#, - creator_username) - .fetch_all(mysql_connection) - .await? - } else { - info!("listing datasets for user"); - sqlx::query_as!( - WeightsRecord - , - r#" - SELECT - zd.token as `token: tokens::tokens::zs_voice_datasets::ZsVoiceDatasetToken`, - zd.title, - zd.ietf_language_tag, - zd.ietf_primary_language_subtag, - users.token as `creator_user_token: tokens::tokens::users::UserToken`, - users.username as creator_username, - users.display_name as creator_display_name, - users.email_gravatar_hash as creator_email_gravatar_hash, - zd.creator_set_visibility as `creator_set_visibility: enums::common::visibility::Visibility`, - zd.created_at, - zd.updated_at - FROM zs_voice_datasets as zd - JOIN users - ON users.token = zd.maybe_creator_user_token - WHERE - users.username = ? - "#, - creator_username) - .fetch_all(mysql_connection) - .await? - }; - - Ok(maybe_datasets) -} - - -#[derive(Serialize)] -pub struct RawWeightJoinUser { - pub token: ModelWeightToken, - pub title: String, - pub weights_type: WeightsType, - pub weights_category: WeightsCategory, - pub maybe_thumbnail_token: Option, - pub description_markdown: String, - pub description_rendered_html: String, - pub creator_user_token: UserToken, - pub creator_ip_address: String, - pub creator_set_visibility: Visibility, - pub maybe_last_update_user_token: Option, pub original_download_url: Option, pub original_filename: Option, pub file_size_bytes: i32, @@ -208,12 +79,231 @@ pub struct RawWeightJoinUser { pub mod_deleted_at: Option>, } -#[cfg(test)] -mod tests { - - #[test] - fn test() { - assert_eq!("one", "two"); // This fails - } - +pub async fn list_weights_by_username( + mysql_pool: &MySqlPool, + username: &str, + can_see_deleted: bool +) -> AnyhowResult> { + let mut connection = mysql_pool.acquire().await?; + list_weights_by_username_with_connection(&mut connection, username, can_see_deleted).await } + +pub async fn list_weights_by_username_with_connection( + mysql_connection: &mut PoolConnection, + creator_username: &str, + can_see_deleted: bool +) -> AnyhowResult> { + // query + // let datasets = list_datasets_by_creator_username( + // mysql_connection, + // creator_username, + // can_see_deleted + // ).await; + + // // map + // let datasets: Vec = match datasets { + // Ok(datasets) => datasets, + // Err(err) => { + // match err { + // RowNotFound => { + // return Ok(Vec::new()); + // } + // _ => { + // warn!("weights dataset list query error: {:?}", err); + // return Err(anyhow!("weights dataset list query error")); + // } + // } + // } + // }; + + // Ok( + // datasets + // .into_iter() + // .map(|dataset: WeightsJoinUserRecord| { + // WeightsJoinUserRecord { + // token: dataset.token, + // title: dataset.title, + // weights_type: dataset.weights_type, + // weights_category: dataset.weights_category, + // maybe_thumbnail_token: dataset.maybe_thumbnail_token, + // description_markdown: dataset.description_markdown, + // description_rendered_html: dataset.description_rendered_html, + + // creator_user_token: dataset.creator_user_token, + // creator_ip_address: dataset.creator_ip_address, + // creator_set_visibility: dataset.creator_set_visibility, + + // maybe_last_update_user_token: dataset.maybe_last_update_user_token, + // original_download_url: dataset.original_download_url, + // original_filename: dataset.original_filename, + // file_size_bytes: dataset.file_size_bytes, + // file_checksum_sha2: dataset.file_checksum_sha2, + // private_bucket_hash: dataset.private_bucket_hash, + // maybe_private_bucket_prefix: dataset.maybe_private_bucket_prefix, + // maybe_private_bucket_extension: dataset.maybe_private_bucket_extension, + + // cached_user_ratings_negative_count: dataset.cached_user_ratings_negative_count, + // cached_user_ratings_positive_count: dataset.cached_user_ratings_positive_count, + // cached_user_ratings_total_count: dataset.cached_user_ratings_total_count, + + // maybe_cached_user_ratings_ratio: dataset.maybe_cached_user_ratings_ratio, + // cached_user_ratings_last_updated_at: dataset.cached_user_ratings_last_updated_at, + // version: dataset.version, + // created_at: dataset.created_at, + // updated_at: dataset.updated_at, + // user_deleted_at: dataset.user_deleted_at, + // mod_deleted_at: dataset.mod_deleted_at, + // } + // }) + // .filter(|dataset| { + // dataset.creator_user_token == creator_username || + // dataset.creator_set_visibility == Visibility::Public || + // can_see_deleted + // }) + // .collect::>()) + let weights_records = Vec::::new(); + Ok(weights_records) + +} + +async fn list_datasets_by_creator_username( + mysql_connection: &mut PoolConnection, + creator_username: &str, + can_see_deleted: bool +) -> AnyhowResult> { + let model_weights: Vec = Vec::new(); + Ok(model_weights) +} + + + +// CREATE TABLE model_weights ( +// id BIGINT(20) NOT NULL AUTO_INCREMENT, +// token VARCHAR(32) NOT NULL, +// weights_type VARCHAR(32) NOT NULL, +// weights_category VARCHAR(32) NOT NULL, +// title VARCHAR(255) NOT NULL, +// maybe_thumbnail_token VARCHAR(32) DEFAULT NULL, +// description_markdown TEXT NOT NULL, +// description_rendered_html TEXT NOT NULL, +// creator_user_token VARCHAR(32) NOT NULL, +// creator_ip_address VARCHAR(40) NOT NULL, +// creator_set_visibility ENUM( +// 'public', +// 'hidden', +// 'private' +// ) NOT NULL DEFAULT 'public', +// maybe_last_update_user_token VARCHAR(32) DEFAULT NULL, +// original_download_url VARCHAR(512) DEFAULT NULL, +// original_filename VARCHAR(255) DEFAULT NULL, +// file_size_bytes INT(10) NOT NULL DEFAULT 0, +// file_checksum_sha2 CHAR(64) NOT NULL, +// private_bucket_hash VARCHAR(32) NOT NULL, +// maybe_private_bucket_prefix VARCHAR(16) DEFAULT NULL, +// maybe_private_bucket_extension VARCHAR(16) DEFAULT NULL, +// cached_user_ratings_total_count INT(10) UNSIGNED NOT NULL DEFAULT 0, +// cached_user_ratings_positive_count INT(10) UNSIGNED NOT NULL DEFAULT 0, +// cached_user_ratings_negative_count INT(10) UNSIGNED NOT NULL DEFAULT 0, +// maybe_cached_user_ratings_ratio FLOAT, +// cached_user_ratings_last_updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, +// version INT NOT NULL DEFAULT 0, +// created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, +// updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, +// user_deleted_at TIMESTAMP NULL, +// mod_deleted_at TIMESTAMP NULL, +// PRIMARY KEY (id), +// UNIQUE KEY (token) +// ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + + + + #[derive(Serialize)] + pub struct RawWeightJoinUser { + pub token: ModelWeightToken, + + pub weights_type: WeightsType, + pub weights_category: WeightsCategory, + + pub title: String, + + pub maybe_thumbnail_token: Option, + + pub description_markdown: String, + pub description_rendered_html: String, + + pub creator_user_token: UserToken, + pub creator_ip_address: String, + pub creator_set_visibility: Visibility, + + pub maybe_last_update_user_token: Option, + + pub original_download_url: Option, + pub original_filename: Option, + + pub file_size_bytes: i32, + pub file_checksum_sha2: String, + + pub private_bucket_hash: String, + + pub maybe_private_bucket_prefix: Option, + pub maybe_private_bucket_extension: Option, + + pub cached_user_ratings_total_count: u32, + pub cached_user_ratings_positive_count: u32, + pub cached_user_ratings_negative_count: u32, + pub maybe_cached_user_ratings_ratio: Option, + pub cached_user_ratings_last_updated_at: DateTime, + + pub version: i32, + + pub created_at: DateTime, + pub updated_at: DateTime, + + pub user_deleted_at: Option>, + pub mod_deleted_at: Option>, + + pub username: String, + pub display_name: String, + pub email_gravatar_hash: String, +} + + +// SELECT +// mw.token as `token: tokens::tokens::model_weights::ModelWeightsToken`, +// mw.title, +// mw.weights_type, +// mw.weights_category, +// mw.maybe_thumbnail_token, +// mw.description_markdown, +// mw.description_rendered_html, +// users.token as `creator_user_token: tokens::tokens::users::UserToken`, +// users.username as creator_username, +// users.display_name as creator_display_name, +// users.email_gravatar_hash as creator_email_gravatar_hash, +// mw.creator_ip_address, +// mw.creator_set_visibility as `creator_set_visibility: enums::common::visibility::Visibility`, +// mw.maybe_last_update_user_token, +// mw.original_download_url, +// mw.original_filename, +// mw.file_size_bytes, +// mw.file_checksum_sha2, +// mw.private_bucket_hash, +// mw.maybe_private_bucket_prefix, +// mw.maybe_private_bucket_extension, +// mw.cached_user_ratings_negative_count, +// mw.cached_user_ratings_positive_count, +// mw.cached_user_ratings_total_count, +// mw.maybe_cached_user_ratings_ratio, +// mw.cached_user_ratings_last_updated_at, +// mw.version, +// mw.created_at, +// mw.updated_at, +// mw.user_deleted_at, +// mw.mod_deleted_at +// FROM model_weights as mw +// JOIN users +// ON users.token = mw.creator_user_token +// WHERE +// users.username = ? +// AND mw.user_deleted_at IS NULL +// AND mw.mod_deleted_at IS NULL \ No newline at end of file diff --git a/crates/lib/mysql_queries/src/queries/model_weights/mod.rs b/crates/lib/mysql_queries/src/queries/model_weights/mod.rs index f082e5ce0b..0f49dd33a6 100644 --- a/crates/lib/mysql_queries/src/queries/model_weights/mod.rs +++ b/crates/lib/mysql_queries/src/queries/model_weights/mod.rs @@ -2,6 +2,6 @@ pub mod create_weight; pub mod delete_weights; pub mod get_weight; pub mod update_weight; -// pub mod list_weights_by_user; +pub mod list_weights_by_user; // pub mod list_weights_query_builder; pub mod tests; \ No newline at end of file diff --git a/crates/lib/mysql_queries/src/queries/model_weights/table_reference.sql b/crates/lib/mysql_queries/src/queries/model_weights/table_reference.sql new file mode 100644 index 0000000000..edd6e7407b --- /dev/null +++ b/crates/lib/mysql_queries/src/queries/model_weights/table_reference.sql @@ -0,0 +1,37 @@ +CREATE TABLE model_weights ( + id BIGINT(20) NOT NULL AUTO_INCREMENT, + token VARCHAR(32) NOT NULL, + weights_type VARCHAR(32) NOT NULL, + weights_category VARCHAR(32) NOT NULL, + title VARCHAR(255) NOT NULL, + maybe_thumbnail_token VARCHAR(32) DEFAULT NULL, + description_markdown TEXT NOT NULL, + description_rendered_html TEXT NOT NULL, + creator_user_token VARCHAR(32) NOT NULL, + creator_ip_address VARCHAR(40) NOT NULL, + creator_set_visibility ENUM( + 'public', + 'hidden', + 'private' + ) NOT NULL DEFAULT 'public', + maybe_last_update_user_token VARCHAR(32) DEFAULT NULL, + original_download_url VARCHAR(512) DEFAULT NULL, + original_filename VARCHAR(255) DEFAULT NULL, + file_size_bytes INT(10) NOT NULL DEFAULT 0, + file_checksum_sha2 CHAR(64) NOT NULL, + private_bucket_hash VARCHAR(32) NOT NULL, + maybe_private_bucket_prefix VARCHAR(16) DEFAULT NULL, + maybe_private_bucket_extension VARCHAR(16) DEFAULT NULL, + cached_user_ratings_total_count INT(10) UNSIGNED NOT NULL DEFAULT 0, + cached_user_ratings_positive_count INT(10) UNSIGNED NOT NULL DEFAULT 0, + cached_user_ratings_negative_count INT(10) UNSIGNED NOT NULL DEFAULT 0, + maybe_cached_user_ratings_ratio FLOAT, + cached_user_ratings_last_updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + version INT NOT NULL DEFAULT 0, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + user_deleted_at TIMESTAMP NULL, + mod_deleted_at TIMESTAMP NULL, + PRIMARY KEY (id), + UNIQUE KEY (token) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; \ No newline at end of file diff --git a/crates/lib/mysql_queries/src/queries/model_weights/tests.rs b/crates/lib/mysql_queries/src/queries/model_weights/tests.rs index b03ce01fc3..97cc5380ce 100644 --- a/crates/lib/mysql_queries/src/queries/model_weights/tests.rs +++ b/crates/lib/mysql_queries/src/queries/model_weights/tests.rs @@ -279,6 +279,8 @@ mod tests { Ok(()) } + #[tokio::test] + async fn list_all_weights_by_user() -> AnyhowResult<()> { - + } }