58775d4
ZhenYi
refactor: update database write logic and normalize API paths for improved clarity and consistency
58775d4
use ::session::Session;
use config::AppConfig;
use export::AppState;
use git::service::GitService;
use models::pull_request::pull_requests;
use models::repo::repos;
use sea_orm::ActiveValue::Set;
use sea_orm::{
ActiveModelTrait, ColumnTrait, DatabaseConnection, EntityTrait, PaginatorTrait, QueryFilter,
};
use uuid::Uuid;
use crate::errors::PullError;
#[derive(Clone)]
pub struct PullService {
pub state: AppState,
pub git: GitService,
}
impl PullService {
pub fn new(state: AppState) -> Self {
let git = GitService::new(state.clone());
Self { state, git }
}
pub fn config(&self) -> &AppConfig {
&self.state.config
}
pub fn db_read(&self) -> &DatabaseConnection {
self.state.database.read()
}
pub fn db_write(&self) -> &DatabaseConnection {
self.state.database.write()
}
pub fn uid(session: &Session) -> Result<i64, PullError> {
session.uid().ok_or(PullError::Unauthorized)
}
/// 开放 PR 数量回填 `repos.nums_pr`,状态变更后调用。
pub async fn recount_open(&self, repo_id: Uuid) -> Result<(), PullError> {
let open = pull_requests::Entity::find()
.filter(pull_requests::Column::RepoId.eq(repo_id))
.filter(pull_requests::Column::HasMerged.eq(false))
.filter(pull_requests::Column::ClosedAt.is_null())
.count(self.db_write())
.await?;
let repo = repos::ActiveModel {
id: Set(repo_id),
nums_pr: Set(open.cast_signed() as i32),
..Default::default()
};
repo.update(self.db_write()).await?;
Ok(())
}
}