crab_rocket_task/services/impl/
task_impl.rs1use 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 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 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 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 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 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 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 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 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(¶ms);
229 println!("{filtered_tasks:?}");
230 }
231}