aboutsummaryrefslogtreecommitdiffstats
path: root/rust/src
diff options
context:
space:
mode:
Diffstat (limited to 'rust/src')
-rw-r--r--rust/src/api_server.rs133
-rw-r--r--rust/src/database_models.rs2
-rw-r--r--rust/src/database_schema.rs20
3 files changed, 123 insertions, 32 deletions
diff --git a/rust/src/api_server.rs b/rust/src/api_server.rs
index c9c8e754..8311896f 100644
--- a/rust/src/api_server.rs
+++ b/rust/src/api_server.rs
@@ -4,9 +4,10 @@ use ConnectionPool;
use api_helpers::*;
use chrono;
use database_models::*;
-use database_schema::{changelog, container_ident, container_rev, creator_ident, creator_rev,
- editgroup, editor, file_ident, file_release, file_rev, release_contrib,
- release_ident, release_ref, release_rev, work_ident, work_rev};
+use database_schema::{changelog, container_edit, container_ident, container_rev, creator_edit,
+ creator_ident, creator_rev, editgroup, editor, file_edit, file_ident,
+ file_release, file_rev, release_contrib, release_edit, release_ident,
+ release_ref, release_rev, work_edit, work_ident, work_rev};
use diesel::prelude::*;
use diesel::{self, insert_into};
use errors::*;
@@ -342,7 +343,8 @@ impl Server {
let entity = ReleaseEntity {
title: rev.title,
release_type: rev.release_type,
- date: rev.date.map(|v| chrono::DateTime::from_utc(v.and_hms(0, 0, 0), chrono::Utc)),
+ date: rev.date
+ .map(|v| chrono::DateTime::from_utc(v.and_hms(0, 0, 0), chrono::Utc)),
doi: rev.doi,
volume: rev.volume,
pages: rev.pages,
@@ -405,7 +407,8 @@ impl Server {
let entity = ReleaseEntity {
title: rev.title,
release_type: rev.release_type,
- date: rev.date.map(|v| chrono::DateTime::from_utc(v.and_hms(0, 0, 0), chrono::Utc)),
+ date: rev.date
+ .map(|v| chrono::DateTime::from_utc(v.and_hms(0, 0, 0), chrono::Utc)),
doi: rev.doi,
volume: rev.volume,
pages: rev.pages,
@@ -429,11 +432,94 @@ impl Server {
let row: EditgroupRow = editgroup::table.find(id as i64).first(&conn)?;
+ let edits = EditgroupEdits {
+ containers: Some(
+ container_edit::table
+ .filter(container_edit::editgroup_id.eq(id))
+ .get_results(&conn)
+ .unwrap()
+ .iter()
+ .map(|e: &ContainerEditRow| EntityEdit {
+ edit_id: e.id,
+ editgroup_id: e.editgroup_id,
+ revision: e.rev_id,
+ redirect_ident: e.redirect_id.map(|v| v.to_string()),
+ ident: e.ident_id.to_string(),
+ extra: e.extra_json.clone(),
+ })
+ .collect(),
+ ),
+ creators: Some(
+ creator_edit::table
+ .filter(creator_edit::editgroup_id.eq(id))
+ .get_results(&conn)
+ .unwrap()
+ .iter()
+ .map(|e: &CreatorEditRow| EntityEdit {
+ edit_id: e.id,
+ editgroup_id: e.editgroup_id,
+ revision: e.rev_id,
+ redirect_ident: e.redirect_id.map(|v| v.to_string()),
+ ident: e.ident_id.to_string(),
+ extra: e.extra_json.clone(),
+ })
+ .collect(),
+ ),
+ files: Some(
+ file_edit::table
+ .filter(file_edit::editgroup_id.eq(id))
+ .get_results(&conn)
+ .unwrap()
+ .iter()
+ .map(|e: &FileEditRow| EntityEdit {
+ edit_id: e.id,
+ editgroup_id: e.editgroup_id,
+ revision: e.rev_id,
+ redirect_ident: e.redirect_id.map(|v| v.to_string()),
+ ident: e.ident_id.to_string(),
+ extra: e.extra_json.clone(),
+ })
+ .collect(),
+ ),
+ releases: Some(
+ release_edit::table
+ .filter(release_edit::editgroup_id.eq(id))
+ .get_results(&conn)
+ .unwrap()
+ .iter()
+ .map(|e: &ReleaseEditRow| EntityEdit {
+ edit_id: e.id,
+ editgroup_id: e.editgroup_id,
+ revision: e.rev_id,
+ redirect_ident: e.redirect_id.map(|v| v.to_string()),
+ ident: e.ident_id.to_string(),
+ extra: e.extra_json.clone(),
+ })
+ .collect(),
+ ),
+ works: Some(
+ work_edit::table
+ .filter(work_edit::editgroup_id.eq(id))
+ .get_results(&conn)
+ .unwrap()
+ .iter()
+ .map(|e: &WorkEditRow| EntityEdit {
+ edit_id: e.id,
+ editgroup_id: e.editgroup_id,
+ revision: e.rev_id,
+ redirect_ident: e.redirect_id.map(|v| v.to_string()),
+ ident: e.ident_id.to_string(),
+ extra: e.extra_json.clone(),
+ })
+ .collect(),
+ ),
+ };
+
let eg = Editgroup {
id: Some(row.id),
editor_id: row.editor_id,
description: row.description,
- edits: None,
+ edits: Some(edits),
extra: row.extra_json,
};
Ok(Some(eg))
@@ -565,10 +651,11 @@ impl Api for Server {
let edit = &edit;
let entity_edit = EntityEdit {
- editgroup_id: Some(edit.editgroup_id),
+ editgroup_id: edit.editgroup_id,
revision: Some(edit.rev_id.unwrap()),
- ident: Some(edit.ident_id.to_string()),
- edit_id: Some(edit.id),
+ redirect_ident: None,
+ ident: edit.ident_id.to_string(),
+ edit_id: edit.id,
extra: edit.extra_json.clone(),
};
Box::new(futures::done(Ok(ContainerPostResponse::CreatedEntity(
@@ -607,10 +694,11 @@ impl Api for Server {
let edit = &edit;
let entity_edit = EntityEdit {
- editgroup_id: Some(edit.editgroup_id),
+ editgroup_id: edit.editgroup_id,
revision: Some(edit.rev_id.unwrap()),
- ident: Some(edit.ident_id.to_string()),
- edit_id: Some(edit.id),
+ redirect_ident: None,
+ ident: edit.ident_id.to_string(),
+ edit_id: edit.id,
extra: edit.extra_json.clone(),
};
Box::new(futures::done(Ok(CreatorPostResponse::CreatedEntity(
@@ -673,10 +761,11 @@ impl Api for Server {
};
let entity_edit = EntityEdit {
- editgroup_id: Some(edit.editgroup_id),
+ editgroup_id: edit.editgroup_id,
revision: Some(edit.rev_id.unwrap()),
- ident: Some(edit.ident_id.to_string()),
- edit_id: Some(edit.id),
+ redirect_ident: None,
+ ident: edit.ident_id.to_string(),
+ edit_id: edit.id,
extra: edit.extra_json.clone(),
};
Box::new(futures::done(Ok(FilePostResponse::CreatedEntity(
@@ -715,10 +804,11 @@ impl Api for Server {
let edit = &edit;
let entity_edit = EntityEdit {
- editgroup_id: Some(edit.editgroup_id),
+ editgroup_id: edit.editgroup_id,
revision: Some(edit.rev_id.unwrap()),
- ident: Some(edit.ident_id.to_string()),
- edit_id: Some(edit.id),
+ redirect_ident: None,
+ ident: edit.ident_id.to_string(),
+ edit_id: edit.id,
extra: edit.extra_json.clone(),
};
Box::new(futures::done(Ok(WorkPostResponse::CreatedEntity(
@@ -823,10 +913,11 @@ impl Api for Server {
};
let entity_edit = EntityEdit {
- editgroup_id: Some(edit.editgroup_id),
+ editgroup_id: edit.editgroup_id,
revision: Some(edit.rev_id.unwrap()),
- ident: Some(edit.ident_id.to_string()),
- edit_id: Some(edit.id),
+ redirect_ident: None,
+ ident: edit.ident_id.to_string(),
+ edit_id: edit.id,
extra: edit.extra_json.clone(),
};
Box::new(futures::done(Ok(ReleasePostResponse::CreatedEntity(
diff --git a/rust/src/database_models.rs b/rust/src/database_models.rs
index 2b205fe7..b27bca3f 100644
--- a/rust/src/database_models.rs
+++ b/rust/src/database_models.rs
@@ -36,10 +36,10 @@ macro_rules! entity_structs {
#[table_name = $edit_table]
pub struct $edit_struct {
pub id: i64,
+ pub editgroup_id: i64,
pub ident_id: Uuid,
pub rev_id: Option<i64>,
pub redirect_id: Option<Uuid>,
- pub editgroup_id: i64,
pub extra_json: Option<serde_json::Value>,
}
diff --git a/rust/src/database_schema.rs b/rust/src/database_schema.rs
index 3adbd63a..7d8ff4e1 100644
--- a/rust/src/database_schema.rs
+++ b/rust/src/database_schema.rs
@@ -9,11 +9,11 @@ table! {
table! {
container_edit (id) {
id -> Int8,
- extra_json -> Nullable<Json>,
+ editgroup_id -> Int8,
ident_id -> Uuid,
rev_id -> Nullable<Int8>,
redirect_id -> Nullable<Uuid>,
- editgroup_id -> Int8,
+ extra_json -> Nullable<Json>,
}
}
@@ -39,11 +39,11 @@ table! {
table! {
creator_edit (id) {
id -> Int8,
- extra_json -> Nullable<Json>,
+ editgroup_id -> Int8,
ident_id -> Uuid,
rev_id -> Nullable<Int8>,
redirect_id -> Nullable<Uuid>,
- editgroup_id -> Int8,
+ extra_json -> Nullable<Json>,
}
}
@@ -86,11 +86,11 @@ table! {
table! {
file_edit (id) {
id -> Int8,
- extra_json -> Nullable<Json>,
+ editgroup_id -> Int8,
ident_id -> Uuid,
rev_id -> Nullable<Int8>,
redirect_id -> Nullable<Uuid>,
- editgroup_id -> Int8,
+ extra_json -> Nullable<Json>,
}
}
@@ -134,11 +134,11 @@ table! {
table! {
release_edit (id) {
id -> Int8,
- extra_json -> Nullable<Json>,
+ editgroup_id -> Int8,
ident_id -> Uuid,
rev_id -> Nullable<Int8>,
redirect_id -> Nullable<Uuid>,
- editgroup_id -> Int8,
+ extra_json -> Nullable<Json>,
}
}
@@ -180,11 +180,11 @@ table! {
table! {
work_edit (id) {
id -> Int8,
- extra_json -> Nullable<Json>,
+ editgroup_id -> Int8,
ident_id -> Uuid,
rev_id -> Nullable<Int8>,
redirect_id -> Nullable<Uuid>,
- editgroup_id -> Int8,
+ extra_json -> Nullable<Json>,
}
}