405 lines
21 KiB
Rust
405 lines
21 KiB
Rust
//! Initial PostgreSQL schema for the current data model.
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub(super) struct Migration;
|
|
|
|
impl ::cot::db::migrations::Migration for Migration {
|
|
const APP_NAME: &'static str = "web-petting";
|
|
const MIGRATION_NAME: &'static str = "m_0001_initial";
|
|
const DEPENDENCIES: &'static [::cot::db::migrations::MigrationDependency] = &[];
|
|
const OPERATIONS: &'static [::cot::db::migrations::Operation] = &[
|
|
::cot::db::migrations::Operation::create_model()
|
|
.table_name(::cot::db::Identifier::new("web_petting__user"))
|
|
.fields(&[
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("id"),
|
|
<cot::db::Auto<i64> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.auto()
|
|
.primary_key()
|
|
.set_null(<cot::db::Auto<i64> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("login"),
|
|
<String as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<String as ::cot::db::DatabaseField>::NULLABLE)
|
|
.unique(),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("password_hash"),
|
|
<String as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<String as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("display_name"),
|
|
<Option<String> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<Option<String> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("telegram_chat_id"),
|
|
<Option<String> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<Option<String> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("telegram_notifications"),
|
|
<Option<bool> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<Option<bool> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("status"),
|
|
<String as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<String as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("created_at"),
|
|
<chrono::NaiveDateTime as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<chrono::NaiveDateTime as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("updated_at"),
|
|
<chrono::NaiveDateTime as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<chrono::NaiveDateTime as ::cot::db::DatabaseField>::NULLABLE),
|
|
])
|
|
.build(),
|
|
::cot::db::migrations::Operation::create_model()
|
|
.table_name(::cot::db::Identifier::new("web_petting__setting"))
|
|
.fields(&[
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("id"),
|
|
<cot::db::Auto<i64> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.auto()
|
|
.primary_key()
|
|
.set_null(<cot::db::Auto<i64> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("key"),
|
|
<String as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<String as ::cot::db::DatabaseField>::NULLABLE)
|
|
.unique(),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("value"),
|
|
<String as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<String as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("updated_at"),
|
|
<chrono::NaiveDateTime as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<chrono::NaiveDateTime as ::cot::db::DatabaseField>::NULLABLE),
|
|
])
|
|
.build(),
|
|
::cot::db::migrations::Operation::create_model()
|
|
.table_name(::cot::db::Identifier::new("web_petting__client"))
|
|
.fields(&[
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("id"),
|
|
<cot::db::Auto<i64> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.auto()
|
|
.primary_key()
|
|
.set_null(<cot::db::Auto<i64> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("name"),
|
|
<String as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<String as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("phone"),
|
|
<Option<String> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<Option<String> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("email"),
|
|
<Option<String> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<Option<String> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("address"),
|
|
<Option<String> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<Option<String> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("notes"),
|
|
<Option<String> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<Option<String> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("media_token"),
|
|
<String as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<String as ::cot::db::DatabaseField>::NULLABLE)
|
|
.unique(),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("color"),
|
|
<Option<String> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<Option<String> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("status"),
|
|
<String as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<String as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("created_at"),
|
|
<chrono::NaiveDateTime as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<chrono::NaiveDateTime as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("updated_at"),
|
|
<chrono::NaiveDateTime as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<chrono::NaiveDateTime as ::cot::db::DatabaseField>::NULLABLE),
|
|
])
|
|
.build(),
|
|
::cot::db::migrations::Operation::create_model()
|
|
.table_name(::cot::db::Identifier::new("web_petting__testimonial"))
|
|
.fields(&[
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("id"),
|
|
<cot::db::Auto<i64> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.auto()
|
|
.primary_key()
|
|
.set_null(<cot::db::Auto<i64> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("text"),
|
|
<String as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<String as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("author_note"),
|
|
<Option<String> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<Option<String> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("image_path"),
|
|
<Option<String> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<Option<String> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("status"),
|
|
<String as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<String as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("sort_order"),
|
|
<i32 as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<i32 as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("created_at"),
|
|
<chrono::NaiveDateTime as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<chrono::NaiveDateTime as ::cot::db::DatabaseField>::NULLABLE),
|
|
])
|
|
.build(),
|
|
::cot::db::migrations::Operation::create_model()
|
|
.table_name(::cot::db::Identifier::new("web_petting__visit"))
|
|
.fields(&[
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("id"),
|
|
<cot::db::Auto<i64> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.auto()
|
|
.primary_key()
|
|
.set_null(<cot::db::Auto<i64> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("client_id"),
|
|
<cot::db::ForeignKey<crate::models::Client> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.foreign_key(
|
|
<crate::models::Client as ::cot::db::Model>::TABLE_NAME,
|
|
<crate::models::Client as ::cot::db::Model>::PRIMARY_KEY_NAME,
|
|
::cot::db::ForeignKeyOnDeletePolicy::Restrict,
|
|
::cot::db::ForeignKeyOnUpdatePolicy::Restrict,
|
|
)
|
|
.set_null(
|
|
<cot::db::ForeignKey<crate::models::Client> as ::cot::db::DatabaseField>::NULLABLE,
|
|
),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("user_id"),
|
|
<cot::db::ForeignKey<crate::models::User> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.foreign_key(
|
|
<crate::models::User as ::cot::db::Model>::TABLE_NAME,
|
|
<crate::models::User as ::cot::db::Model>::PRIMARY_KEY_NAME,
|
|
::cot::db::ForeignKeyOnDeletePolicy::Restrict,
|
|
::cot::db::ForeignKeyOnUpdatePolicy::Restrict,
|
|
)
|
|
.set_null(
|
|
<cot::db::ForeignKey<crate::models::User> as ::cot::db::DatabaseField>::NULLABLE,
|
|
),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("visit_date"),
|
|
<chrono::NaiveDate as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<chrono::NaiveDate as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("time_start"),
|
|
<String as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<String as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("time_end"),
|
|
<String as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<String as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("notes"),
|
|
<Option<String> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<Option<String> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("public_notes"),
|
|
<Option<String> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<Option<String> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("client_feedback"),
|
|
<Option<String> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<Option<String> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("status"),
|
|
<String as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<String as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("created_at"),
|
|
<chrono::NaiveDateTime as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<chrono::NaiveDateTime as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("updated_at"),
|
|
<chrono::NaiveDateTime as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<chrono::NaiveDateTime as ::cot::db::DatabaseField>::NULLABLE),
|
|
])
|
|
.build(),
|
|
::cot::db::migrations::Operation::create_model()
|
|
.table_name(::cot::db::Identifier::new("web_petting__media"))
|
|
.fields(&[
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("id"),
|
|
<cot::db::Auto<i64> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.auto()
|
|
.primary_key()
|
|
.set_null(<cot::db::Auto<i64> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("client_id"),
|
|
<cot::db::ForeignKey<crate::models::Client> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.foreign_key(
|
|
<crate::models::Client as ::cot::db::Model>::TABLE_NAME,
|
|
<crate::models::Client as ::cot::db::Model>::PRIMARY_KEY_NAME,
|
|
::cot::db::ForeignKeyOnDeletePolicy::Restrict,
|
|
::cot::db::ForeignKeyOnUpdatePolicy::Restrict,
|
|
)
|
|
.set_null(
|
|
<cot::db::ForeignKey<crate::models::Client> as ::cot::db::DatabaseField>::NULLABLE,
|
|
),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("visit_id"),
|
|
<Option<cot::db::ForeignKey<crate::models::Visit>> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.foreign_key(
|
|
<crate::models::Visit as ::cot::db::Model>::TABLE_NAME,
|
|
<crate::models::Visit as ::cot::db::Model>::PRIMARY_KEY_NAME,
|
|
::cot::db::ForeignKeyOnDeletePolicy::Restrict,
|
|
::cot::db::ForeignKeyOnUpdatePolicy::Restrict,
|
|
)
|
|
.set_null(
|
|
<Option<cot::db::ForeignKey<crate::models::Visit>> as ::cot::db::DatabaseField>::NULLABLE,
|
|
),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("file_path"),
|
|
<String as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<String as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("file_type"),
|
|
<String as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<String as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("caption"),
|
|
<Option<String> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<Option<String> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("status"),
|
|
<String as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<String as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("created_at"),
|
|
<chrono::NaiveDateTime as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<chrono::NaiveDateTime as ::cot::db::DatabaseField>::NULLABLE),
|
|
])
|
|
.build(),
|
|
::cot::db::migrations::Operation::create_model()
|
|
.table_name(::cot::db::Identifier::new("web_petting__lead"))
|
|
.fields(&[
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("id"),
|
|
<cot::db::Auto<i64> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.auto()
|
|
.primary_key()
|
|
.set_null(<cot::db::Auto<i64> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("name"),
|
|
<String as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<String as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("phone"),
|
|
<Option<String> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<Option<String> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("email"),
|
|
<Option<String> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<Option<String> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("comment"),
|
|
<Option<String> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<Option<String> as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("status"),
|
|
<String as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<String as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("client_id"),
|
|
<Option<cot::db::ForeignKey<crate::models::Client>> as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.foreign_key(
|
|
<crate::models::Client as ::cot::db::Model>::TABLE_NAME,
|
|
<crate::models::Client as ::cot::db::Model>::PRIMARY_KEY_NAME,
|
|
::cot::db::ForeignKeyOnDeletePolicy::Restrict,
|
|
::cot::db::ForeignKeyOnUpdatePolicy::Restrict,
|
|
)
|
|
.set_null(
|
|
<Option<cot::db::ForeignKey<crate::models::Client>> as ::cot::db::DatabaseField>::NULLABLE,
|
|
),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("created_at"),
|
|
<chrono::NaiveDateTime as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<chrono::NaiveDateTime as ::cot::db::DatabaseField>::NULLABLE),
|
|
::cot::db::migrations::Field::new(
|
|
::cot::db::Identifier::new("updated_at"),
|
|
<chrono::NaiveDateTime as ::cot::db::DatabaseField>::TYPE,
|
|
)
|
|
.set_null(<chrono::NaiveDateTime as ::cot::db::DatabaseField>::NULLABLE),
|
|
])
|
|
.build(),
|
|
];
|
|
}
|