feat: Chat request implementation #14

Manually merged
awiteb merged 55 commits from awiteb/chat-request-and-response into master 2024-07-18 14:21:39 +02:00 AGit
2 changed files with 29 additions and 17 deletions
Showing only changes of commit 9039ee66f0 - Show all commits

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() })
awiteb marked this conversation as resolved
Review

since we are not dealing with the result. maybe a one statement approach to do

InChatRequestsEntity::insert(InChatRequestsActiveModel {
    recipient_id: Set(recipient.id),
    sender: Set(sender.to_string()),
    in_on: Set(Utc::now()),
    ..Default::default()
})
.on_conflict(
    OnConflict::columns([
        InChatRequestsColumn::RecipientId,
        InChatRequestsColumn::Sender,
    ])
    .update_column(InChatRequestsColumn::InOn)
    .to_owned(),
)
.exec(self)

here i'm updating InOn if needed, but can also be changed to do_nothing()

since we are not dealing with the result. maybe a one statement approach to do ```rust InChatRequestsEntity::insert(InChatRequestsActiveModel { recipient_id: Set(recipient.id), sender: Set(sender.to_string()), in_on: Set(Utc::now()), ..Default::default() }) .on_conflict( OnConflict::columns([ InChatRequestsColumn::RecipientId, InChatRequestsColumn::Sender, ]) .update_column(InChatRequestsColumn::InOn) .to_owned(), ) .exec(self) ``` here i'm updating `InOn` if needed, but can also be changed to `do_nothing()`
{ .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()