2026-04-04 01:40:24 +08:00
|
|
|
use std::sync::Arc;
|
|
|
|
|
|
2026-04-07 02:50:19 +08:00
|
|
|
use aether_data_contracts::repository::candidates::RequestCandidateRepository;
|
|
|
|
|
use aether_data_contracts::repository::video_tasks::VideoTaskRepository;
|
|
|
|
|
|
2026-04-04 01:40:24 +08:00
|
|
|
use super::{
|
|
|
|
|
AuthApiKeyReadRepository, GatewayDataConfig, GatewayDataState, ProviderCatalogReadRepository,
|
|
|
|
|
RequestCandidateReadRepository, RequestCandidateWriteRepository, VideoTaskReadRepository,
|
|
|
|
|
VideoTaskWriteRepository,
|
|
|
|
|
};
|
2026-04-03 14:59:58 +08:00
|
|
|
|
|
|
|
|
impl GatewayDataState {
|
|
|
|
|
pub(crate) fn with_video_task_reader_for_tests(
|
|
|
|
|
repository: Arc<dyn VideoTaskReadRepository>,
|
|
|
|
|
) -> Self {
|
|
|
|
|
Self {
|
|
|
|
|
config: GatewayDataConfig::disabled(),
|
|
|
|
|
backends: None,
|
|
|
|
|
auth_api_key_reader: None,
|
|
|
|
|
auth_api_key_writer: None,
|
|
|
|
|
auth_module_reader: None,
|
|
|
|
|
auth_module_writer: None,
|
|
|
|
|
announcement_reader: None,
|
|
|
|
|
announcement_writer: None,
|
|
|
|
|
management_token_reader: None,
|
|
|
|
|
management_token_writer: None,
|
|
|
|
|
oauth_provider_reader: None,
|
|
|
|
|
oauth_provider_writer: None,
|
|
|
|
|
proxy_node_reader: None,
|
|
|
|
|
proxy_node_writer: None,
|
|
|
|
|
billing_reader: None,
|
|
|
|
|
gemini_file_mapping_reader: None,
|
|
|
|
|
gemini_file_mapping_writer: None,
|
|
|
|
|
global_model_reader: None,
|
|
|
|
|
global_model_writer: None,
|
|
|
|
|
minimal_candidate_selection_reader: None,
|
|
|
|
|
request_candidate_reader: None,
|
|
|
|
|
request_candidate_writer: None,
|
|
|
|
|
provider_catalog_reader: None,
|
|
|
|
|
provider_catalog_writer: None,
|
2026-05-12 01:46:22 +08:00
|
|
|
pool_score_reader: None,
|
|
|
|
|
pool_score_writer: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
provider_quota_reader: None,
|
|
|
|
|
provider_quota_writer: None,
|
2026-05-18 11:03:49 +08:00
|
|
|
routing_group_reader: None,
|
|
|
|
|
routing_group_writer: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
usage_reader: None,
|
|
|
|
|
usage_writer: None,
|
|
|
|
|
user_reader: None,
|
|
|
|
|
user_preferences: None,
|
2026-05-08 00:18:12 +08:00
|
|
|
usage_worker_queue: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
video_task_reader: Some(repository),
|
|
|
|
|
video_task_writer: None,
|
2026-05-09 21:19:29 +08:00
|
|
|
background_task_reader: None,
|
|
|
|
|
background_task_writer: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
wallet_reader: None,
|
|
|
|
|
wallet_writer: None,
|
2026-04-05 20:23:16 +08:00
|
|
|
settlement_writer: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
system_config_values: None,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-04 01:40:24 +08:00
|
|
|
#[cfg(test)]
|
|
|
|
|
pub(crate) fn with_auth_and_video_task_repository_for_tests<T>(
|
|
|
|
|
auth_repository: Arc<dyn AuthApiKeyReadRepository>,
|
|
|
|
|
repository: Arc<T>,
|
|
|
|
|
) -> Self
|
|
|
|
|
where
|
2026-04-07 02:50:19 +08:00
|
|
|
T: VideoTaskRepository + 'static,
|
2026-04-04 01:40:24 +08:00
|
|
|
{
|
|
|
|
|
let video_task_reader: Arc<dyn VideoTaskReadRepository> = repository.clone();
|
|
|
|
|
let video_task_writer: Arc<dyn VideoTaskWriteRepository> = repository;
|
|
|
|
|
|
|
|
|
|
Self {
|
|
|
|
|
config: GatewayDataConfig::disabled(),
|
|
|
|
|
backends: None,
|
|
|
|
|
auth_api_key_reader: Some(auth_repository),
|
|
|
|
|
auth_api_key_writer: None,
|
|
|
|
|
auth_module_reader: None,
|
|
|
|
|
auth_module_writer: None,
|
|
|
|
|
announcement_reader: None,
|
|
|
|
|
announcement_writer: None,
|
|
|
|
|
management_token_reader: None,
|
|
|
|
|
management_token_writer: None,
|
|
|
|
|
oauth_provider_reader: None,
|
|
|
|
|
oauth_provider_writer: None,
|
|
|
|
|
proxy_node_reader: None,
|
|
|
|
|
proxy_node_writer: None,
|
|
|
|
|
billing_reader: None,
|
|
|
|
|
gemini_file_mapping_reader: None,
|
|
|
|
|
gemini_file_mapping_writer: None,
|
|
|
|
|
global_model_reader: None,
|
|
|
|
|
global_model_writer: None,
|
|
|
|
|
minimal_candidate_selection_reader: None,
|
|
|
|
|
request_candidate_reader: None,
|
|
|
|
|
request_candidate_writer: None,
|
|
|
|
|
provider_catalog_reader: None,
|
|
|
|
|
provider_catalog_writer: None,
|
2026-05-12 01:46:22 +08:00
|
|
|
pool_score_reader: None,
|
|
|
|
|
pool_score_writer: None,
|
2026-04-04 01:40:24 +08:00
|
|
|
provider_quota_reader: None,
|
|
|
|
|
provider_quota_writer: None,
|
2026-05-18 11:03:49 +08:00
|
|
|
routing_group_reader: None,
|
|
|
|
|
routing_group_writer: None,
|
2026-04-04 01:40:24 +08:00
|
|
|
usage_reader: None,
|
|
|
|
|
usage_writer: None,
|
|
|
|
|
user_reader: None,
|
|
|
|
|
user_preferences: None,
|
2026-05-08 00:18:12 +08:00
|
|
|
usage_worker_queue: None,
|
2026-04-04 01:40:24 +08:00
|
|
|
video_task_reader: Some(video_task_reader),
|
|
|
|
|
video_task_writer: Some(video_task_writer),
|
2026-05-09 21:19:29 +08:00
|
|
|
background_task_reader: None,
|
|
|
|
|
background_task_writer: None,
|
2026-04-04 01:40:24 +08:00
|
|
|
wallet_reader: None,
|
|
|
|
|
wallet_writer: None,
|
2026-04-05 20:23:16 +08:00
|
|
|
settlement_writer: None,
|
2026-04-04 01:40:24 +08:00
|
|
|
system_config_values: None,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-03 14:59:58 +08:00
|
|
|
#[cfg(test)]
|
|
|
|
|
pub(crate) fn with_video_task_repository_for_tests<T>(repository: Arc<T>) -> Self
|
|
|
|
|
where
|
2026-04-07 02:50:19 +08:00
|
|
|
T: VideoTaskRepository + 'static,
|
2026-04-03 14:59:58 +08:00
|
|
|
{
|
|
|
|
|
let video_task_reader: Arc<dyn VideoTaskReadRepository> = repository.clone();
|
|
|
|
|
let video_task_writer: Arc<dyn VideoTaskWriteRepository> = repository;
|
|
|
|
|
|
|
|
|
|
Self {
|
|
|
|
|
config: GatewayDataConfig::disabled(),
|
|
|
|
|
backends: None,
|
|
|
|
|
auth_api_key_reader: None,
|
|
|
|
|
auth_api_key_writer: None,
|
|
|
|
|
auth_module_reader: None,
|
|
|
|
|
auth_module_writer: None,
|
|
|
|
|
announcement_reader: None,
|
|
|
|
|
announcement_writer: None,
|
|
|
|
|
management_token_reader: None,
|
|
|
|
|
management_token_writer: None,
|
|
|
|
|
oauth_provider_reader: None,
|
|
|
|
|
oauth_provider_writer: None,
|
|
|
|
|
proxy_node_reader: None,
|
|
|
|
|
proxy_node_writer: None,
|
|
|
|
|
billing_reader: None,
|
|
|
|
|
gemini_file_mapping_reader: None,
|
|
|
|
|
gemini_file_mapping_writer: None,
|
|
|
|
|
global_model_reader: None,
|
|
|
|
|
global_model_writer: None,
|
|
|
|
|
minimal_candidate_selection_reader: None,
|
|
|
|
|
request_candidate_reader: None,
|
|
|
|
|
request_candidate_writer: None,
|
|
|
|
|
provider_catalog_reader: None,
|
|
|
|
|
provider_catalog_writer: None,
|
2026-05-12 01:46:22 +08:00
|
|
|
pool_score_reader: None,
|
|
|
|
|
pool_score_writer: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
provider_quota_reader: None,
|
|
|
|
|
provider_quota_writer: None,
|
2026-05-18 11:03:49 +08:00
|
|
|
routing_group_reader: None,
|
|
|
|
|
routing_group_writer: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
usage_reader: None,
|
|
|
|
|
usage_writer: None,
|
|
|
|
|
user_reader: None,
|
|
|
|
|
user_preferences: None,
|
2026-05-08 00:18:12 +08:00
|
|
|
usage_worker_queue: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
video_task_reader: Some(video_task_reader),
|
|
|
|
|
video_task_writer: Some(video_task_writer),
|
2026-05-09 21:19:29 +08:00
|
|
|
background_task_reader: None,
|
|
|
|
|
background_task_writer: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
wallet_reader: None,
|
|
|
|
|
wallet_writer: None,
|
2026-04-05 20:23:16 +08:00
|
|
|
settlement_writer: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
system_config_values: None,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
|
pub(crate) fn with_video_task_repository_and_provider_transport_for_tests<T>(
|
|
|
|
|
repository: Arc<T>,
|
|
|
|
|
provider_catalog_repository: Arc<dyn ProviderCatalogReadRepository>,
|
|
|
|
|
encryption_key: impl Into<String>,
|
|
|
|
|
) -> Self
|
|
|
|
|
where
|
2026-04-07 02:50:19 +08:00
|
|
|
T: VideoTaskRepository + 'static,
|
2026-04-03 14:59:58 +08:00
|
|
|
{
|
|
|
|
|
let video_task_reader: Arc<dyn VideoTaskReadRepository> = repository.clone();
|
|
|
|
|
let video_task_writer: Arc<dyn VideoTaskWriteRepository> = repository;
|
|
|
|
|
|
|
|
|
|
Self {
|
|
|
|
|
config: GatewayDataConfig::disabled().with_encryption_key(encryption_key),
|
|
|
|
|
backends: None,
|
|
|
|
|
auth_api_key_reader: None,
|
|
|
|
|
auth_api_key_writer: None,
|
|
|
|
|
auth_module_reader: None,
|
|
|
|
|
auth_module_writer: None,
|
|
|
|
|
announcement_reader: None,
|
|
|
|
|
announcement_writer: None,
|
|
|
|
|
management_token_reader: None,
|
|
|
|
|
management_token_writer: None,
|
|
|
|
|
oauth_provider_reader: None,
|
|
|
|
|
oauth_provider_writer: None,
|
|
|
|
|
proxy_node_reader: None,
|
|
|
|
|
proxy_node_writer: None,
|
|
|
|
|
billing_reader: None,
|
|
|
|
|
gemini_file_mapping_reader: None,
|
|
|
|
|
gemini_file_mapping_writer: None,
|
|
|
|
|
global_model_reader: None,
|
|
|
|
|
global_model_writer: None,
|
|
|
|
|
minimal_candidate_selection_reader: None,
|
|
|
|
|
request_candidate_reader: None,
|
|
|
|
|
request_candidate_writer: None,
|
|
|
|
|
provider_catalog_reader: Some(provider_catalog_repository),
|
|
|
|
|
provider_catalog_writer: None,
|
2026-05-12 01:46:22 +08:00
|
|
|
pool_score_reader: None,
|
|
|
|
|
pool_score_writer: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
provider_quota_reader: None,
|
|
|
|
|
provider_quota_writer: None,
|
2026-05-18 11:03:49 +08:00
|
|
|
routing_group_reader: None,
|
|
|
|
|
routing_group_writer: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
usage_reader: None,
|
|
|
|
|
usage_writer: None,
|
|
|
|
|
user_reader: None,
|
|
|
|
|
user_preferences: None,
|
2026-05-08 00:18:12 +08:00
|
|
|
usage_worker_queue: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
video_task_reader: Some(video_task_reader),
|
|
|
|
|
video_task_writer: Some(video_task_writer),
|
2026-05-09 21:19:29 +08:00
|
|
|
background_task_reader: None,
|
|
|
|
|
background_task_writer: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
wallet_reader: None,
|
|
|
|
|
wallet_writer: None,
|
2026-04-05 20:23:16 +08:00
|
|
|
settlement_writer: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
system_config_values: None,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
|
pub(crate) fn with_video_task_and_request_candidate_repository_for_tests<T, U>(
|
|
|
|
|
repository: Arc<T>,
|
|
|
|
|
request_candidate_repository: Arc<U>,
|
|
|
|
|
) -> Self
|
|
|
|
|
where
|
2026-04-07 02:50:19 +08:00
|
|
|
T: VideoTaskRepository + 'static,
|
|
|
|
|
U: RequestCandidateRepository + 'static,
|
2026-04-03 14:59:58 +08:00
|
|
|
{
|
|
|
|
|
let video_task_reader: Arc<dyn VideoTaskReadRepository> = repository.clone();
|
|
|
|
|
let video_task_writer: Arc<dyn VideoTaskWriteRepository> = repository;
|
|
|
|
|
let request_candidate_reader: Arc<dyn RequestCandidateReadRepository> =
|
|
|
|
|
request_candidate_repository.clone();
|
|
|
|
|
let request_candidate_writer: Arc<dyn RequestCandidateWriteRepository> =
|
|
|
|
|
request_candidate_repository;
|
|
|
|
|
|
|
|
|
|
Self {
|
|
|
|
|
config: GatewayDataConfig::disabled(),
|
|
|
|
|
backends: None,
|
|
|
|
|
auth_api_key_reader: None,
|
|
|
|
|
auth_api_key_writer: None,
|
|
|
|
|
auth_module_reader: None,
|
|
|
|
|
auth_module_writer: None,
|
|
|
|
|
announcement_reader: None,
|
|
|
|
|
announcement_writer: None,
|
|
|
|
|
management_token_reader: None,
|
|
|
|
|
management_token_writer: None,
|
|
|
|
|
oauth_provider_reader: None,
|
|
|
|
|
oauth_provider_writer: None,
|
|
|
|
|
proxy_node_reader: None,
|
|
|
|
|
proxy_node_writer: None,
|
|
|
|
|
billing_reader: None,
|
|
|
|
|
gemini_file_mapping_reader: None,
|
|
|
|
|
gemini_file_mapping_writer: None,
|
|
|
|
|
global_model_reader: None,
|
|
|
|
|
global_model_writer: None,
|
|
|
|
|
minimal_candidate_selection_reader: None,
|
|
|
|
|
request_candidate_reader: Some(request_candidate_reader),
|
|
|
|
|
request_candidate_writer: Some(request_candidate_writer),
|
|
|
|
|
provider_catalog_reader: None,
|
|
|
|
|
provider_catalog_writer: None,
|
2026-05-12 01:46:22 +08:00
|
|
|
pool_score_reader: None,
|
|
|
|
|
pool_score_writer: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
provider_quota_reader: None,
|
|
|
|
|
provider_quota_writer: None,
|
2026-05-18 11:03:49 +08:00
|
|
|
routing_group_reader: None,
|
|
|
|
|
routing_group_writer: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
usage_reader: None,
|
|
|
|
|
usage_writer: None,
|
|
|
|
|
user_reader: None,
|
|
|
|
|
user_preferences: None,
|
2026-05-08 00:18:12 +08:00
|
|
|
usage_worker_queue: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
video_task_reader: Some(video_task_reader),
|
|
|
|
|
video_task_writer: Some(video_task_writer),
|
2026-05-09 21:19:29 +08:00
|
|
|
background_task_reader: None,
|
|
|
|
|
background_task_writer: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
wallet_reader: None,
|
|
|
|
|
wallet_writer: None,
|
2026-04-05 20:23:16 +08:00
|
|
|
settlement_writer: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
system_config_values: None,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
|
pub(crate) fn with_video_task_provider_transport_and_request_candidate_repository_for_tests<
|
|
|
|
|
T,
|
|
|
|
|
U,
|
|
|
|
|
V,
|
|
|
|
|
>(
|
|
|
|
|
repository: Arc<T>,
|
|
|
|
|
provider_catalog_repository: Arc<U>,
|
|
|
|
|
request_candidate_repository: Arc<V>,
|
|
|
|
|
encryption_key: impl Into<String>,
|
|
|
|
|
) -> Self
|
|
|
|
|
where
|
2026-04-07 02:50:19 +08:00
|
|
|
T: VideoTaskRepository + 'static,
|
2026-04-03 14:59:58 +08:00
|
|
|
U: ProviderCatalogReadRepository + 'static,
|
2026-04-07 02:50:19 +08:00
|
|
|
V: RequestCandidateRepository + 'static,
|
2026-04-03 14:59:58 +08:00
|
|
|
{
|
|
|
|
|
let video_task_reader: Arc<dyn VideoTaskReadRepository> = repository.clone();
|
|
|
|
|
let video_task_writer: Arc<dyn VideoTaskWriteRepository> = repository;
|
|
|
|
|
let request_candidate_reader: Arc<dyn RequestCandidateReadRepository> =
|
|
|
|
|
request_candidate_repository.clone();
|
|
|
|
|
let request_candidate_writer: Arc<dyn RequestCandidateWriteRepository> =
|
|
|
|
|
request_candidate_repository;
|
|
|
|
|
let provider_catalog_reader: Arc<dyn ProviderCatalogReadRepository> =
|
|
|
|
|
provider_catalog_repository;
|
|
|
|
|
|
|
|
|
|
Self {
|
|
|
|
|
config: GatewayDataConfig::disabled().with_encryption_key(encryption_key),
|
|
|
|
|
backends: None,
|
|
|
|
|
auth_api_key_reader: None,
|
|
|
|
|
auth_api_key_writer: None,
|
|
|
|
|
auth_module_reader: None,
|
|
|
|
|
auth_module_writer: None,
|
|
|
|
|
announcement_reader: None,
|
|
|
|
|
announcement_writer: None,
|
|
|
|
|
management_token_reader: None,
|
|
|
|
|
management_token_writer: None,
|
|
|
|
|
oauth_provider_reader: None,
|
|
|
|
|
oauth_provider_writer: None,
|
|
|
|
|
proxy_node_reader: None,
|
|
|
|
|
proxy_node_writer: None,
|
|
|
|
|
billing_reader: None,
|
|
|
|
|
gemini_file_mapping_reader: None,
|
|
|
|
|
gemini_file_mapping_writer: None,
|
|
|
|
|
global_model_reader: None,
|
|
|
|
|
global_model_writer: None,
|
|
|
|
|
minimal_candidate_selection_reader: None,
|
|
|
|
|
request_candidate_reader: Some(request_candidate_reader),
|
|
|
|
|
request_candidate_writer: Some(request_candidate_writer),
|
|
|
|
|
provider_catalog_reader: Some(provider_catalog_reader),
|
|
|
|
|
provider_catalog_writer: None,
|
2026-05-12 01:46:22 +08:00
|
|
|
pool_score_reader: None,
|
|
|
|
|
pool_score_writer: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
provider_quota_reader: None,
|
|
|
|
|
provider_quota_writer: None,
|
2026-05-18 11:03:49 +08:00
|
|
|
routing_group_reader: None,
|
|
|
|
|
routing_group_writer: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
usage_reader: None,
|
|
|
|
|
usage_writer: None,
|
|
|
|
|
user_reader: None,
|
|
|
|
|
user_preferences: None,
|
2026-05-08 00:18:12 +08:00
|
|
|
usage_worker_queue: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
video_task_reader: Some(video_task_reader),
|
|
|
|
|
video_task_writer: Some(video_task_writer),
|
2026-05-09 21:19:29 +08:00
|
|
|
background_task_reader: None,
|
|
|
|
|
background_task_writer: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
wallet_reader: None,
|
|
|
|
|
wallet_writer: None,
|
2026-04-05 20:23:16 +08:00
|
|
|
settlement_writer: None,
|
2026-04-03 14:59:58 +08:00
|
|
|
system_config_values: None,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|