feat: Create unique index for RecipientId and Sender

Signed-off-by: Awiteb <a@4rs.nl>
This commit is contained in:
Awiteb 2024-07-17 22:28:36 +03:00
parent 02a0ac09cc
commit 9039ee66f0
Signed by: awiteb
GPG key ID: 3F6B55640AA6682F
2 changed files with 29 additions and 17 deletions

View file

@ -19,7 +19,7 @@
use chrono::Utc; use chrono::Utc;
use oxidetalis_core::types::PublicKey; use oxidetalis_core::types::PublicKey;
use oxidetalis_entities::prelude::*; use oxidetalis_entities::prelude::*;
use sea_orm::DatabaseConnection; use sea_orm::{sea_query::OnConflict, DatabaseConnection};
use crate::errors::ServerResult; use crate::errors::ServerResult;
@ -40,22 +40,22 @@ impl InChatRequestsExt for DatabaseConnection {
sender: &PublicKey, sender: &PublicKey,
recipient: &UserModel, recipient: &UserModel,
) -> ServerResult<()> { ) -> ServerResult<()> {
if recipient InChatRequestsEntity::insert(InChatRequestsActiveModel {
.find_related(InChatRequestsEntity) recipient_id: Set(recipient.id),
.filter(InChatRequestsColumn::Sender.eq(sender.to_string())) sender: Set(sender.to_string()),
.one(self) in_on: Set(Utc::now()),
.await? ..Default::default()
.is_none() })
{ .on_conflict(
InChatRequestsActiveModel { OnConflict::columns([
recipient_id: Set(recipient.id), InChatRequestsColumn::RecipientId,
sender: Set(sender.to_string()), InChatRequestsColumn::Sender,
in_on: Set(Utc::now()), ])
..Default::default() .do_nothing()
} .to_owned(),
.save(self) )
.await?; .exec(self)
} .await?;
Ok(()) Ok(())
} }
} }

View file

@ -29,6 +29,18 @@ pub struct Migration;
#[async_trait::async_trait] #[async_trait::async_trait]
impl MigrationTrait for Migration { impl MigrationTrait for Migration {
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
manager
.create_index(
Index::create()
.if_not_exists()
.name("sep_request")
.table(InChatRequests::Table)
.col(InChatRequests::RecipientId)
.col(InChatRequests::Sender)
.unique()
.to_owned(),
)
.await?;
manager manager
.create_table( .create_table(
Table::create() Table::create()