Skip to content

Commit 1e5fc91

Browse files
committed
snapshot
1 parent c02d9f3 commit 1e5fc91

10 files changed

Lines changed: 130 additions & 55 deletions

File tree

file_classification_cli/src/bin/list_files.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
use file_classification_core::database::establish_connection;
2-
use file_classification_core::{models::SearchFile, files::select_files}; // 引入select_files和SearchFile
2+
use file_classification_core::{files::select_files, models::FileFilter}; // 引入select_files和SearchFile
33

44
fn main() {
55
let connection = &mut establish_connection();
66

77
// 定义一个空的 SearchFile 来进行无条件查询
88
let search_input =
9-
SearchFile { id: None, type_: None, path: None, reference_count: None, group_id: None };
9+
FileFilter { id: None, type_: None, path: None, reference_count: None, group_id: None };
1010

1111
// 使用 select_files 函数进行查询
1212
let results = select_files(connection, search_input, 5).expect("Error loading files");

file_classification_cli/src/bin/list_groups.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
use file_classification_core::database::establish_connection;
2-
use file_classification_core::{models::SearchGroup, groups::select_groups}; // 引入select_groups和SearchGroup
2+
use file_classification_core::{groups::select_groups, models::GroupFilter}; // 引入select_groups和SearchGroup
33

44
fn main() {
55
let connection = &mut establish_connection();
66

77
// 定义一个空的 SearchGroup 来进行无条件查询
8-
let search_input = SearchGroup {
8+
let search_input = GroupFilter {
99
id: None,
1010
name: None,
1111
reference_count: None,

file_classification_cli/src/bin/list_tags.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
use file_classification_core::database::establish_connection;
2-
use file_classification_core::{models::SearchTag, tags::select_tags}; // 引入select_tags和SearchTag
2+
use file_classification_core::{models::TagFilter, tags::select_tags}; // 引入select_tags和SearchTag
33

44
fn main() {
55
let connection = &mut establish_connection();
66

77
// 定义一个空的 SearchTag 来进行无条件查询
8-
let search_input = SearchTag { id: None, name: None, reference_count: None };
8+
let search_input = TagFilter { id: None, name: None, reference_count: None };
99

1010
// 使用 select_tags 函数进行查询
1111
let results = select_tags(connection, search_input, 5).expect("Error loading tags");

file_classification_core/src/files.rs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
use crate::{
2-
database::SqliteConnection, errors::AppError,
3-
file_group::create_file_group, groups::create_group, internal::{files, groups::{find_group_by_name, mark_group_as_primary}, models::{File, Group, NewFile}}, models::SearchFile
2+
database::SqliteConnection,
3+
errors::AppError,
4+
file_group::create_file_group,
5+
groups::create_group,
6+
internal::{
7+
files,
8+
groups::{find_group_by_name, mark_group_as_primary},
9+
models::{File, Group, NewFile},
10+
},
11+
models::FileFilter,
412
};
513

614
pub fn raw_create_file(
@@ -42,8 +50,15 @@ pub fn delete_file(conn: &mut SqliteConnection, file_id: i32) -> Result<(), dies
4250
}
4351
pub fn select_files(
4452
conn: &mut SqliteConnection,
45-
search_input: SearchFile,
53+
search_input: FileFilter,
4654
limit: i64,
4755
) -> Result<Vec<File>, diesel::result::Error> {
4856
files::select_files(conn, search_input, limit)
49-
}
57+
}
58+
59+
// pub fn update_file(
60+
// conn: &mut SqliteConnection,
61+
// update_input: FileFilter,
62+
// ) -> Result<File, diesel::result::Error> {
63+
// files::update_file(conn, update_input)
64+
// }

file_classification_core/src/groups.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
use crate::{
22
errors::AppError,
3-
internal::{groups, models::{Group, NewGroup}}, models::SearchGroup,
3+
internal::{
4+
groups,
5+
models::{Group, NewGroup},
6+
},
7+
models::GroupFilter,
48
};
59
use diesel::SqliteConnection;
610

@@ -24,8 +28,8 @@ pub fn delete_group(
2428
}
2529
pub fn select_groups(
2630
conn: &mut SqliteConnection,
27-
search_input: SearchGroup,
31+
search_input: GroupFilter,
2832
limit: i64,
2933
) -> Result<Vec<Group>, diesel::result::Error> {
3034
groups::select_groups(conn, search_input, limit)
31-
}
35+
}

file_classification_core/src/internal/files.rs

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use super::{
2-
models::{File, NewFile, SearchFile},
2+
models::{File, FileFilter, NewFile, UpdateFile},
33
schema::files,
44
schema::files::dsl::*,
55
};
@@ -39,7 +39,7 @@ pub fn decrease_file_reference_count(
3939

4040
pub fn select_files(
4141
conn: &mut SqliteConnection,
42-
search_input: SearchFile,
42+
search_input: FileFilter,
4343
limit: i64,
4444
) -> Result<Vec<File>, diesel::result::Error> {
4545
// 使用 into_boxed() 来对查询进行类型擦除
@@ -66,6 +66,46 @@ pub fn select_files(
6666
base_query.load(conn)
6767
}
6868

69+
// pub fn update_file(
70+
// conn: &mut SqliteConnection,
71+
// update_input: UpdateFile,
72+
// ) -> Result<usize, diesel::result::Error> {
73+
// // 初始化更新查询
74+
// let mut query = diesel::update(files).into_boxed();
75+
76+
// // 动态设置需要更新的字段
77+
// if let Some(new_path) = update_input.set.path {
78+
// query = query.set(path.eq(new_path));
79+
// }
80+
// if let Some(new_type) = update_input.set.type_ {
81+
// query = query.set(type_.eq(new_type));
82+
// }
83+
// if let Some(new_ref_count) = update_input.set.reference_count {
84+
// query = query.set(reference_count.eq(new_ref_count));
85+
// }
86+
// if let Some(new_group) = update_input.set.group_id {
87+
// query = query.set(group_id.eq(new_group));
88+
// }
89+
90+
// // 动态添加过滤条件
91+
// if let Some(file_id) = update_input.filter.id {
92+
// query = query.filter(id.eq(file_id));
93+
// }
94+
// if let Some(file_type) = update_input.filter.type_ {
95+
// query = query.filter(type_.eq(file_type));
96+
// }
97+
// if let Some(file_path) = update_input.filter.path {
98+
// query = query.filter(path.eq(file_path));
99+
// }
100+
// if let Some(ref_count) = update_input.filter.reference_count {
101+
// query = query.filter(reference_count.eq(ref_count));
102+
// }
103+
// if let Some(group) = update_input.filter.group_id {
104+
// query = query.filter(group_id.eq(group));
105+
// }
106+
// query.load(conn)
107+
// }
108+
69109
pub fn delete_file(conn: &mut SqliteConnection, file_id: i32) -> Result<(), diesel::result::Error> {
70110
match diesel::delete(files.filter(files::id.eq(file_id))).execute(conn) {
71111
Ok(_) => Ok(()),

file_classification_core/src/internal/groups.rs

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
use crate::
2-
errors::AppError;
3-
use diesel::prelude::*;
41
use super::{
5-
models::{Group, NewGroup,SearchGroup},
2+
models::{Group, GroupFilter, NewGroup},
63
schema::groups,
74
schema::groups::dsl::*,
85
};
6+
use crate::errors::AppError;
7+
use diesel::prelude::*;
98
pub fn create_group(conn: &mut SqliteConnection, new_group: &NewGroup) -> Result<Group, AppError> {
109
diesel::insert_into(groups::table)
1110
.values(new_group)
@@ -18,7 +17,6 @@ pub fn find_group_by_name(
1817
conn: &mut SqliteConnection,
1918
group_name: &str,
2019
) -> Result<Option<Group>, AppError> {
21-
2220
let group = groups
2321
.select(Group::as_select())
2422
.filter(groups::name.eq(group_name))
@@ -30,7 +28,6 @@ pub fn find_group_by_id(
3028
conn: &mut SqliteConnection,
3129
group_id: i32,
3230
) -> Result<Option<Group>, AppError> {
33-
3431
let group = groups
3532
.select(Group::as_select())
3633
.filter(groups::id.eq(group_id))
@@ -39,11 +36,7 @@ pub fn find_group_by_id(
3936
Ok(group)
4037
}
4138

42-
pub fn mark_group_as_primary(
43-
conn: &mut SqliteConnection,
44-
group_id: i32,
45-
) -> Result<(), AppError> {
46-
39+
pub fn mark_group_as_primary(conn: &mut SqliteConnection, group_id: i32) -> Result<(), AppError> {
4740
diesel::update(groups::table)
4841
.filter(groups::id.eq(group_id))
4942
.set(groups::is_primary.eq(true))
@@ -61,10 +54,9 @@ pub fn mark_group_as_non_primary(conn: &mut SqliteConnection) -> Result<(), AppE
6154

6255
pub fn select_groups(
6356
conn: &mut SqliteConnection,
64-
search_input: SearchGroup,
57+
search_input: GroupFilter,
6558
limit: i64,
6659
) -> Result<Vec<Group>, diesel::result::Error> {
67-
6860
// 使用 into_boxed() 来对查询进行类型擦除
6961
let mut base_query = groups.limit(limit).select(Group::as_select()).into_boxed();
7062

@@ -113,7 +105,6 @@ pub fn increase_group_reference_count(
113105
conn: &mut SqliteConnection,
114106
group_id: i32,
115107
) -> Result<(), AppError> {
116-
117108
diesel::update(groups::table.find(group_id))
118109
.set(groups::reference_count.eq(groups::reference_count + 1))
119110
.execute(conn)?;
@@ -125,7 +116,6 @@ pub fn decrease_group_reference_count(
125116
conn: &mut SqliteConnection,
126117
group_id: i32,
127118
) -> Result<(), AppError> {
128-
129119
diesel::update(groups::table.find(group_id))
130120
.set(groups::reference_count.eq(groups::reference_count - 1))
131121
.execute(conn)?;
@@ -147,4 +137,4 @@ impl Debug for Group {
147137
self.modify_time
148138
)
149139
}
150-
}
140+
}

file_classification_core/src/internal/models.rs

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,26 @@ pub struct NewFile<'a, 'b> {
2525

2626
// NOTE: you may find File is like SearchFile
2727
// it is bcs IDK how to unify them
28-
pub struct SearchFile {
28+
pub struct FileFilter {
2929
pub id: Option<i32>,
3030
pub type_: Option<String>,
3131
pub path: Option<String>,
3232
pub reference_count: Option<i32>,
3333
pub group_id: Option<i32>,
3434
}
3535

36+
struct FileSet {
37+
pub path: Option<String>,
38+
pub type_: Option<String>,
39+
pub reference_count: Option<i32>,
40+
pub group_id: Option<i32>,
41+
}
42+
43+
pub struct UpdateFile {
44+
pub set: FileSet,
45+
pub filter: FileFilter,
46+
}
47+
3648
// Group Related
3749

3850
#[derive(Queryable, Selectable)]
@@ -57,7 +69,7 @@ pub struct NewGroup<'a> {
5769

5870
// NOTE: you may find File is like SearchFile
5971
// it is bcs IDK how to unify them
60-
pub struct SearchGroup {
72+
pub struct GroupFilter {
6173
pub id: Option<i32>,
6274
pub name: Option<String>,
6375
pub reference_count: Option<i32>,
@@ -68,6 +80,21 @@ pub struct SearchGroup {
6880
pub modify_time: Option<chrono::NaiveDateTime>,
6981
}
7082

83+
struct GroupSet {
84+
pub name: Option<String>,
85+
pub reference_count: Option<i32>,
86+
pub is_primary: Option<bool>,
87+
pub click_count: Option<i32>,
88+
pub share_count: Option<i32>,
89+
pub create_time: Option<chrono::NaiveDateTime>,
90+
pub modify_time: Option<chrono::NaiveDateTime>,
91+
}
92+
93+
pub struct UpdateGroup {
94+
pub set: GroupSet,
95+
pub filter: GroupFilter,
96+
}
97+
7198
// Tag Related
7299

73100
#[derive(Queryable, Selectable)]
@@ -85,12 +112,22 @@ pub struct NewTag<'a> {
85112
pub name: &'a str,
86113
}
87114

88-
pub struct SearchTag {
115+
pub struct TagFilter {
89116
pub id: Option<i32>,
90117
pub name: Option<String>,
91118
pub reference_count: Option<i32>,
92119
}
93120

121+
pub struct TagSet {
122+
pub name: Option<String>,
123+
pub reference_count: Option<i32>,
124+
}
125+
126+
pub struct UpdateTag {
127+
pub set: TagSet,
128+
pub filter: TagFilter,
129+
}
130+
94131
// FileGroup Related
95132

96133
// NOTE: FileGroup == NewFileGroup

0 commit comments

Comments
 (0)