custom_arrays/model/service/
service_impl.rs
1use crate::model::endpoint_type::Endpoint;
2use crate::model::service::{CreateService, Service, UpdateService};
3use crate::schema::smdb::service::dsl::*;
4use crate::Connection;
5use diesel::{
6 insert_into, ExpressionMethods, OptionalExtension, QueryDsl, QueryResult, RunQueryDsl,
7 SelectableHelper,
8};
9
10impl Service {
11 pub fn create(db: &mut Connection, item: &CreateService) -> QueryResult<Self> {
12 insert_into(crate::schema::smdb::service::table)
13 .values(item)
14 .get_result::<Service>(db)
15 }
16
17 pub fn count(db: &mut Connection) -> QueryResult<i64> {
18 service.count().get_result::<i64>(db)
19 }
20
21 pub fn count_u64(db: &mut Connection) -> QueryResult<u64> {
22 service.count().get_result::<i64>(db).map(|c| c as u64)
23 }
24
25 pub fn check_if_service_id_exists(
26 db: &mut Connection,
27 param_service_id: i32,
28 ) -> QueryResult<bool> {
29 service
30 .find(param_service_id)
31 .first::<Service>(db)
32 .optional()
33 .map(|arg0: Option<Service>| Option::is_some(&arg0))
34 }
35
36 pub fn check_all_services_online(
37 db: &mut Connection,
38 services: &[i32],
39 ) -> QueryResult<(bool, Option<String>)> {
40 for id in services {
41 if !Service::check_if_service_id_online(db, *id)? {
42 return Ok((false, Some(format!("Service {} is offline", id))));
43 }
44 }
45
46 Ok((true, None))
47 }
48
49 pub fn check_if_service_id_online(
50 db: &mut Connection,
51 param_service_id: i32,
52 ) -> QueryResult<bool> {
53 service
54 .filter(service_id.eq(param_service_id))
55 .select(online)
56 .first::<bool>(db)
57 }
58
59 pub fn get_all_online_services(db: &mut Connection) -> QueryResult<Vec<Self>> {
60 service
61 .filter(online.eq(true))
62 .select(Service::as_returning())
63 .load::<Service>(db)
64 }
65
66 pub fn get_all_offline_services(db: &mut Connection) -> QueryResult<Vec<Self>> {
67 service
68 .filter(online.eq(false))
69 .select(Service::as_returning())
70 .load::<Service>(db)
71 }
72
73 pub fn get_all_service_dependencies(
74 db: &mut Connection,
75 param_service_id: i32,
76 ) -> QueryResult<Vec<Option<i32>>> {
77 service
78 .filter(service_id.eq(param_service_id))
79 .select(dependencies)
80 .first::<Vec<Option<i32>>>(db)
81 }
82
83 pub fn get_all_service_endpoints(
84 db: &mut Connection,
85 param_service_id: i32,
86 ) -> QueryResult<Vec<Option<Endpoint>>> {
87 service
88 .filter(service_id.eq(param_service_id))
89 .select(endpoints)
90 .first::<Vec<Option<Endpoint>>>(db)
91 }
92
93 pub fn read(db: &mut Connection, param_service_id: i32) -> QueryResult<Self> {
94 service
95 .filter(service_id.eq(param_service_id))
96 .first::<Service>(db)
97 }
98
99 pub fn read_all(db: &mut Connection) -> QueryResult<Vec<Self>> {
100 service.load::<Service>(db)
101 }
102
103 pub fn set_service_online(db: &mut Connection, param_service_id: i32) -> QueryResult<()> {
104 Self::set_svc_online(db, param_service_id, true)
105 }
106
107 pub fn set_service_offline(db: &mut Connection, param_service_id: i32) -> QueryResult<()> {
108 Self::set_svc_online(db, param_service_id, false)
109 }
110
111 fn set_svc_online(
112 db: &mut Connection,
113 param_service_id: i32,
114 param_online: bool,
115 ) -> QueryResult<()> {
116 diesel::update(service.filter(service_id.eq(param_service_id)))
117 .set(online.eq(param_online))
118 .execute(db)?;
119 Ok(())
120 }
121
122 pub fn update(
123 db: &mut Connection,
124 param_service_id: i32,
125 item: &UpdateService,
126 ) -> QueryResult<Self> {
127 diesel::update(service.filter(service_id.eq(param_service_id)))
128 .set(item)
129 .returning(Service::as_returning())
130 .get_result(db)
131 }
132
133 pub fn delete(db: &mut Connection, param_service_id: i32) -> QueryResult<usize> {
134 diesel::delete(service.filter(service_id.eq(param_service_id))).execute(db)
135 }
136}