Formalize planning document, update DB logic
This commit is contained in:
parent
bb740067f1
commit
3ca1cec8bb
2 changed files with 91 additions and 18 deletions
|
@ -20,26 +20,66 @@ pub async fn insert(pool: &PgPool, req: Request) -> Result<(), Box<dyn StdError>
|
|||
let mut trans = pool.begin().await?;
|
||||
|
||||
// Get the id's for deduplicated values. Insert a value if one is missing.
|
||||
let path_id = sqlx::query!(
|
||||
"INSERT INTO paths (path) VALUES ($1) ON CONFLICT DO NOTHING RETURNING id",
|
||||
sqlx::query!(
|
||||
"INSERT INTO paths (path) VALUES ($1) ON CONFLICT DO NOTHING",
|
||||
&req.path,
|
||||
).fetch_one(&mut *trans).await?.id;
|
||||
let remote_id = sqlx::query!(
|
||||
"INSERT INTO remote_addresses (addr) VALUES ($1) ON CONFLICT DO NOTHING RETURNING id",
|
||||
req.addr)
|
||||
.fetch_one(&mut *trans).await?.id;
|
||||
let host_id = sqlx::query!(
|
||||
"INSERT INTO hosts (host) VALUES ($1) ON CONFLICT DO NOTHING RETURNING id",
|
||||
&req.host)
|
||||
.fetch_one(&mut *trans).await?.id;
|
||||
let user_agent_id = sqlx::query!(
|
||||
"INSERT INTO user_agents (agent) VALUES ($1) ON CONFLICT DO NOTHING RETURNING id",
|
||||
)
|
||||
.execute(&mut *trans)
|
||||
.await?;
|
||||
sqlx::query!(
|
||||
"INSERT INTO remote_addresses (addr) VALUES ($1) ON CONFLICT DO NOTHING",
|
||||
&req.addr
|
||||
)
|
||||
.execute(&mut *trans)
|
||||
.await?;
|
||||
sqlx::query!(
|
||||
"INSERT INTO hosts (host) VALUES ($1) ON CONFLICT DO NOTHING",
|
||||
&req.host
|
||||
)
|
||||
.execute(&mut *trans)
|
||||
.await?;
|
||||
sqlx::query!(
|
||||
"INSERT INTO user_agents (agent) VALUES ($1) ON CONFLICT DO NOTHING",
|
||||
&req.user_agent,
|
||||
).fetch_one(&mut *trans).await?.id;
|
||||
let referrer_id = sqlx::query!(
|
||||
"INSERT INTO referrers (referrer) VALUES ($1) ON CONFLICT DO NOTHING RETURNING id",
|
||||
)
|
||||
.execute(&mut *trans)
|
||||
.await?;
|
||||
sqlx::query!(
|
||||
"INSERT INTO referrers (referrer) VALUES ($1) ON CONFLICT DO NOTHING",
|
||||
&req.referrer,
|
||||
).fetch_one(&mut *trans).await?.id;
|
||||
)
|
||||
.execute(&mut *trans)
|
||||
.await?;
|
||||
|
||||
let path_id = sqlx::query!("SELECT id FROM paths WHERE path = ($1)", &req.path)
|
||||
.fetch_one(&mut *trans)
|
||||
.await?
|
||||
.id;
|
||||
let path_id = sqlx::query!(
|
||||
"SELECT id FROM remote_addresses WHERE addr = ($1)",
|
||||
&req.addr
|
||||
)
|
||||
.fetch_one(&mut *trans)
|
||||
.await?
|
||||
.id;
|
||||
let path_id = sqlx::query!("SELECT id FROM hosts WHERE host = ($1)", &req.host)
|
||||
.fetch_one(&mut *trans)
|
||||
.await?
|
||||
.id;
|
||||
let path_id = sqlx::query!(
|
||||
"SELECT id FROM user_agents WHERE agent = ($1)",
|
||||
&req.user_agent
|
||||
)
|
||||
.fetch_one(&mut *trans)
|
||||
.await?
|
||||
.id;
|
||||
let path_id = sqlx::query!(
|
||||
"SELECT id FROM referrers WHERE referrer = ($1)",
|
||||
&req.referrer
|
||||
)
|
||||
.fetch_one(&mut *trans)
|
||||
.await?
|
||||
.id;
|
||||
|
||||
sqlx::query!(
|
||||
"INSERT INTO hits (size, path, remote, host, user_agent, referrer, secure, time) \
|
||||
|
@ -52,7 +92,9 @@ pub async fn insert(pool: &PgPool, req: Request) -> Result<(), Box<dyn StdError>
|
|||
referrer_id,
|
||||
req.secure,
|
||||
req.timestamp,
|
||||
).execute(&mut *trans).await?;
|
||||
)
|
||||
.execute(&mut *trans)
|
||||
.await?;
|
||||
|
||||
trans.commit().await?;
|
||||
Ok(())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue