Files
email-unlimit/server/src/repositories/attachment_repository.rs
T

69 lines
2.0 KiB
Rust

use crate::domain::entities::email_attachment;
use anyhow::Result;
use sea_orm::{
ActiveModelTrait, ColumnTrait, DatabaseConnection, EntityTrait, QueryFilter, QueryOrder, Set,
};
/// 邮件附件数据访问
pub struct AttachmentRepository {
db: DatabaseConnection,
}
impl AttachmentRepository {
pub fn new(db: DatabaseConnection) -> Self {
Self { db }
}
#[allow(dead_code)]
pub async fn insert(
&self,
model: email_attachment::ActiveModel,
) -> Result<email_attachment::Model> {
Ok(model.insert(&self.db).await?)
}
pub async fn find_by_id(&self, id: i64) -> Result<Option<email_attachment::Model>> {
Ok(email_attachment::Entity::find_by_id(id)
.one(&self.db)
.await?)
}
pub async fn list_by_email(&self, email_id: i64) -> Result<Vec<email_attachment::Model>> {
Ok(email_attachment::Entity::find()
.filter(email_attachment::Column::EmailId.eq(email_id))
.order_by_asc(email_attachment::Column::Id)
.all(&self.db)
.await?)
}
#[allow(dead_code)]
pub async fn delete_by_email(&self, email_id: i64) -> Result<u64> {
let res = email_attachment::Entity::delete_many()
.filter(email_attachment::Column::EmailId.eq(email_id))
.exec(&self.db)
.await?;
Ok(res.rows_affected)
}
/// 批量插入附件(收信时)
#[allow(dead_code)]
pub async fn insert_many(
&self,
email_id: i64,
attachments: Vec<(Option<String>, String, i64, Vec<u8>)>,
) -> Result<()> {
for (filename, content_type, size, content) in attachments {
let model = email_attachment::ActiveModel {
email_id: Set(email_id),
filename: Set(filename),
content_type: Set(content_type),
size_bytes: Set(size),
content: Set(Some(content)),
..Default::default()
};
model.insert(&self.db).await?;
}
Ok(())
}
}