Skip to main content

IntegrationsWriteService

Struct IntegrationsWriteService 

Source
pub struct IntegrationsWriteService { /* private fields */ }

Implementations§

Source§

impl IntegrationsWriteService

Source

pub fn new(pool: PgPool) -> Self

Source

pub async fn register_connector( &self, c: NewConnector, ) -> Result<Uuid, IntegrationError>

Register a connector to an external provider.

Source

pub async fn receive_event( &self, e: InboundEvent, mapper: &dyn TargetPort, events: &dyn IntegrationEventSink, ) -> Result<ReceiveOutcome, IntegrationError>

Receive an inbound event: dedup on (connector, external_id), map it to an internal action via the TargetPort, and record the outcome. A retried webhook returns the original with duplicate=true — it never re-maps. Emits IntegrationEventMapped / IntegrationEventFailed / IntegrationEventIgnored.

Source

pub async fn failures( &self, connector_id: Uuid, ) -> Result<Vec<FailedEvent>, IntegrationError>

The failure report for a connector — the failed events with their keys + error — so an operator can see WHICH provider events (e.g. settled payments) failed to book, WITHOUT querying the private ledger (completeness council 2026-07-11).

Source

pub async fn retry_failed( &self, company_id: Uuid, connector_id: Uuid, mapper: &dyn TargetPort, events: &dyn IntegrationEventSink, ) -> Result<usize, IntegrationError>

Re-drive a connector’s FAILED events through the target after the cause is fixed — the recovery path the dedup would otherwise weld shut (a re-delivered webhook dedups and never re-maps). Re-invokes the TargetPort under the SAME business-key idempotency the target enforces, so it can’t double-apply; a still-failed event that now maps transitions failed → mapped. Returns the number newly mapped (completeness council 2026-07-11).

company_id is the legacy tenancy twin (ADR-0029) — the module’s tables carry no company column, but the re-mapped events still route to the TargetPort and the outbox/event payloads, which are company-shaped; the CALLER (the composing host, which knows the tenant) names it, and an unknown value fails closed at those edges, never inside this module.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more