1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
use super::mark;
use crate::concerns::CortexInsertable;
use crate::helpers::TaskStatus;
use crate::models::{Corpus, NewTask, Service};
use crate::schema::services;
use diesel::pg::PgConnection;
use diesel::result::Error;
use diesel::*;
pub(crate) fn register_service(
connection: &PgConnection,
service: &Service,
corpus_path: &str,
) -> Result<(), Error>
{
use crate::schema::tasks::dsl::*;
let corpus = Corpus::find_by_path(corpus_path, connection)?;
let todo_raw = TaskStatus::TODO.raw();
delete(tasks)
.filter(service_id.eq(service.id))
.filter(corpus_id.eq(corpus.id))
.execute(connection)?;
let import_service = Service::find_by_name("import", connection)?;
let entries: Vec<String> = tasks
.filter(service_id.eq(import_service.id))
.filter(corpus_id.eq(corpus.id))
.select(entry)
.load(connection)?;
connection.transaction::<(), Error, _>(|| {
for imported_entry in entries {
let new_task = NewTask {
entry: imported_entry,
service_id: service.id,
corpus_id: corpus.id,
status: todo_raw,
};
new_task.create(connection)?;
}
Ok(())
})?;
mark::mark_new_run(
connection,
&corpus,
service,
"cli-admin".to_string(),
"Newly registered service, initial run.".to_string(),
)
}
pub(crate) fn extend_service(
connection: &PgConnection,
service: &Service,
corpus_path: &str,
) -> Result<(), Error>
{
use crate::schema::tasks::dsl::*;
let corpus = Corpus::find_by_path(corpus_path, connection)?;
let todo_raw = TaskStatus::TODO.raw();
let import_service = Service::find_by_name("import", connection)?;
let entries: Vec<String> = tasks
.filter(service_id.eq(import_service.id))
.filter(corpus_id.eq(corpus.id))
.select(entry)
.load(connection)?;
connection.transaction::<(), Error, _>(|| {
for imported_entry in entries {
let new_task = NewTask {
entry: imported_entry,
service_id: service.id,
corpus_id: corpus.id,
status: todo_raw,
};
new_task.create_if_new(connection)?;
}
Ok(())
})
}
pub(crate) fn delete_service_by_name(
connection: &PgConnection,
name: &str,
) -> Result<usize, Error>
{
delete(services::table)
.filter(services::name.eq(name))
.execute(connection)
}