share code for generic media file insert

This commit is contained in:
Brandon Thomas committed 2024-08-25 19:02:17 -04:00
1 parent 8a8fae1380
commit 0d2580f481
3 files changed
+48 -148

No files matched your search

@@ -11,6 +11,7 @@ use enums::by_table::generic_inference_jobs::inference_model_type::InferenceMode
use enums::common::job_status_plus::JobStatusPlus;
use enums::common::visibility::Visibility;
use errors::AnyhowResult;
use tokens::tokens::anonymous_visitor_tracking::AnonymousVisitorTrackingToken;
use tokens::tokens::generic_inference_jobs::InferenceJobToken;
use tokens::tokens::media_files::MediaFileToken;
use tokens::tokens::users::UserToken;
@@ -50,6 +51,8 @@ pub struct AvailableInferenceJob {
/// Same user token, but a `UserToken`.
pub maybe_creator_user_token_typed: Option<UserToken>,
pub maybe_creator_anonymous_visitor_token: Option<String>,
/// Same anonymous visitor token, but a `AnonymousVisitorTrackingToken`.
pub maybe_creator_anonymous_visitor_token_typed: Option<AnonymousVisitorTrackingToken>,
pub creator_ip_address: String,
pub creator_set_visibility: Visibility,
@@ -111,9 +114,13 @@ pub async fn list_available_generic_inference_jobs(
let job_records : Vec<AvailableInferenceJob> = job_records.into_iter()
.map(|record : AvailableInferenceJobRawInternal| {
let maybe_creator_user_token_typed = record.maybe_creator_user_token
.as_ref()
.as_deref()
.map(|s| UserToken::new_from_str(s));
let maybe_creator_anonymous_visitor_token_typed= record.maybe_creator_anonymous_visitor_token
.as_deref()
.map(|s| AnonymousVisitorTrackingToken::new_from_str(s));
Ok(AvailableInferenceJob {
id: GenericInferenceJobId(record.id),
inference_job_token: InferenceJobToken::new(record.inference_job_token),
@@ -123,6 +130,7 @@ pub async fn list_available_generic_inference_jobs(
maybe_creator_user_token_typed,
maybe_download_url: record.maybe_download_url,
maybe_creator_anonymous_visitor_token: record.maybe_creator_anonymous_visitor_token,
maybe_creator_anonymous_visitor_token_typed,
maybe_cover_image_media_file_token: record.maybe_cover_image_media_file_token
.map(|s| MediaFileToken::new_from_str(&s)),
creator_set_visibility: Visibility::from_str(&record.creator_set_visibility)
@@ -20,7 +20,6 @@ use tokens::tokens::users::UserToken;
use crate::payloads::media_file_extra_info::media_file_extra_info::MediaFileExtraInfo;
use crate::queries::generic_synthetic_ids::transactional_increment_generic_synthetic_id::transactional_increment_generic_synthetic_id;
// thought about this it seems like this can be a bit more geneneric instead of having this we can ...
pub struct InsertArgs<'a> {
pub pool: &'a MySqlPool,
@@ -1,4 +1,3 @@
use anyhow::anyhow;
use sqlx;
use sqlx::MySqlPool;
@@ -9,6 +8,7 @@ use enums::by_table::media_files::media_file_origin_model_type::MediaFileOriginM
use enums::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory;
use enums::by_table::media_files::media_file_type::MediaFileType;
use errors::AnyhowResult;
use tokens::tokens::anonymous_visitor_tracking::AnonymousVisitorTrackingToken;
use tokens::tokens::batch_generations::BatchGenerationToken;
use tokens::tokens::media_files::MediaFileToken;
use tokens::tokens::model_weights::ModelWeightToken;
@@ -17,9 +17,8 @@ use tokens::tokens::users::UserToken;
use crate::payloads::media_file_extra_info::media_file_extra_info::MediaFileExtraInfo;
use crate::queries::generic_inference::job::list_available_generic_inference_jobs::AvailableInferenceJob;
use crate::queries::generic_synthetic_ids::transactional_increment_generic_synthetic_id::transactional_increment_generic_synthetic_id;
use crate::queries::media_files::create::generic_insert::insert_media_file_generic::{insert_media_file_generic, InsertArgs};
// thought about this it seems like this can be a bit more geneneric instead of having this we can ...
pub struct InsertFromJobArgs<'a> {
pub pool: &'a MySqlPool,
pub job: &'a AvailableInferenceJob,
@@ -75,146 +74,40 @@ pub async fn insert_media_file_generic_from_job(
args: InsertFromJobArgs<'_>
) -> AnyhowResult<(MediaFileToken, u64)>
{
let result_token = MediaFileToken::generate();
let extra_file_modification_info = args
.maybe_extra_media_info.map(|extra| extra.to_json_string())
.transpose()?;
let mut maybe_creator_file_synthetic_id : Option<u64> = None;
let mut maybe_creator_category_synthetic_id : Option<u64> = None;
let is_batch_generated = args.maybe_batch_token.is_some();
let mut transaction = args.pool.begin().await?;
if let Some(creator_user_token) = args.job.maybe_creator_user_token.as_deref() {
let user_token = UserToken::new_from_str(creator_user_token);
let next_media_file_id = transactional_increment_generic_synthetic_id(
&user_token,
args.maybe_creator_file_synthetic_id_category,
&mut transaction
).await?;
let category_id = transactional_increment_generic_synthetic_id(
&user_token,
args.maybe_creator_category_synthetic_id_category,
&mut transaction
).await?;
maybe_creator_file_synthetic_id = Some(next_media_file_id);
maybe_creator_category_synthetic_id = Some(category_id);
}
let query_result = sqlx::query!(
r#"
INSERT INTO media_files
SET
token = ?,
media_class = ?,
media_type = ?,
origin_category = ?,
origin_product_category = ?,
maybe_origin_model_type = ?,
maybe_origin_model_token = ?,
maybe_origin_filename = ?,
is_batch_generated = ?,
maybe_batch_token = ?,
maybe_mime_type = ?,
file_size_bytes = ?,
maybe_duration_millis = ?,
maybe_audio_encoding = ?,
maybe_video_encoding = ?,
maybe_frame_width = ?,
maybe_frame_height = ?,
maybe_prompt_token = ?,
checksum_sha2 = ?,
maybe_title = ?,
maybe_text_transcript = ?,
public_bucket_directory_hash = ?,
maybe_public_bucket_prefix = ?,
maybe_public_bucket_extension = ?,
maybe_creator_user_token = ?,
maybe_creator_anonymous_visitor_token = ?,
creator_ip_address = ?,
creator_set_visibility = ?,
maybe_creator_file_synthetic_id = ?,
maybe_creator_category_synthetic_id = ?,
extra_file_modification_info = ?,
maybe_mod_user_token = ?,
is_generated_on_prem = ?,
generated_by_worker = ?,
generated_by_cluster = ?
"#,
result_token,
args.media_class.to_str(),
args.media_type.to_str(),
args.origin_category.to_str(),
args.origin_product_category.to_str(),
args.maybe_origin_model_type.map(|e| e.to_str()),
args.maybe_origin_model_token.map(|e| e.to_string()),
args.maybe_origin_filename,
is_batch_generated,
args.maybe_batch_token.map(|e| e.as_str()),
args.maybe_mime_type,
args.file_size_bytes,
args.maybe_duration_millis,
args.maybe_audio_encoding,
args.maybe_video_encoding,
args.maybe_frame_width,
args.maybe_frame_height,
args.maybe_prompt_token.map(|e| e.as_str()),
args.checksum_sha2,
args.maybe_title,
args.maybe_text_transcript,
args.public_bucket_directory_hash,
args.maybe_public_bucket_prefix,
args.maybe_public_bucket_extension,
args.job.maybe_creator_user_token.as_deref(),
args.job.maybe_creator_anonymous_visitor_token.as_deref(),
args.job.creator_ip_address,
args.job.creator_set_visibility.to_str(),
maybe_creator_file_synthetic_id,
maybe_creator_category_synthetic_id,
extra_file_modification_info,
args.maybe_mod_user_token,
args.is_generated_on_prem,
args.generated_by_worker,
args.generated_by_cluster
).execute(&mut *transaction).await;
let record_id = match query_result {
Ok(res) => res.last_insert_id(),
Err(err) => {
// TODO: handle better
//transaction.rollback().await?;
return Err(anyhow!("Mysql error: {:?}", err));
}
};
transaction.commit().await?;
Ok((result_token, record_id))
}
insert_media_file_generic(InsertArgs {
checksum_sha2: args.checksum_sha2,
creator_ip_address: &args.job.creator_ip_address,
creator_set_visibility: args.job.creator_set_visibility,
file_size_bytes: args.file_size_bytes,
generated_by_cluster: args.generated_by_cluster,
generated_by_worker: args.generated_by_worker,
is_generated_on_prem: args.is_generated_on_prem,
maybe_audio_encoding: args.maybe_audio_encoding,
maybe_batch_token: args.maybe_batch_token,
maybe_creator_anonymous_visitor_token: args.job.maybe_creator_anonymous_visitor_token_typed.as_ref(),
maybe_creator_category_synthetic_id_category: args.maybe_creator_category_synthetic_id_category,
maybe_creator_file_synthetic_id_category: args.maybe_creator_file_synthetic_id_category,
maybe_creator_user_token: args.job.maybe_creator_user_token_typed.as_ref(),
maybe_duration_millis: args.maybe_duration_millis,
maybe_extra_media_info: args.maybe_extra_media_info,
maybe_frame_height: args.maybe_frame_height,
maybe_frame_width: args.maybe_frame_width,
maybe_mime_type: args.maybe_mime_type,
maybe_mod_user_token: args.maybe_mod_user_token,
maybe_origin_filename: args.maybe_origin_filename,
maybe_origin_model_token: args.maybe_origin_model_token,
maybe_origin_model_type: args.maybe_origin_model_type,
maybe_prompt_token: args.maybe_prompt_token,
maybe_public_bucket_extension: args.maybe_public_bucket_extension,
maybe_public_bucket_prefix: args.maybe_public_bucket_prefix,
maybe_text_transcript: args.maybe_text_transcript,
maybe_title: args.maybe_title,
maybe_video_encoding: args.maybe_video_encoding,
media_class: args.media_class,
media_type: args.media_type,
origin_category: args.origin_category,
origin_product_category: args.origin_product_category,
pool: &args.pool,
public_bucket_directory_hash: args.public_bucket_directory_hash,
}).await
}