fix: 修复MaterialRepository中get_project_by_id方法的占位符实现

问题修复:
- 修复MaterialRepository.get_project_by_id总是返回None的问题
- 实现正确的项目查询逻辑,直接从projects表查询
- 解决AI分类后文件移动失败的根本原因

 技术实现:
- 在MaterialRepository中添加完整的项目查询实现
- 正确处理数据库查询和错误处理
- 支持项目不存在时返回None而不是错误

 问题解决:
- 现在AI分类完成后可以正确找到项目信息
- 文件移动到assets/分类目录功能将正常工作
- 消除了'项目不存在'的错误信息
This commit is contained in:
imeepos 2025-07-14 15:06:15 +08:00
parent 7210c15ffd
commit fbdd1bf1ea
1 changed files with 38 additions and 4 deletions

View File

@ -452,10 +452,44 @@ impl MaterialRepository {
}
/// 根据项目ID获取项目信息
pub async fn get_project_by_id(&self, _project_id: &str) -> Result<Option<crate::data::models::project::Project>> {
// 这里需要引用项目仓库暂时返回None
// 在实际实现中,应该通过依赖注入获取项目仓库
Ok(None)
pub async fn get_project_by_id(&self, project_id: &str) -> Result<Option<crate::data::models::project::Project>> {
use crate::data::models::project::Project;
use chrono::{DateTime, Utc};
let conn = self.connection.lock().unwrap();
let mut stmt = conn.prepare(
"SELECT id, name, path, description, created_at, updated_at, is_active
FROM projects WHERE id = ?1"
)?;
let result = stmt.query_row([project_id], |row| {
let created_at_str: String = row.get(4)?;
let updated_at_str: String = row.get(5)?;
let created_at = DateTime::parse_from_rfc3339(&created_at_str)
.map_err(|_| rusqlite::Error::InvalidColumnType(4, "created_at".to_string(), rusqlite::types::Type::Text))?
.with_timezone(&Utc);
let updated_at = DateTime::parse_from_rfc3339(&updated_at_str)
.map_err(|_| rusqlite::Error::InvalidColumnType(5, "updated_at".to_string(), rusqlite::types::Type::Text))?
.with_timezone(&Utc);
Ok(Project {
id: row.get(0)?,
name: row.get(1)?,
path: row.get(2)?,
description: row.get(3)?,
created_at,
updated_at,
is_active: row.get::<_, i32>(6)? != 0,
})
});
match result {
Ok(project) => Ok(Some(project)),
Err(rusqlite::Error::QueryReturnedNoRows) => Ok(None),
Err(e) => Err(e.into()),
}
}
/// 根据片段ID获取片段信息