// OxideTalis Messaging Protocol homeserver database migrations // Copyright (C) 2024 Awiteb , OxideTalis Contributors // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. //! Migration to create the `in_chat_requests` table, a table for incoming chat //! requests from other users use sea_orm_migration::prelude::*; use crate::create_users_table::Users; #[derive(DeriveMigrationName)] pub struct Migration; #[async_trait::async_trait] impl MigrationTrait for Migration { async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { manager .create_table( Table::create() .table(InChatRequests::Table) .if_not_exists() .col( ColumnDef::new(InChatRequests::Id) .big_integer() .not_null() .auto_increment() .primary_key(), ) .col( ColumnDef::new(InChatRequests::RecipientId) .big_integer() .not_null(), ) .foreign_key( ForeignKey::create() .name("fk-in_chat_requests-users") .from(InChatRequests::Table, InChatRequests::RecipientId) .to(Users::Table, Users::Id) .on_update(ForeignKeyAction::NoAction) .on_delete(ForeignKeyAction::Cascade), ) .col(ColumnDef::new(InChatRequests::Sender).string().not_null()) .col( ColumnDef::new(InChatRequests::InOn) .timestamp_with_time_zone() .not_null(), ) .to_owned(), ) .await?; manager .create_index( Index::create() .if_not_exists() .name("sep_request") .table(InChatRequests::Table) .col(InChatRequests::RecipientId) .col(InChatRequests::Sender) .unique() .to_owned(), ) .await } } #[derive(DeriveIden)] enum InChatRequests { Table, Id, RecipientId, /// Public key of the sender Sender, InOn, }