89 lines
4.2 KiB
Rust
89 lines
4.2 KiB
Rust
|
|
//! Migration: update Visit model for scheduling + add Client.color
|
||
|
|
//! Visit: Remove scheduled_at, duration_minutes; Add user_id, visit_date, time_start, time_end
|
||
|
|
//! Client: Add color
|
||
|
|
|
||
|
|
#[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_0002_visit_schedule";
|
||
|
|
const DEPENDENCIES: &'static [::cot::db::migrations::MigrationDependency] = &[
|
||
|
|
::cot::db::migrations::MigrationDependency::migration("web-petting", "m_0001_initial"),
|
||
|
|
];
|
||
|
|
const OPERATIONS: &'static [::cot::db::migrations::Operation] = &[
|
||
|
|
// Add color to client (nullable for existing rows)
|
||
|
|
::cot::db::migrations::Operation::add_field()
|
||
|
|
.table_name(::cot::db::Identifier::new("web_petting__client"))
|
||
|
|
.field(
|
||
|
|
::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)
|
||
|
|
)
|
||
|
|
.build(),
|
||
|
|
// Remove old visit fields
|
||
|
|
::cot::db::migrations::Operation::remove_field()
|
||
|
|
.table_name(::cot::db::Identifier::new("web_petting__visit"))
|
||
|
|
.field(::cot::db::migrations::Field::new(
|
||
|
|
::cot::db::Identifier::new("scheduled_at"),
|
||
|
|
<chrono::NaiveDateTime as ::cot::db::DatabaseField>::TYPE,
|
||
|
|
))
|
||
|
|
.build(),
|
||
|
|
::cot::db::migrations::Operation::remove_field()
|
||
|
|
.table_name(::cot::db::Identifier::new("web_petting__visit"))
|
||
|
|
.field(::cot::db::migrations::Field::new(
|
||
|
|
::cot::db::Identifier::new("duration_minutes"),
|
||
|
|
<Option<i32> as ::cot::db::DatabaseField>::TYPE,
|
||
|
|
).set_null(<Option<i32> as ::cot::db::DatabaseField>::NULLABLE))
|
||
|
|
.build(),
|
||
|
|
// Add new fields
|
||
|
|
::cot::db::migrations::Operation::add_field()
|
||
|
|
.table_name(::cot::db::Identifier::new("web_petting__visit"))
|
||
|
|
.field(
|
||
|
|
::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)
|
||
|
|
)
|
||
|
|
.build(),
|
||
|
|
::cot::db::migrations::Operation::add_field()
|
||
|
|
.table_name(::cot::db::Identifier::new("web_petting__visit"))
|
||
|
|
.field(
|
||
|
|
::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)
|
||
|
|
)
|
||
|
|
.build(),
|
||
|
|
::cot::db::migrations::Operation::add_field()
|
||
|
|
.table_name(::cot::db::Identifier::new("web_petting__visit"))
|
||
|
|
.field(
|
||
|
|
::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)
|
||
|
|
)
|
||
|
|
.build(),
|
||
|
|
::cot::db::migrations::Operation::add_field()
|
||
|
|
.table_name(::cot::db::Identifier::new("web_petting__visit"))
|
||
|
|
.field(
|
||
|
|
::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)
|
||
|
|
)
|
||
|
|
.build(),
|
||
|
|
];
|
||
|
|
}
|