feat: Chat request implementation #14
2 changed files with 29 additions and 17 deletions
|
@ -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()
|
})
|
||||||
awiteb marked this conversation as resolved
|
|||||||
{
|
.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(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Reference in a new issue
since we are not dealing with the result. maybe a one statement approach to do
here i'm updating
InOn
if needed, but can also be changed todo_nothing()