From 2fb402a5a94ad5e9016805794b098f7806313417 Mon Sep 17 00:00:00 2001 From: Warren Lo Date: Thu, 19 Mar 2026 00:32:21 +0800 Subject: [PATCH] Add core.rs API client --- src/api/core.rs | 60 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/api/core.rs diff --git a/src/api/core.rs b/src/api/core.rs new file mode 100644 index 0000000..b6d91f7 --- /dev/null +++ b/src/api/core.rs @@ -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> { + let url = format!("{}/api/v1/videos", self.base_url); + let response = self.client.get(&url).send().await?; + let videos: Vec = response.json().await?; + Ok(videos) + } + + pub async fn search(&self, query: &str) -> Result> { + 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 = response.json().await?; + Ok(results) + } + + pub async fn get_video(&self, uuid: &str) -> Result { + 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) + } +}