//! 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"), as ::cot::db::DatabaseField>::TYPE, ) .set_null( 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"), ::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"), as ::cot::db::DatabaseField>::TYPE, ).set_null( 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"), as ::cot::db::DatabaseField>::TYPE, ) .foreign_key( ::TABLE_NAME, ::PRIMARY_KEY_NAME, ::cot::db::ForeignKeyOnDeletePolicy::Restrict, ::cot::db::ForeignKeyOnUpdatePolicy::Restrict, ) .set_null( 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"), ::TYPE, ) .set_null(::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"), ::TYPE, ) .set_null(::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"), ::TYPE, ) .set_null(::NULLABLE) ) .build(), ]; }