summaryrefslogtreecommitdiffstats
path: root/rust/src/database_models.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rust/src/database_models.rs')
-rw-r--r--rust/src/database_models.rs300
1 files changed, 118 insertions, 182 deletions
diff --git a/rust/src/database_models.rs b/rust/src/database_models.rs
index c0118dda..7153d18f 100644
--- a/rust/src/database_models.rs
+++ b/rust/src/database_models.rs
@@ -1,4 +1,5 @@
+use chrono;
use uuid::Uuid;
//use diesel::prelude::*;
@@ -7,216 +8,151 @@ use database_schema::*;
// Ugh. I thought the whole point was to *not* do this, but:
// https://github.com/diesel-rs/diesel/issues/1589
-/*
-table! {
- changelog (id) {
- id -> Int8,
- editgroup_id -> Int8,
- timestamp -> Nullable<Timestamp>,
- }
-}
-*/
-
-#[derive(Debug, Queryable, Identifiable, Associations)] // AsChangeset
-#[table_name = "container_edit"]
-pub struct ContainerEditRow {
- pub id: i64,
- pub ident_id: Uuid,
- pub rev_id: Option<i64>,
- pub redirect_id: Option<Uuid>,
- pub editgroup_id: i64,
- //pub extra_json: Option<Json>,
-}
-
-#[derive(Debug, Queryable, Identifiable, Associations)] // AsChangeset
-#[table_name = "container_ident"]
-pub struct ContainerIdentRow {
- pub id: Uuid,
- pub is_live: bool,
- pub rev_id: Option<i64>,
- pub redirect_id: Option<Uuid>,
-}
-
-#[derive(Debug, Queryable, Identifiable, Associations)] // AsChangeset
+// Helper for constructing tables
+macro_rules! entity_structs {
+ ($edit_table:expr, $edit_struct:ident, $ident_table:expr, $ident_struct:ident) => (
+
+ #[derive(Debug, Queryable, Identifiable, Associations, AsChangeset)]
+ #[table_name = $edit_table]
+ pub struct $edit_struct {
+ pub id: i64,
+ pub ident_id: Uuid,
+ pub rev_id: Option<i64>,
+ pub redirect_id: Option<Uuid>,
+ pub editgroup_id: i64,
+ //pub extra_json: Option<Json>,
+ }
+
+ #[derive(Debug, Queryable, Identifiable, Associations, AsChangeset)]
+ #[table_name = $ident_table]
+ pub struct $ident_struct {
+ pub id: Uuid,
+ pub is_live: bool,
+ pub rev_id: Option<i64>,
+ pub redirect_id: Option<Uuid>,
+ }
+ )
+}
+
+#[derive(Debug, Queryable, Identifiable, Associations, AsChangeset)]
#[table_name = "container_rev"]
pub struct ContainerRevRow {
pub id: i64,
//extra_json: Option<Json>,
- pub name: Option<String>,
+ pub name: String,
pub parent_ident_id: Option<i64>,
pub publisher: Option<String>,
pub issn: Option<String>,
}
-/*
-table! {
- creator_edit (id) {
- id -> Int8,
- extra_json -> Nullable<Json>,
- ident_id -> Uuid,
- rev_id -> Nullable<Int8>,
- redirect_id -> Nullable<Uuid>,
- editgroup_id -> Int8,
- }
-}
-
-table! {
- creator_ident (id) {
- id -> Uuid,
- is_live -> Bool,
- rev_id -> Nullable<Int8>,
- redirect_id -> Nullable<Uuid>,
- }
-}
-
-table! {
- creator_rev (id) {
- id -> Int8,
- extra_json -> Nullable<Json>,
- name -> Nullable<Text>,
- orcid -> Nullable<Text>,
- }
-}
-
-table! {
- editgroup (id) {
- id -> Int8,
- extra_json -> Nullable<Json>,
- editor_id -> Int8,
- description -> Nullable<Text>,
- }
-}
+entity_structs!("container_edit", ContainerEditRow, "container_ident", ContainerIdentRow);
-table! {
- editor (id) {
- id -> Int8,
- username -> Text,
- is_admin -> Bool,
- active_editgroup_id -> Nullable<Int8>,
- }
+#[derive(Debug, Queryable, Identifiable, Associations, AsChangeset)]
+#[table_name = "creator_rev"]
+pub struct CreatorRevRow {
+ pub id: i64,
+ //extra_json: Option<Json>,
+ pub name: String,
+ pub orcid: Option<String>,
}
-table! {
- file_edit (id) {
- id -> Int8,
- extra_json -> Nullable<Json>,
- ident_id -> Uuid,
- rev_id -> Nullable<Int8>,
- redirect_id -> Nullable<Uuid>,
- editgroup_id -> Int8,
- }
-}
+entity_structs!("creator_edit", CreatorEditRow, "creator_ident", CreatorIdentRow);
-table! {
- file_ident (id) {
- id -> Uuid,
- is_live -> Bool,
- rev_id -> Nullable<Int8>,
- redirect_id -> Nullable<Uuid>,
- }
+#[derive(Debug, Queryable, Identifiable, Associations, AsChangeset)]
+#[table_name = "file_rev"]
+pub struct FileRevRow {
+ pub id: i64,
+ //extra_json: Option<Json>,
+ pub size: Option<i32>,
+ pub sha1: Option<String>,
+ pub url: Option<String>,
}
-table! {
- file_release (id) {
- id -> Int8,
- file_rev -> Int8,
- target_release_ident_id -> Uuid,
- }
-}
+entity_structs!("file_edit", FileEditRow, "file_ident", FileIdentRow);
-table! {
- file_rev (id) {
- id -> Int8,
- extra_json -> Nullable<Json>,
- size -> Nullable<Int4>,
- sha1 -> Nullable<Text>,
- url -> Nullable<Text>,
- }
+#[derive(Debug, Queryable, Identifiable, Associations, AsChangeset)]
+#[table_name = "release_rev"]
+pub struct ReleaseRevRow {
+ pub id: i64,
+ //extra_json: Option<Json>,
+ pub work_ident_id: Option<Uuid>,
+ pub container_ident_id: Option<Uuid>,
+ pub title: Option<String>,
+ pub license: Option<String>,
+ pub release_type: Option<String>,
+ pub date: Option<String>,
+ pub doi: Option<String>,
+ pub volume: Option<String>,
+ pub pages: Option<String>,
+ pub issue: Option<String>,
+}
+
+entity_structs!("release_edit", ReleaseEditRow, "release_ident", ReleaseIdentRow);
+
+#[derive(Debug, Queryable, Identifiable, Associations, AsChangeset)]
+#[table_name = "work_rev"]
+pub struct WorkRevRow {
+ pub id: i64,
+ //extra_json: Option<Json>,
+ pub work_type: Option<String>,
+ pub primary_release_id: Option<Uuid>,
}
-table! {
- release_contrib (id) {
- id -> Int8,
- release_rev -> Int8,
- creator_ident_id -> Nullable<Uuid>,
- stub -> Nullable<Text>,
- contrib_type -> Nullable<Text>,
- }
-}
+entity_structs!("work_edit", WorkEditRow, "work_ident", WorkIdentRow);
-table! {
- release_edit (id) {
- id -> Int8,
- extra_json -> Nullable<Json>,
- ident_id -> Uuid,
- rev_id -> Nullable<Int8>,
- redirect_id -> Nullable<Uuid>,
- editgroup_id -> Int8,
- }
+#[derive(Debug, Queryable, Identifiable, Associations, AsChangeset)]
+#[table_name = "release_contrib"]
+pub struct ReleaseContribRow {
+ id: i64,
+ release_rev: i64,
+ creator_ident_id: Option<Uuid>,
+ stub: Option<String>,
+ contrib_type: Option<String>,
}
-table! {
- release_ident (id) {
- id -> Uuid,
- is_live -> Bool,
- rev_id -> Nullable<Int8>,
- redirect_id -> Nullable<Uuid>,
- }
-}
-table! {
- release_ref (id) {
- id -> Int8,
- release_rev -> Int8,
- target_release_ident_id -> Nullable<Uuid>,
- index -> Nullable<Int4>,
- stub -> Nullable<Text>,
- }
+#[derive(Debug, Queryable, Identifiable, Associations, AsChangeset)]
+#[table_name = "release_ref"]
+pub struct ReleaseRefRow {
+ id: i64,
+ release_rev: i64,
+ target_release_ident_id: Option<Uuid>,
+ index: Option<i32>,
+ stub: Option<String>,
}
-table! {
- release_rev (id) {
- id -> Int8,
- extra_json -> Nullable<Json>,
- work_ident_id -> Nullable<Uuid>,
- container_ident_id -> Nullable<Uuid>,
- title -> Nullable<Text>,
- license -> Nullable<Text>,
- release_type -> Nullable<Text>,
- date -> Nullable<Text>,
- doi -> Nullable<Text>,
- volume -> Nullable<Text>,
- pages -> Nullable<Text>,
- issue -> Nullable<Text>,
- }
+/*
+#[derive(Debug, Queryable, Identifiable, Associations, AsChangeset)]
+#[table_name = "file_release"]
+pub struct FileReleaseRow {
+ id: i64,
+ file_rev: i64,
+ target_release_ident_id: Uuid,
}
+*/
-table! {
- work_edit (id) {
- id -> Int8,
- extra_json -> Nullable<Json>,
- ident_id -> Uuid,
- rev_id -> Nullable<Int8>,
- redirect_id -> Nullable<Uuid>,
- editgroup_id -> Int8,
- }
+#[derive(Debug, Queryable, Identifiable, Associations, AsChangeset)]
+#[table_name = "editgroup"]
+pub struct EditgroupRow {
+ id: i64,
+ //extra_json: Option<Json>,
+ editor_id: i64,
+ description: Option<String>,
}
-table! {
- work_ident (id) {
- id -> Uuid,
- is_live -> Bool,
- rev_id -> Nullable<Int8>,
- redirect_id -> Nullable<Uuid>,
- }
+#[derive(Debug, Queryable, Identifiable, Associations, AsChangeset)]
+#[table_name = "editor"]
+pub struct EditorRow {
+ id: i64,
+ username: String,
+ is_admin: bool,
+ active_editgroup_id: Option<i64>,
}
-table! {
- work_rev (id) {
- id -> Int8,
- extra_json -> Nullable<Json>,
- work_type -> Nullable<Text>,
- primary_release_id -> Nullable<Uuid>,
- }
+#[derive(Debug, Queryable, Identifiable, Associations, AsChangeset)]
+#[table_name = "changelog"]
+pub struct ChangelogRow {
+ id: i64,
+ editgroup_id: i64,
+ timestamp: chrono::NaiveDateTime,
}
-*/