perf(user-agent): use sqlite INSERT ... RETURNING for sdk client approve
This commit is contained in:
@@ -16,6 +16,7 @@ use chacha20poly1305::{AeadInPlace, XChaCha20Poly1305, XNonce, aead::KeyInit};
|
|||||||
use diesel::{ExpressionMethods as _, QueryDsl as _, dsl::insert_into};
|
use diesel::{ExpressionMethods as _, QueryDsl as _, dsl::insert_into};
|
||||||
use diesel_async::RunQueryDsl as _;
|
use diesel_async::RunQueryDsl as _;
|
||||||
use ed25519_dalek::VerifyingKey;
|
use ed25519_dalek::VerifyingKey;
|
||||||
|
use fatality::Fatality;
|
||||||
use kameo::{Actor, error::SendError, messages, prelude::Context};
|
use kameo::{Actor, error::SendError, messages, prelude::Context};
|
||||||
use memsafe::MemSafe;
|
use memsafe::MemSafe;
|
||||||
use tokio::{select, sync::watch};
|
use tokio::{select, sync::watch};
|
||||||
@@ -380,39 +381,24 @@ impl UserAgentSession {
|
|||||||
program_client::created_at.eq(now),
|
program_client::created_at.eq(now),
|
||||||
program_client::updated_at.eq(now),
|
program_client::updated_at.eq(now),
|
||||||
))
|
))
|
||||||
.execute(&mut conn)
|
.returning((
|
||||||
|
program_client::id,
|
||||||
|
program_client::public_key,
|
||||||
|
program_client::created_at,
|
||||||
|
))
|
||||||
|
.get_result::<(i32, Vec<u8>, i32)>(&mut conn)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
match insert_result {
|
match insert_result {
|
||||||
Ok(_) => {
|
Ok((id, pubkey, created_at)) => Ok(response(
|
||||||
match program_client::table
|
UserAgentResponsePayload::SdkClientApprove(SdkClientApproveResponse {
|
||||||
.filter(program_client::public_key.eq(&pubkey_bytes))
|
result: Some(ApproveResult::Client(SdkClientEntry {
|
||||||
.order(program_client::id.desc())
|
id,
|
||||||
.select((
|
pubkey,
|
||||||
program_client::id,
|
created_at,
|
||||||
program_client::public_key,
|
})),
|
||||||
program_client::created_at,
|
}),
|
||||||
))
|
)),
|
||||||
.first::<(i32, Vec<u8>, i32)>(&mut conn)
|
|
||||||
.await
|
|
||||||
{
|
|
||||||
Ok((id, pubkey, created_at)) => Ok(response(
|
|
||||||
UserAgentResponsePayload::SdkClientApprove(SdkClientApproveResponse {
|
|
||||||
result: Some(ApproveResult::Client(SdkClientEntry {
|
|
||||||
id,
|
|
||||||
pubkey,
|
|
||||||
created_at,
|
|
||||||
})),
|
|
||||||
}),
|
|
||||||
)),
|
|
||||||
Err(e) => {
|
|
||||||
error!(?e, "Failed to fetch inserted SDK client");
|
|
||||||
Err(TransportResponseError::SdkClientApprove(
|
|
||||||
ProtoSdkClientError::Internal,
|
|
||||||
))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Err(diesel::result::Error::DatabaseError(
|
Err(diesel::result::Error::DatabaseError(
|
||||||
diesel::result::DatabaseErrorKind::UniqueViolation,
|
diesel::result::DatabaseErrorKind::UniqueViolation,
|
||||||
_,
|
_,
|
||||||
@@ -574,7 +560,7 @@ impl Actor for UserAgentSession {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
let should_stop = err.is_terminal();
|
let should_stop = err.is_fatal();
|
||||||
if self.props.transport.send(Err(err)).await.is_err() {
|
if self.props.transport.send(Err(err)).await.is_err() {
|
||||||
error!(actor = "useragent", reason = "channel closed", "send.failed");
|
error!(actor = "useragent", reason = "channel closed", "send.failed");
|
||||||
return Some(kameo::mailbox::Signal::Stop);
|
return Some(kameo::mailbox::Signal::Stop);
|
||||||
|
|||||||
Reference in New Issue
Block a user