add: notifications table
add: query_rows macro fix: postgres driver
This commit is contained in:
parent
0ea6b25138
commit
81005a6e1c
14 changed files with 258 additions and 33 deletions
|
@ -3,3 +3,4 @@ pub const CREATE_TABLE_PAGES: &str = include_str!("./sql/create_pages.sql");
|
|||
pub const CREATE_TABLE_ENTRIES: &str = include_str!("./sql/create_entries.sql");
|
||||
pub const CREATE_TABLE_MEMBERSHIPS: &str = include_str!("./sql/create_memberships.sql");
|
||||
pub const CREATE_TABLE_REACTIONS: &str = include_str!("./sql/create_reactions.sql");
|
||||
pub const CREATE_TABLE_NOTIFICATIONS: &str = include_str!("./sql/create_notifications.sql");
|
||||
|
|
|
@ -10,6 +10,7 @@ use bb8_postgres::{
|
|||
PostgresConnectionManager,
|
||||
bb8::{Pool, PooledConnection},
|
||||
};
|
||||
use std::collections::HashMap;
|
||||
use tetratto_l10n::{LangFile, read_langs};
|
||||
use tokio_postgres::{Config as PgConfig, NoTls, Row, types::ToSql};
|
||||
|
||||
|
@ -91,6 +92,38 @@ macro_rules! query_row {
|
|||
};
|
||||
}
|
||||
|
||||
pub async fn query_rows_helper<T, F>(
|
||||
conn: &Connection<'_>,
|
||||
sql: &str,
|
||||
params: &[&(dyn ToSql + Sync)],
|
||||
mut f: F,
|
||||
) -> Result<Vec<T>>
|
||||
where
|
||||
F: FnMut(&Row) -> T,
|
||||
{
|
||||
let query = conn.prepare(sql).await.unwrap();
|
||||
let res = conn.query(&query, params).await;
|
||||
|
||||
if let Ok(rows) = res {
|
||||
let mut out = Vec::new();
|
||||
|
||||
for row in rows {
|
||||
out.push(f(&row));
|
||||
}
|
||||
|
||||
return Ok(out);
|
||||
} else {
|
||||
Err(res.unwrap_err())
|
||||
}
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! query_rows {
|
||||
($conn:expr, $sql:expr, $params:expr, $f:expr) => {
|
||||
crate::database::query_rows_helper($conn, $sql, $params, $f).await
|
||||
};
|
||||
}
|
||||
|
||||
pub async fn execute_helper(
|
||||
conn: &Connection<'_>,
|
||||
sql: &str,
|
||||
|
@ -106,4 +139,8 @@ macro_rules! execute {
|
|||
($conn:expr, $sql:expr, $params:expr) => {
|
||||
crate::database::execute_helper($conn, $sql, $params).await
|
||||
};
|
||||
|
||||
($conn:expr, $sql:expr) => {
|
||||
crate::database::execute_helper($conn, $sql, &[]).await
|
||||
};
|
||||
}
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
CREATE TABLE IF NOT EXISTS notifications (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
created INTEGER NOT NULL,
|
||||
title TEXT NOT NULL,
|
||||
content TEXT NOT NULL,
|
||||
owner INTEGER NOT NULL
|
||||
)
|
|
@ -6,5 +6,7 @@ CREATE TABLE IF NOT EXISTS users (
|
|||
salt TEXT NOT NULL,
|
||||
settings TEXT NOT NULL,
|
||||
tokens TEXT NOT NULL,
|
||||
permissions INTEGER NOT NULL
|
||||
permissions INTEGER NOT NULL,
|
||||
-- counts
|
||||
notification_count INTEGER NOT NULL
|
||||
)
|
||||
|
|
|
@ -42,7 +42,6 @@ impl DataManager {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "sqlite")]
|
||||
#[macro_export]
|
||||
macro_rules! get {
|
||||
($row:ident->$idx:literal($t:tt)) => {
|
||||
|
@ -58,9 +57,32 @@ macro_rules! query_row {
|
|||
}};
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! query_rows {
|
||||
($conn:expr, $sql:expr, $params:expr, $f:expr) => {{
|
||||
let mut query = $conn.prepare($sql).unwrap();
|
||||
|
||||
if let Ok(mut rows) = query.query($params) {
|
||||
let mut out = Vec::new();
|
||||
|
||||
while let Some(row) = rows.next().unwrap() {
|
||||
out.push($f(&row));
|
||||
}
|
||||
|
||||
Ok(out)
|
||||
} else {
|
||||
Err(Error::Unknown)
|
||||
}
|
||||
}};
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! execute {
|
||||
($conn:expr, $sql:expr, $params:expr) => {
|
||||
$conn.prepare($sql).unwrap().execute($params)
|
||||
};
|
||||
|
||||
($conn:expr, $sql:expr) => {
|
||||
$conn.prepare($sql).unwrap().execute(())
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue