mirror of
https://github.com/scsibug/nostr-rs-relay.git
synced 2024-11-13 22:49:07 -05:00
improvement: delete, do not hide, replaceable events
This commit is contained in:
parent
34a8f99d61
commit
53f83aa923
|
@ -13,7 +13,7 @@ use sqlx::pool::PoolOptions;
|
||||||
use sqlx::postgres::PgConnectOptions;
|
use sqlx::postgres::PgConnectOptions;
|
||||||
use sqlx::ConnectOptions;
|
use sqlx::ConnectOptions;
|
||||||
use crate::repo::sqlite::SqliteRepo;
|
use crate::repo::sqlite::SqliteRepo;
|
||||||
use crate::repo::postgres::{PostgresRepo,PostgresPool,PostgresRepoSettings};
|
use crate::repo::postgres::{PostgresRepo,PostgresPool};
|
||||||
use crate::repo::NostrRepo;
|
use crate::repo::NostrRepo;
|
||||||
use std::time::{Instant, Duration};
|
use std::time::{Instant, Duration};
|
||||||
use tracing::log::LevelFilter;
|
use tracing::log::LevelFilter;
|
||||||
|
@ -62,9 +62,7 @@ async fn build_postgres_pool(settings: &Settings, metrics: NostrMetrics) -> Post
|
||||||
.connect_with(options)
|
.connect_with(options)
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let repo = PostgresRepo::new(pool, metrics, PostgresRepoSettings {
|
let repo = PostgresRepo::new(pool, metrics);
|
||||||
cleanup_contact_list: true
|
|
||||||
});
|
|
||||||
if let Ok(version) = repo.migrate_up().await {
|
if let Ok(version) = repo.migrate_up().await {
|
||||||
info!("Postgres migration completed, at v{}", version);
|
info!("Postgres migration completed, at v{}", version);
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,19 +27,13 @@ pub type PostgresPool = sqlx::pool::Pool<Postgres>;
|
||||||
pub struct PostgresRepo {
|
pub struct PostgresRepo {
|
||||||
conn: PostgresPool,
|
conn: PostgresPool,
|
||||||
metrics: NostrMetrics,
|
metrics: NostrMetrics,
|
||||||
settings: PostgresRepoSettings
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct PostgresRepoSettings {
|
|
||||||
pub cleanup_contact_list: bool
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PostgresRepo {
|
impl PostgresRepo {
|
||||||
pub fn new(c: PostgresPool, m: NostrMetrics, s: PostgresRepoSettings) -> PostgresRepo {
|
pub fn new(c: PostgresPool, m: NostrMetrics) -> PostgresRepo {
|
||||||
PostgresRepo {
|
PostgresRepo {
|
||||||
conn: c,
|
conn: c,
|
||||||
metrics: m,
|
metrics: m,
|
||||||
settings: s,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -124,26 +118,12 @@ ON CONFLICT (id) DO NOTHING"#,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if e.is_replaceable() {
|
||||||
// if this event is replaceable update, hide every other replaceable
|
let update_count = sqlx::query("DELETE FROM \"event\" WHERE kind=$1 and pub_key = $2 and id not in (select id from \"event\" where kind=$1 and pub_key=$2 order by created_at desc limit 1);")
|
||||||
// event with the same kind from the same author that was issued
|
|
||||||
// earlier than this.
|
|
||||||
if e.kind == 3 && self.settings.cleanup_contact_list {
|
|
||||||
sqlx::query("delete from \"event\" where id != $1 and kind = 3 and pub_key = $2")
|
|
||||||
.bind(&id_blob)
|
|
||||||
.bind(hex::decode(&e.pubkey).ok())
|
|
||||||
.execute(&mut tx)
|
|
||||||
.await?;
|
|
||||||
} else if e.kind == 0 || e.kind == 3 || (e.kind >= 10000 && e.kind < 20000) {
|
|
||||||
let update_count = sqlx::query("UPDATE \"event\" SET hidden = 1::bit(1) \
|
|
||||||
WHERE id != $1 AND kind = $2 AND pub_key = $3 AND created_at <= $4 and hidden != 1::bit(1)")
|
|
||||||
.bind(&id_blob)
|
|
||||||
.bind(e.kind as i64)
|
.bind(e.kind as i64)
|
||||||
.bind(hex::decode(&e.pubkey).ok())
|
.bind(hex::decode(&e.pubkey).ok())
|
||||||
.bind(Utc.timestamp_opt(e.created_at as i64, 0).unwrap())
|
|
||||||
.execute(&mut tx)
|
.execute(&mut tx)
|
||||||
.await?
|
.await?.rows_affected();
|
||||||
.rows_affected();
|
|
||||||
if update_count > 0 {
|
if update_count > 0 {
|
||||||
info!(
|
info!(
|
||||||
"hid {} older replaceable kind {} events for author: {:?}",
|
"hid {} older replaceable kind {} events for author: {:?}",
|
||||||
|
|
Loading…
Reference in New Issue
Block a user