mirror of
https://github.com/fawney19/Aether.git
synced 2026-10-10 19:29:50 +08:00
refactor: 拆分 gateway 单体为独立 crate,新增 systemd 部署方案
将 gateway 内部的 model-fetch、provider-transport、scheduler-core、 usage-runtime、video-tasks-core 模块提取为独立 crate;重构 gateway 内部模块结构(state/router/cache/data/query 等);移除大量遗留模块 文件;新增 systemd 二进制部署骨架及相关文档;更新前端 usage 相关 API 和组件。
This commit is contained in:
@@ -0,0 +1,179 @@
|
||||
use super::{AppState, GatewayError};
|
||||
|
||||
use crate::{async_task, video_tasks};
|
||||
|
||||
impl AppState {
|
||||
pub(crate) async fn read_data_backed_video_task_response(
|
||||
&self,
|
||||
route_family: Option<&str>,
|
||||
request_path: &str,
|
||||
) -> Result<Option<video_tasks::LocalVideoTaskReadResponse>, GatewayError> {
|
||||
self.data
|
||||
.read_video_task_response(route_family, request_path)
|
||||
.await
|
||||
.map_err(|err| GatewayError::Internal(err.to_string()))
|
||||
}
|
||||
|
||||
pub(crate) async fn find_video_task_by_id(
|
||||
&self,
|
||||
task_id: &str,
|
||||
) -> Result<Option<aether_data::repository::video_tasks::StoredVideoTask>, GatewayError> {
|
||||
self.data
|
||||
.find_video_task(aether_data::repository::video_tasks::VideoTaskLookupKey::Id(task_id))
|
||||
.await
|
||||
.map_err(|err| GatewayError::Internal(err.to_string()))
|
||||
}
|
||||
|
||||
pub(crate) async fn find_video_task_by_short_id(
|
||||
&self,
|
||||
short_id: &str,
|
||||
) -> Result<Option<aether_data::repository::video_tasks::StoredVideoTask>, GatewayError> {
|
||||
self.data
|
||||
.find_video_task(
|
||||
aether_data::repository::video_tasks::VideoTaskLookupKey::ShortId(short_id),
|
||||
)
|
||||
.await
|
||||
.map_err(|err| GatewayError::Internal(err.to_string()))
|
||||
}
|
||||
|
||||
pub(crate) async fn upsert_video_task_snapshot(
|
||||
&self,
|
||||
snapshot: &video_tasks::LocalVideoTaskSnapshot,
|
||||
) -> Result<Option<aether_data::repository::video_tasks::StoredVideoTask>, GatewayError> {
|
||||
self.data
|
||||
.upsert_video_task(snapshot.to_upsert_record())
|
||||
.await
|
||||
.map_err(|err| GatewayError::Internal(err.to_string()))
|
||||
}
|
||||
|
||||
pub(crate) async fn hydrate_video_task_for_route(
|
||||
&self,
|
||||
route_family: Option<&str>,
|
||||
request_path: &str,
|
||||
) -> Result<bool, GatewayError> {
|
||||
let lookup =
|
||||
video_tasks::resolve_video_task_hydration_lookup_key(route_family, request_path);
|
||||
let Some(lookup) = lookup else {
|
||||
return Ok(false);
|
||||
};
|
||||
let Some(task) = self
|
||||
.data
|
||||
.find_video_task(lookup)
|
||||
.await
|
||||
.map_err(|err| GatewayError::Internal(err.to_string()))?
|
||||
else {
|
||||
return Ok(false);
|
||||
};
|
||||
if self.video_tasks.hydrate_from_stored_task(&task) {
|
||||
return Ok(true);
|
||||
}
|
||||
|
||||
let Some(snapshot) = self.reconstruct_video_task_snapshot(&task).await? else {
|
||||
return Ok(false);
|
||||
};
|
||||
self.video_tasks.record_snapshot(snapshot);
|
||||
Ok(true)
|
||||
}
|
||||
|
||||
pub(crate) async fn reconstruct_video_task_snapshot(
|
||||
&self,
|
||||
task: &aether_data::repository::video_tasks::StoredVideoTask,
|
||||
) -> Result<Option<video_tasks::LocalVideoTaskSnapshot>, GatewayError> {
|
||||
crate::provider_transport::reconstruct_local_video_task_snapshot(self, task)
|
||||
.await
|
||||
.map_err(GatewayError::Internal)
|
||||
}
|
||||
|
||||
pub(crate) async fn claim_due_video_tasks(
|
||||
&self,
|
||||
now_unix_secs: u64,
|
||||
claim_until_unix_secs: u64,
|
||||
limit: usize,
|
||||
) -> Result<Vec<aether_data::repository::video_tasks::StoredVideoTask>, GatewayError> {
|
||||
self.data
|
||||
.claim_due_video_tasks(now_unix_secs, claim_until_unix_secs, limit)
|
||||
.await
|
||||
.map_err(|err| GatewayError::Internal(err.to_string()))
|
||||
}
|
||||
|
||||
pub(crate) async fn update_active_video_task(
|
||||
&self,
|
||||
task: aether_data::repository::video_tasks::UpsertVideoTask,
|
||||
) -> Result<Option<aether_data::repository::video_tasks::StoredVideoTask>, GatewayError> {
|
||||
self.data
|
||||
.update_active_video_task(task)
|
||||
.await
|
||||
.map_err(|err| GatewayError::Internal(err.to_string()))
|
||||
}
|
||||
|
||||
pub(crate) async fn list_video_task_page(
|
||||
&self,
|
||||
filter: &aether_data::repository::video_tasks::VideoTaskQueryFilter,
|
||||
offset: usize,
|
||||
limit: usize,
|
||||
) -> Result<Vec<aether_data::repository::video_tasks::StoredVideoTask>, GatewayError> {
|
||||
self.data
|
||||
.list_video_task_page(filter, offset, limit)
|
||||
.await
|
||||
.map_err(|err| GatewayError::Internal(err.to_string()))
|
||||
}
|
||||
|
||||
pub(crate) async fn count_video_tasks(
|
||||
&self,
|
||||
filter: &aether_data::repository::video_tasks::VideoTaskQueryFilter,
|
||||
) -> Result<u64, GatewayError> {
|
||||
self.data
|
||||
.count_video_tasks(filter)
|
||||
.await
|
||||
.map_err(|err| GatewayError::Internal(err.to_string()))
|
||||
}
|
||||
|
||||
pub(crate) async fn count_video_tasks_by_status(
|
||||
&self,
|
||||
filter: &aether_data::repository::video_tasks::VideoTaskQueryFilter,
|
||||
) -> Result<Vec<aether_data::repository::video_tasks::VideoTaskStatusCount>, GatewayError> {
|
||||
self.data
|
||||
.count_video_tasks_by_status(filter)
|
||||
.await
|
||||
.map_err(|err| GatewayError::Internal(err.to_string()))
|
||||
}
|
||||
|
||||
pub(crate) async fn count_distinct_video_task_users(
|
||||
&self,
|
||||
filter: &aether_data::repository::video_tasks::VideoTaskQueryFilter,
|
||||
) -> Result<u64, GatewayError> {
|
||||
self.data
|
||||
.count_distinct_video_task_users(filter)
|
||||
.await
|
||||
.map_err(|err| GatewayError::Internal(err.to_string()))
|
||||
}
|
||||
|
||||
pub(crate) async fn top_video_task_models(
|
||||
&self,
|
||||
filter: &aether_data::repository::video_tasks::VideoTaskQueryFilter,
|
||||
limit: usize,
|
||||
) -> Result<Vec<aether_data::repository::video_tasks::VideoTaskModelCount>, GatewayError> {
|
||||
self.data
|
||||
.top_video_task_models(filter, limit)
|
||||
.await
|
||||
.map_err(|err| GatewayError::Internal(err.to_string()))
|
||||
}
|
||||
|
||||
pub(crate) async fn count_video_tasks_created_since(
|
||||
&self,
|
||||
filter: &aether_data::repository::video_tasks::VideoTaskQueryFilter,
|
||||
created_since_unix_secs: u64,
|
||||
) -> Result<u64, GatewayError> {
|
||||
self.data
|
||||
.count_video_tasks_created_since(filter, created_since_unix_secs)
|
||||
.await
|
||||
.map_err(|err| GatewayError::Internal(err.to_string()))
|
||||
}
|
||||
|
||||
pub(crate) async fn execute_video_task_refresh_plan(
|
||||
&self,
|
||||
refresh_plan: &video_tasks::LocalVideoTaskReadRefreshPlan,
|
||||
) -> Result<bool, GatewayError> {
|
||||
async_task::execute_video_task_refresh_plan(self, refresh_plan).await
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user