Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions ceres/src/merge_checker/code_review_checker.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,10 @@ impl Checker for CodeReviewChecker {

impl CodeReviewChecker {
async fn verify_mr(&self, mr_link: &str) -> Result<(), MegaError> {
let mr_id = self.storage.mr_storage().get_mr(mr_link).await?.unwrap().id;

let reviewers = self
.storage
.reviewer_storage()
.list_reviewers(mr_id)
.list_reviewers(mr_link)
.await?;

let mut err_message = String::new();
Expand Down
7 changes: 7 additions & 0 deletions jupiter/callisto/src/entity_ext/mega_conversation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,12 @@ impl mega_conversation::Model {
username: &str,
) -> Self {
let now = chrono::Utc::now().naive_utc();
let resolved = if conv_type == ConvTypeEnum::Review {
Some(false)
} else {
None
};

Self {
id: generate_id(),
link: link.to_owned(),
Expand All @@ -66,6 +72,7 @@ impl mega_conversation::Model {
created_at: now,
updated_at: now,
username: username.to_owned(),
resolved,
}
}
}
1 change: 1 addition & 0 deletions jupiter/callisto/src/mega_conversation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ pub struct Model {
pub created_at: DateTime,
pub updated_at: DateTime,
pub username: String,
pub resolved: Option<bool>,
}

#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
Expand Down
7 changes: 4 additions & 3 deletions jupiter/callisto/src/mega_mr_reviewer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ use serde::{Deserialize, Serialize};
pub struct Model {
#[sea_orm(primary_key, auto_increment = false)]
pub id: i64,
pub mr_id: i64,
#[sea_orm(column_type = "Text")]
pub campsite_id: String,
pub approved: bool,
pub username: String,
pub mr_link: String,
pub created_at: DateTime,
pub updated_at: DateTime,
}

#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
Expand Down
166 changes: 166 additions & 0 deletions jupiter/src/migration/m20250910_153212_add_username_to_reviewer.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
use sea_orm_migration::prelude::*;

#[derive(DeriveMigrationName)]
pub struct Migration;

#[async_trait::async_trait]
impl MigrationTrait for Migration {
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
// Split each alter into individual statements for SQLite compatibility

// --- mega_mr_reviewer ---
manager
.alter_table(
Table::alter()
.table(MegaMrReviewer::Table)
.add_column(
ColumnDef::new(MegaMrReviewer::Username)
.string()
.not_null()
.default("".to_string()),
)
.to_owned(),
)
.await?;

manager
.alter_table(
Table::alter()
.table(MegaMrReviewer::Table)
.add_column(
ColumnDef::new(MegaMrReviewer::MrLink)
.string()
.not_null()
.default("".to_string()),
)
.to_owned(),
)
.await?;

manager
.alter_table(
Table::alter()
.table(MegaMrReviewer::Table)
.add_column(
ColumnDef::new(MegaMrReviewer::CreatedAt)
.timestamp()
.not_null(),
)
.to_owned(),
)
.await?;

manager
.alter_table(
Table::alter()
.table(MegaMrReviewer::Table)
.add_column(
ColumnDef::new(MegaMrReviewer::UpdatedAt)
.timestamp()
.not_null(),
)
.to_owned(),
)
.await?;

manager
.alter_table(
Table::alter()
.table(MegaMrReviewer::Table)
.drop_column(MegaMrReviewer::CampsiteID)
.to_owned(),
)
.await?;

manager
.alter_table(
Table::alter()
.table(MegaMrReviewer::Table)
.drop_column(MegaMrReviewer::MrId)
.to_owned(),
)
.await?;

// --- mega_conversation ---
manager
.alter_table(
Table::alter()
.table(MegaConversation::Table)
.add_column(ColumnDef::new(MegaConversation::Resolved).boolean().null())
.to_owned(),
)
.await?;

Ok(())
}

async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
// Reverse the Resolved column
manager
.alter_table(
Table::alter()
.table(MegaConversation::Table)
.drop_column(MegaConversation::Resolved)
.to_owned(),
)
.await?;

// Reverse mega_mr_reviewer changes
manager
.alter_table(
Table::alter()
.table(MegaMrReviewer::Table)
.drop_column(MegaMrReviewer::Username)
.to_owned(),
)
.await?;

manager
.alter_table(
Table::alter()
.table(MegaMrReviewer::Table)
.drop_column(MegaMrReviewer::MrLink)
.to_owned(),
)
.await?;

manager
.alter_table(
Table::alter()
.table(MegaMrReviewer::Table)
.drop_column(MegaMrReviewer::CreatedAt)
.to_owned(),
)
.await?;

manager
.alter_table(
Table::alter()
.table(MegaMrReviewer::Table)
.drop_column(MegaMrReviewer::UpdatedAt)
.to_owned(),
)
.await?;

Ok(())
}
}

#[derive(DeriveIden)]
#[sea_orm(iden = "mega_mr_reviewer")]
enum MegaMrReviewer {
Table,
MrId,
MrLink,
CampsiteID,
Username,
CreatedAt,
UpdatedAt,
}

#[derive(DeriveIden)]
#[sea_orm(iden = "mega_conversation")]
enum MegaConversation {
Table,
Resolved,
}
3 changes: 3 additions & 0 deletions jupiter/src/migration/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ mod m20250903_071928_add_issue_refs;
mod m20250904_120000_add_commit_auths;
mod m20250904_074945_modify_tasks_and_builds;
mod m20250905_163011_add_mr_reviewer;
mod m20250910_153212_add_username_to_reviewer;

/// Creates a primary key column definition with big integer type.
///
/// # Arguments
Expand Down Expand Up @@ -103,6 +105,7 @@ impl MigratorTrait for Migrator {
Box::new(m20250904_120000_add_commit_auths::Migration),
Box::new(m20250904_074945_modify_tasks_and_builds::Migration),
Box::new(m20250905_163011_add_mr_reviewer::Migration),
Box::new(m20250910_153212_add_username_to_reviewer::Migration),
]
}
}
Expand Down
37 changes: 34 additions & 3 deletions jupiter/src/storage/conversation_storage.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
use std::ops::Deref;

