crab_rocket_task/services/impl/
task_impl.rs

1use crate::mappers::task_mapper;
2use crate::models::task::{NewTask, Task};
3use crate::services::task_service;
4use crab_rocket_schema::establish_pg_connection;
5
6impl task_service::GetTask for Task {
7    // GOOD:
8    fn insert_single_task(task: &NewTask) -> Result<Task, Box<dyn std::error::Error>> {
9        match establish_pg_connection() {
10            Ok(mut conn) => {
11                match task_mapper::insert_task(&mut conn, task) {
12                    Ok(inserted_task) => Ok(inserted_task),
13                    Err(e) => {
14                        println!("{e:?}");
15                        Err(Box::new(e))
16                    }
17                }
18            }
19            Err(e) => {
20                println!("{e:?}");
21                Err(Box::new(e))
22            }
23        }
24    }
25
26    // GOOD:
27    fn get_all_tasks() -> Result<Vec<Task>, Box<dyn std::error::Error>> {
28        match establish_pg_connection() {
29            Ok(mut conn) => {
30                match task_mapper::fetch_all_tasks(&mut conn) {
31                    Ok(all_tasks) => {
32                        if all_tasks.len() != 0 {
33                            Ok(all_tasks)
34                        } else {
35                            println!("Empty query.");
36                            Err(Box::new(diesel::result::Error::NotFound))
37                        }
38                    }
39                    Err(e) => {
40                        // panic!("oWo! Please add task first!");
41
42                        println!("{e:?}");
43                        Err(Box::new(e))
44                    }
45                }
46            }
47            Err(e) => {
48                println!("{e:?}");
49                Err(Box::new(e))
50            }
51        }
52    }
53
54    // GOOD:
55    fn get_task_by_id(t_id: i32) -> Result<Task, Box<dyn std::error::Error>> {
56        match establish_pg_connection() {
57            Ok(mut conn) => {
58                match task_mapper::fetch_task_by_id(&mut conn, t_id) {
59                    Ok(task) => Ok(task),
60                    Err(e) => {
61                        println!("{e:?}");
62                        Err(Box::new(e))
63                    }
64                }
65            }
66            Err(e) => {
67                println!("{e:?}");
68                Err(Box::new(e))
69            }
70        }
71    }
72
73    // GOOD:
74    fn update_task_by_id(
75        t_id: i32,
76        task: &crate::models::task::PatchTask,
77    ) -> Result<Task, Box<dyn std::error::Error>> {
78        match establish_pg_connection() {
79            Ok(mut conn) => {
80                match task_mapper::update_task_by_id(&mut conn, t_id, &task) {
81                    Ok(task) => Ok(task),
82                    Err(e) => {
83                        println!("{e:?}");
84                        Err(Box::new(e))
85                    }
86                }
87            }
88            Err(e) => {
89                println!("{e:?}");
90                Err(Box::new(e))
91            }
92        }
93    }
94
95    /// ## Service impl
96    /// GOOD:
97    fn delete_task_by_id(t_id: i32) -> Result<Task, Box<dyn std::error::Error>> {
98        match establish_pg_connection() {
99            Ok(mut conn) => {
100                match task_mapper::delete_task_by_id(&mut conn, t_id) {
101                    Ok(deleted_task) => Ok(deleted_task),
102                    Err(e) => {
103                        println!("{e:?}");
104                        Err(Box::new(e))
105                    }
106                }
107            }
108            Err(e) => {
109                println!("{e:?}");
110                Err(Box::new(e))
111            }
112        }
113    }
114
115    // GOOD:
116    fn insert_full_single_task(task: &Task) -> Result<Task, Box<dyn std::error::Error>> {
117        match establish_pg_connection() {
118            Ok(mut conn) => {
119                match task_mapper::insert_full_single_task(&mut conn, task) {
120                    Ok(inserted_full_task) => Ok(inserted_full_task),
121                    Err(e) => {
122                        println!("{e:?}");
123                        Err(Box::new(e))
124                    }
125                }
126            }
127            Err(e) => {
128                println!("{e:?}");
129                Err(Box::new(e))
130            }
131        }
132    }
133
134    fn filter_tasks_by_params(
135        params: &crate::routes::task_param::TaskParam,
136    ) -> Result<Vec<Task>, Box<dyn std::error::Error>> {
137        match establish_pg_connection() {
138            Ok(mut conn) => {
139                match task_mapper::fetch_tasks_by_params(&mut conn, params) {
140                    Ok(filtered_tasks) => {
141                        if filtered_tasks.len() != 0 {
142                            Ok(filtered_tasks)
143                        } else {
144                            println!("Empty query.");
145                            Err(Box::new(diesel::result::Error::NotFound))
146                        }
147                    }
148                    Err(e) => {
149                        // panic!("oWo! Please add task first!");
150
151                        println!("{e:?}");
152                        Err(Box::new(e))
153                    }
154                }
155            }
156            Err(e) => {
157                println!("{e:?}");
158                Err(Box::new(e))
159            }
160        }
161    }
162}
163
164#[cfg(test)]
165mod tests {
166    use self::task_service::GetTask;
167    use super::*;
168    use crate::{models::task::PatchTask, routes::models::task_param::TaskParam};
169    use crab_rocket_utils::time::get_e8_time;
170
171    #[test]
172    fn test_insert_single_task() {
173        let task = NewTask::new(
174            "Get up late".to_string(),
175            None,
176            Some(get_e8_time()),
177            Some(get_e8_time()),
178            Some(4),
179        );
180        let _ = Task::insert_single_task(&task);
181    }
182
183    #[test]
184    fn test_get_all_tasks() {
185        let all_tasks = Task::get_all_tasks();
186        println!("{all_tasks:?}");
187    }
188
189    #[test]
190    fn test_get_task_by_id() {
191        let t_id = 3;
192        let task = Task::get_task_by_id(t_id);
193        println!("{task:?}");
194    }
195
196    #[test]
197    fn test_update_task_by_id() {
198        let t_id = 1;
199        let task: PatchTask = PatchTask::new(
200            "new title for put task".to_string(),
201            "hello".to_string().into(),
202            Some(4),
203        );
204        let updated_task = Task::update_task_by_id(t_id, &task);
205        println!("updated_task: {updated_task:?}");
206    }
207
208    #[test]
209    fn test_delete_task_by_id() {
210        let deleted_task = Task::delete_task_by_id(4);
211        println!("deleted_task: {deleted_task:?}");
212    }
213
214    #[test]
215    fn test_insert_full_single_task() {
216        let task = Task::new(2, "title1".to_string(), "content".to_string().into(), Some(4));
217        let inserted_task = Task::insert_full_single_task(&task);
218        println!("{inserted_task:?}");
219    }
220
221    #[test]
222    fn test_get_tasks_by_params() {
223        let params: TaskParam = TaskParam {
224            user_id: Some(2),
225            limit: Some(10),
226            offset: Some(0),
227        };
228        let filtered_tasks = Task::filter_tasks_by_params(&params);
229        println!("{filtered_tasks:?}");
230    }
231}