backbone-integrations 0.6.0

Integration registry: connectors, integration accounts and an idempotent inbound event lane, with one OAuth flow (HMAC-bound state, PKCE)
Documentation
//! Public types for Integrations module
//!
//! Generated by metaphor-schema. Do not edit manually.
//!
//! These DTOs are the ONLY types other modules should use.
//! They are decoupled from internal domain entities.

use serde::{Deserialize, Serialize};
use uuid::Uuid;
use chrono::{DateTime, Utc};
use crate::domain::entity::*;

// ============================================================================
// INTEGRATIONCONNECTOR TYPES
// ============================================================================

/// Type-safe ID for IntegrationConnector
///
/// Use this instead of raw Uuid for type safety across modules.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct IntegrationConnectorId(pub Uuid);

impl IntegrationConnectorId {
    pub fn new(id: Uuid) -> Self {
        Self(id)
    }

    pub fn into_inner(self) -> Uuid {
        self.0
    }
}

impl From<Uuid> for IntegrationConnectorId {
    fn from(id: Uuid) -> Self {
        Self(id)
    }
}

impl From<IntegrationConnectorId> for Uuid {
    fn from(id: IntegrationConnectorId) -> Self {
        id.0
    }
}

/// Data transfer object for IntegrationConnector
///
/// This is the public representation of IntegrationConnector for other modules.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IntegrationConnectorDto {
    pub id: IntegrationConnectorId,
    pub provider: String,
    pub kind: ConnectorKind,
    pub direction: ConnectorDirection,
    pub status: ConnectorStatus,
    pub metadata: serde_json::Value,
}

/// Summary view of IntegrationConnector for list displays
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IntegrationConnectorSummary {
    pub id: IntegrationConnectorId,
    pub status: ConnectorStatus,
}

/// Reference to IntegrationConnector for foreign key relationships
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IntegrationConnectorRef {
    pub id: IntegrationConnectorId,
}

// ============================================================================
// INTEGRATIONACCOUNT TYPES
// ============================================================================

/// Type-safe ID for IntegrationAccount
///
/// Use this instead of raw Uuid for type safety across modules.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct IntegrationAccountId(pub Uuid);

impl IntegrationAccountId {
    pub fn new(id: Uuid) -> Self {
        Self(id)
    }

    pub fn into_inner(self) -> Uuid {
        self.0
    }
}

impl From<Uuid> for IntegrationAccountId {
    fn from(id: Uuid) -> Self {
        Self(id)
    }
}

impl From<IntegrationAccountId> for Uuid {
    fn from(id: IntegrationAccountId) -> Self {
        id.0
    }
}

/// Data transfer object for IntegrationAccount
///
/// This is the public representation of IntegrationAccount for other modules.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IntegrationAccountDto {
    pub id: IntegrationAccountId,
    pub provider: OAuthProvider,
    pub account_ref: String,
    pub status: IntegrationAccountStatus,
    pub scopes: String,
    pub pkce_verifier: Option<String>,
    pub expires_at: Option<DateTime<Utc>>,
    pub last_refreshed_at: Option<DateTime<Utc>>,
    pub metadata: serde_json::Value,
}

/// Summary view of IntegrationAccount for list displays
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IntegrationAccountSummary {
    pub id: IntegrationAccountId,
    pub status: IntegrationAccountStatus,
}

/// Reference to IntegrationAccount for foreign key relationships
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IntegrationAccountRef {
    pub id: IntegrationAccountId,
}

// ============================================================================
// INTEGRATIONEVENT TYPES
// ============================================================================

/// Type-safe ID for IntegrationEvent
///
/// Use this instead of raw Uuid for type safety across modules.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct IntegrationEventId(pub Uuid);

impl IntegrationEventId {
    pub fn new(id: Uuid) -> Self {
        Self(id)
    }

    pub fn into_inner(self) -> Uuid {
        self.0
    }
}

impl From<Uuid> for IntegrationEventId {
    fn from(id: Uuid) -> Self {
        Self(id)
    }
}

impl From<IntegrationEventId> for Uuid {
    fn from(id: IntegrationEventId) -> Self {
        id.0
    }
}

/// Data transfer object for IntegrationEvent
///
/// This is the public representation of IntegrationEvent for other modules.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IntegrationEventDto {
    pub id: IntegrationEventId,
    pub connector_id: Uuid,
    pub event_type: String,
    pub external_id: String,
    pub business_key: String,
    pub status: IntegrationStatus,
    pub payload: String,
    pub mapped_ref_type: Option<String>,
    pub mapped_ref_id: Option<Uuid>,
    pub error_detail: Option<String>,
    pub metadata: serde_json::Value,
}

/// Summary view of IntegrationEvent for list displays
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IntegrationEventSummary {
    pub id: IntegrationEventId,
    pub status: IntegrationStatus,
}

/// Reference to IntegrationEvent for foreign key relationships
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IntegrationEventRef {
    pub id: IntegrationEventId,
}

// ============================================================================
// CUSTOM TYPES
// ============================================================================

// <<< CUSTOM TYPES START >>>
// Add custom public types here
// <<< CUSTOM TYPES END >>>