backbone-events 0.5.0

Events core + the sale/booth/crm/sms/desk overlay — registrations under one authoritative seat counter, the sale seam (order-minted registrations, forward-only paid heal, SO-cancel mirror cascade), booth bookings with the DB exclusivity wall, closed-vocabulary lead rules through a host sink port, the dual-channel (mail/sms) self-arming scheduler, and the exact-match desk verb (Odoo event port, core + overlay)
//! Database seeders for the event module
//!
//! Generated by metaphor-schema. Do not edit manually.
//!
//! This module provides seed data for initial database setup.
//! Seeders can be run via the seeder binary or CLI.

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;

// ============================================================================
// SEEDER TRAIT
// ============================================================================

/// Trait for database seeders
#[async_trait]
pub trait Seeder {
    /// Get the name of this seeder
    fn name(&self) -> &'static str;

    /// Get the order in which this seeder should run
    fn order(&self) -> i32;

    /// Check if this seeder should run (e.g., check if data already exists)
    async fn should_run(&self, pool: &PgPool) -> Result<bool>;

    /// Run the seeder
    async fn run(&self, pool: &PgPool) -> Result<()>;

    /// Rollback the seeder (optional)
    async fn rollback(&self, _pool: &PgPool) -> Result<()> {
        Ok(())
    }
}

// ============================================================================
// SEEDER TYPE
// ============================================================================

/// Type of seeder
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SeederType {
    /// Reference data (required for application to function)
    Reference,
    /// Initial production data
    Production,
    /// Development/testing data
    Development,
    /// Test data (for automated tests)
    Test,
}

// ============================================================================
// CUSTOM SEEDERS
// ============================================================================

// <<< CUSTOM SEEDERS START >>>
// Add custom seeders here
// <<< CUSTOM SEEDERS END >>>