Add core.rs API client

This commit is contained in:
2026-03-19 00:32:21 +08:00
parent a624f3df80
commit 2fb402a5a9

60
src/api/core.rs Normal file
View File

@@ -0,0 +1,60 @@
//! momentry_core API 客戶端
use anyhow::Result;
use reqwest::Client;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VideoInfo {
pub uuid: String,
pub filename: String,
pub duration_ms: u64,
pub status: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SearchResult {
pub uuid: String,
pub filename: String,
pub timestamp_ms: u64,
pub score: f32,
pub text: String,
}
pub struct CoreClient {
client: Client,
base_url: String,
}
impl CoreClient {
pub fn new(base_url: &str) -> Self {
Self {
client: Client::new(),
base_url: base_url.to_string(),
}
}
pub async fn list_videos(&self) -> Result<Vec<VideoInfo>> {
let url = format!("{}/api/v1/videos", self.base_url);
let response = self.client.get(&url).send().await?;
let videos: Vec<VideoInfo> = response.json().await?;
Ok(videos)
}
pub async fn search(&self, query: &str) -> Result<Vec<SearchResult>> {
let url = format!("{}/api/v1/search", self.base_url);
let response = self.client
.post(&url)
.json(&serde_json::json!({ "query": query }))
.send().await?;
let results: Vec<SearchResult> = response.json().await?;
Ok(results)
}
pub async fn get_video(&self, uuid: &str) -> Result<VideoInfo> {
let url = format!("{}/api/v1/lookup?uuid={}", self.base_url, uuid);
let response = self.client.get(&url).send().await?;
let video: VideoInfo = response.json().await?;
Ok(video)
}
}