dev-manager-tauri/src-tauri/src/commands/activity.rs
2026-09-21 12:52:37 +09:00

47 lines
1.5 KiB
Rust

use crate::db::pool;
use crate::models::ActivityLog;
use rusqlite::params;
#[tauri::command]
pub fn get_activity(project_id: String, limit: Option<i64>) -> Result<Vec<ActivityLog>, String> {
let conn = pool().get().map_err(|e| e.to_string())?;
let lim = limit.unwrap_or(20);
let mut stmt = conn
.prepare(
"SELECT * FROM activity_log WHERE project_id = ?1 ORDER BY created_at DESC LIMIT ?2",
)
.map_err(|e| e.to_string())?;
let result = stmt
.query_map(params![project_id, lim], ActivityLog::from_row)
.map_err(|e| e.to_string())?
.collect::<Result<Vec<_>, _>>()
.map_err(|e| e.to_string());
result
}
#[tauri::command]
pub fn add_activity(project_id: String, summary: String) -> Result<(), String> {
let conn = pool().get().map_err(|e| e.to_string())?;
let exists: bool = conn
.query_row(
"SELECT 1 FROM project_workspaces WHERE id = ?1",
params![project_id],
|_| Ok(true),
)
.unwrap_or(false);
if !exists {
return Err(format!("Project not found: {project_id}"));
}
conn.execute(
"INSERT INTO activity_log (project_id, summary, created_at) VALUES (?1, ?2, datetime('now'))",
params![project_id, summary],
)
.map_err(|e| e.to_string())?;
conn.execute(
"UPDATE project_workspaces SET updated_at = datetime('now') WHERE id = ?1",
params![project_id],
)
.map_err(|e| e.to_string())?;
Ok(())
}