diff --git a/src/models.rs b/src/models.rs new file mode 100644 index 0000000..27636d7 --- /dev/null +++ b/src/models.rs @@ -0,0 +1,16 @@ +/* + * advotracker - Hotline tackingtool for Advocats + * + * Copyright 2019 Ralf Zerres + * SPDX-License-Identifier: (0BSD or MIT) + */ + +// bring models into scope +pub mod roles; +pub mod harms; +pub mod users; +pub mod user_roles; + +// methods used for: INSERT +//pub mod insert; +//use insert::types::*; diff --git a/src/models/claims.rs b/src/models/claims.rs new file mode 100644 index 0000000..fbf546b --- /dev/null +++ b/src/models/claims.rs @@ -0,0 +1,26 @@ +/* + * advotracker - Hotline tackingtool for Advocats + * + * Copyright 2019 Ralf Zerres + * SPDX-License-Identifier: (0BSD or MIT) + */ + +use crait::schema::claim.rs; + +//#[derive(Debug, Deserialize, PartialEq, Queryable)] +#[derive(Debug, Queryable)] +pub struct Claim { + // id: the auto incremented primary index + pub id: i32, + pub user_id: i32, + pub type_: Option, + pub value: Option, +} + +#[derive(Debug, Deserialize, Insertable)] +#[table_name = "claims"] +pub struct NewClaim<'a> { + //pub user_id: &'a i32, + pub type_: Option<&'a str>, + pub value: Option<&'a str>, +} diff --git a/src/models/harms.rs b/src/models/harms.rs new file mode 100644 index 0000000..5fab611 --- /dev/null +++ b/src/models/harms.rs @@ -0,0 +1,43 @@ +/* + * advotracker - Hotline tackingtool for Advocats + * + * Copyright 2019 Ralf Zerres + * SPDX-License-Identifier: (0BSD or MIT) + */ + +use chrono::NaiveDateTime; +// in diesel, we need serde_derive to realize the needed traits to de- or serialize +use serde_derive::*; + +use crate::schema::harms; + +//usage: SELECT, UPDATE, DELETE +#[derive(AsChangeset, Debug, Deserialize, Identifiable, PartialEq, Queryable)] +pub struct Harm { + // id: the auto incremented primary index + pub id: i32, + pub id_harm: String, + pub id_policyholder: Option, + pub id_callback: Option, + pub date_fallback: Option, + pub date_recording: NaiveDateTime, + pub id_user: i32, + pub date_created: NaiveDateTime, + pub id_user_changed: i32, + pub date_changed: NaiveDateTime, +} + +// usage: INSERT +#[derive(Debug, Deserialize, Insertable, Serialize)] +#[table_name = "harms"] +pub struct NewHarm<'a> { + pub id_harm: &'a str, + pub id_policyholder: Option<&'a str>, + pub id_callback: Option<&'a str>, + pub date_fallback: Option, + pub date_recording: NaiveDateTime, + pub id_user: i32, + pub date_created: Option, + pub id_user_changed: i32, + pub date_changed: Option, +} diff --git a/src/models/insert.rs b/src/models/insert.rs new file mode 100644 index 0000000..0543b69 --- /dev/null +++ b/src/models/insert.rs @@ -0,0 +1,15 @@ +/* + * advotracker - Hotline tackingtool for Advocats + * + * Copyright 2019 Ralf Zerres + * SPDX-License-Identifier: (0BSD or MIT) + */ + +use crate::schema::*; +//use chrono::NaiveDateTime; +use serde_derive::*; +//use types::*; +//use crate::models::types::*; +//use serde::*; + +pub mod types; diff --git a/src/models/roles.rs b/src/models/roles.rs new file mode 100644 index 0000000..117faf3 --- /dev/null +++ b/src/models/roles.rs @@ -0,0 +1,38 @@ +/* + * advotracker - Hotline tackingtool for Advocats + * + * Copyright 2019 Ralf Zerres + * SPDX-License-Identifier: (0BSD or MIT) + */ + +use chrono::NaiveDateTime; +use serde_derive::*; +//use serde; + +use crate::schema::roles; + +#[derive(AsChangeset, Debug, Deserialize, Identifiable, PartialEq, Queryable)] +#[table_name = "roles"] +pub struct Role { + // id: the auto incremented primary index + pub id: i32, + pub name: String, + pub date_created: NaiveDateTime, + pub id_user_changed: i32, + pub date_changed: NaiveDateTime, +} + +#[derive(Debug, Deserialize, Insertable, Serialize)] +#[table_name = "roles"] +pub struct NewRole<'a> { + pub name: &'a str, + pub date_created: Option, + pub id_user_changed: i32, + pub date_changed: Option, +} + +// we couldn't do a RoleList implementation for a Vector +// because we don't own it, RoleList is using the newtype pattern + +//#[derive(Debug, Deserialize, Serialize)] +//pub struct RoleList(pub Vec); diff --git a/src/models/user_roles.rs b/src/models/user_roles.rs new file mode 100644 index 0000000..96bfcce --- /dev/null +++ b/src/models/user_roles.rs @@ -0,0 +1,23 @@ +/* + * advotracker - Hotline tackingtool for Advocats + * + * Copyright 2019 Ralf Zerres + * SPDX-License-Identifier: (0BSD or MIT) + */ + +use crate::schema::user_roles; +use serde_derive::*; + +#[derive(Debug, Queryable, PartialEq)] +pub struct UserRole { + pub id_user: i32, + pub id_role: i32, +} + +//#[derive(Deserialize)] +#[derive(Deserialize, Insertable)] +#[table_name = "user_roles"] +pub struct NewUserRole { + pub id_user: i32, + pub id_role: i32, +} diff --git a/src/models/users.rs b/src/models/users.rs new file mode 100644 index 0000000..cde17fd --- /dev/null +++ b/src/models/users.rs @@ -0,0 +1,68 @@ +/* + * advotracker - Hotline tackingtool for Advocats + * + * Copyright 2019 Ralf Zerres + * SPDX-License-Identifier: (0BSD or MIT) + */ + +use chrono::NaiveDateTime; +// in diesel, we need serde_derive to realize the needed traits to de- or serialize +use serde_derive::*; + +use crate::schema::users; + +// usage: SELECT, UPDATE, DELETE +#[derive(AsChangeset, Debug, Deserialize, Identifiable, PartialEq, Queryable, Serialize)] +pub struct User { + // id: the auto incremented primary index + pub id: i32, + pub last_name: String, + // Option -> returns "None", if db value is null + pub first_name: Option, + pub alias_name: Option, + pub email: Option, + pub email_confirmed: Option, + pub initials: Option, + pub password_hash: Option, + pub date_created: NaiveDateTime, + pub id_changed: i32, + pub date_changed: NaiveDateTime, +} + +// usage: INSERT +#[derive(Debug, Deserialize, Insertable, Serialize)] +#[table_name = "users"] +pub struct NewUser<'a> { + pub last_name: &'a str, + pub first_name: Option<&'a str>, + pub alias_name: Option<&'a str>, + pub email: Option<&'a str>, + pub email_confirmed: Option, + pub initials: Option<&'a str>, + pub password_hash: &'a str, + pub date_created: Option, + pub id_changed: i32, + pub date_changed: Option, +} + +#[derive(Debug, Deserialize, Queryable)] +pub struct RegisterUser<'a> { + pub last_name: &'a str, + pub first_name: Option<&'a str>, + pub alias: Option<&'a str>, + pub email: Option<&'a str>, + pub email_confirmed: Option, + pub initials: Option<&'a str>, + pub password_hash: &'a str, + pub password_confirmation: &'a str, + pub id_changed: i32, +} + +// WIP +//pub mod traits; +//use types::ConfirmState; +//use crate::types::ConfirmStateVisitor; +//#[serde(skip)] + +//#[derive(Serialize, Deserialize)] +//pub struct UserList(pub Vec); diff --git a/src/schema.rs b/src/schema.rs new file mode 100644 index 0000000..2a1e8bb --- /dev/null +++ b/src/schema.rs @@ -0,0 +1,72 @@ +table! { + claims (id) { + id -> Integer, + id_user -> Integer, + #[sql_name = "type"] + type_ -> Nullable, + value -> Nullable, + date_created -> Timestamp, + id_user_changed -> Integer, + date_changed -> Timestamp, + } +} + +table! { + harms (id) { + id -> Integer, + id_harm -> Text, + id_policyholder -> Nullable, + id_callback -> Nullable, + date_fallback -> Nullable, + date_recording -> Timestamp, + id_user -> Integer, + date_created -> Timestamp, + id_user_changed -> Integer, + date_changed -> Timestamp, + } +} + +table! { + roles (id) { + id -> Integer, + name -> Text, + date_created -> Timestamp, + id_user_changed -> Integer, + date_changed -> Timestamp, + } +} + +table! { + user_roles (id_user, id_role) { + id_user -> Integer, + id_role -> Integer, + } +} + +table! { + users (id) { + id -> Integer, + last_name -> Text, + first_name -> Nullable, + alias_name -> Nullable, + email -> Nullable, + email_confirmed -> Nullable, + initials -> Nullable, + password_hash -> Nullable, + date_created -> Timestamp, + id_changed -> Integer, + date_changed -> Timestamp, + } +} + +joinable!(claims -> users (id_user)); +joinable!(user_roles -> roles (id_role)); +joinable!(user_roles -> users (id_user)); + +allow_tables_to_appear_in_same_query!( + claims, + harms, + roles, + user_roles, + users, +);