use sea_orm::prelude::Expr;
use sea_orm::{ActiveModelTrait, ColumnTrait, EntityTrait, IntoActiveModel, QueryFilter};

use callisto::sea_orm_active_enums::ConvTypeEnum;
use callisto::{mega_conversation, reactions};
use common::errors::MegaError;
use sea_orm::prelude::Expr;
use sea_orm::{ActiveModelTrait, ColumnTrait, EntityTrait, IntoActiveModel, QueryFilter, Set};

use crate::model::conv_dto::ConvWithReactions;
use crate::storage::base_storage::{BaseStorage, StorageConnector};
Expand Down Expand Up @@ -107,4 +106,36 @@ impl ConversationStorage {
.await?;
Ok(())
}

pub async fn change_review_state(
&self,
mr_link: &str,
review_id: &i64,
username: &str,
state: bool,
) -> Result<(), MegaError> {
let mut conversation = mega_conversation::Entity::find()
.filter(mega_conversation::Column::Id.eq(*review_id))
.filter(mega_conversation::Column::ConvType.eq(ConvTypeEnum::Review))
.filter(mega_conversation::Column::Username.eq(username))
.filter(mega_conversation::Column::Link.eq(mr_link))
.one(self.get_connection())
.await
.map_err(|e| {
tracing::error!("Error finding conversation: {e}");
e
})?
.ok_or_else(|| MegaError::with_message("No conversation found"))?
.into_active_model();

conversation.resolved = Set(Some(state));
conversation.updated_at = Set(chrono::Utc::now().naive_utc());

conversation
.update(self.get_connection())
.await
.map_err(|e| MegaError::with_message(format!("Error updating conversation: {e}")))?;

Ok(())
}
}
1 change: 1 addition & 0 deletions jupiter/src/storage/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,7 @@ impl Storage {
pub fn commit_binding_storage(&self) -> CommitBindingStorage {
self.app_service.commit_binding_storage.clone()
}

pub fn reviewer_storage(&self) -> MrReviewerStorage {
self.app_service.reviewer_storage.clone()
}
Expand Down
Loading
Loading