use anyhow::Result;
use async_trait::async_trait;
use sqlx::PgPool;
mod booth_category_seeder;
mod booth_seeder;
mod type_booth_seeder;
mod booth_booking_seeder;
mod event_seeder;
mod event_type_seeder;
mod lead_provenance_seeder;
mod lead_provenance_registration_seeder;
mod lead_request_seeder;
mod lead_rule_seeder;
mod lead_rule_predicate_seeder;
mod mail_seeder;
mod mail_registration_seeder;
mod mail_slot_seeder;
mod question_seeder;
mod question_answer_seeder;
mod registration_question_seeder;
mod registration_seeder;
mod registration_answer_seeder;
mod slot_seeder;
mod stage_seeder;
mod tag_category_seeder;
mod tag_seeder;
mod ticket_seeder;
mod type_mail_seeder;
pub use booth_category_seeder::SeedBoothCategorySeeder;
pub use booth_seeder::SeedBoothSeeder;
pub use type_booth_seeder::SeedTypeBoothSeeder;
pub use booth_booking_seeder::SeedBoothBookingSeeder;
pub use event_seeder::SeedEventSeeder;
pub use event_type_seeder::SeedEventTypeSeeder;
pub use lead_provenance_seeder::SeedLeadProvenanceSeeder;
pub use lead_provenance_registration_seeder::SeedLeadProvenanceRegistrationSeeder;
pub use lead_request_seeder::SeedLeadRequestSeeder;
pub use lead_rule_seeder::SeedLeadRuleSeeder;
pub use lead_rule_predicate_seeder::SeedLeadRulePredicateSeeder;
pub use mail_seeder::SeedMailSeeder;
pub use mail_registration_seeder::SeedMailRegistrationSeeder;
pub use mail_slot_seeder::SeedMailSlotSeeder;
pub use question_seeder::SeedQuestionSeeder;
pub use question_answer_seeder::SeedQuestionAnswerSeeder;
pub use registration_question_seeder::SeedRegistrationQuestionSeeder;
pub use registration_seeder::SeedRegistrationSeeder;
pub use registration_answer_seeder::SeedRegistrationAnswerSeeder;
pub use slot_seeder::SeedSlotSeeder;
pub use stage_seeder::SeedStageSeeder;
pub use tag_category_seeder::SeedTagCategorySeeder;
pub use tag_seeder::SeedTagSeeder;
pub use ticket_seeder::SeedTicketSeeder;
pub use type_mail_seeder::SeedTypeMailSeeder;
#[async_trait]
pub trait Seeder {
fn name(&self) -> &'static str;
fn order(&self) -> i32;
async fn should_run(&self, pool: &PgPool) -> Result<bool>;
async fn run(&self, pool: &PgPool) -> Result<()>;
async fn rollback(&self, _pool: &PgPool) -> Result<()> {
Ok(())
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SeederType {
Reference,
Production,
Development,
Test,
}