feat: add outbox

Signed-off-by: kjuulh <contact@kjuulh.io>
This commit is contained in:
2023-10-03 20:59:29 +02:00
parent 3648dce8e8
commit e774529b04
4 changed files with 46 additions and 1 deletions

View File

@@ -0,0 +1,5 @@
// generated by `sqlx migrate build-script`
fn main() {
// trigger recompilation when a new migration is added
println!("cargo:rerun-if-changed=migrations");
}

View File

@@ -0,0 +1,8 @@
-- Add migration script here
CREATE TABLE outbox (
id UUID NOT NULL,
metadata JSONB NOT NULL,
content BYTEA NOT NULL,
inserted_time TIMESTAMPTZ NOT NULL DEFAULT now(),
state VARCHAR NOT NULL,
);

View File

@@ -1 +1,33 @@
use async_trait::async_trait;
use crunch_traits::{errors::PersistenceError, EventInfo};
use sqlx::{postgres::PgPoolOptions, Pool, Postgres};
pub struct PostgresPersistence {
pool: Pool<Postgres>,
}
impl PostgresPersistence {
pub async fn new(dsn: &str) -> anyhow::Result<Self> {
let pool = PgPoolOptions::new().max_connections(5).connect(dsn).await?;
sqlx::migrate!().run(&pool).await?;
Ok(Self { pool })
}
}
#[async_trait]
impl crunch_traits::Persistence for PostgresPersistence {
async fn insert(&self, event_info: &EventInfo, content: Vec<u8>) -> anyhow::Result<()> {
todo!()
}
async fn next(&self) -> Option<String> {
todo!()
}
async fn get(&self, event_id: &str) -> Result<Option<(EventInfo, Vec<u8>)>, PersistenceError> {
todo!()
}
async fn update_published(&self, event_id: &str) -> Result<(), PersistenceError> {
todo!()
}
}