use anyhow::bail;
use serde::{Deserialize, Serialize};
use super::deltaobject::DeltaField;
use crate::model::viewobject::OperLogVO;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OperLogDO {
pub id: String,
pub title: DeltaField<String>,
pub content: DeltaField<String>,
pub level: DeltaField<String>,
pub create_time: DeltaField<i64>,
}
impl OperLogDO {
pub fn new(from: &OperLogVO, to: &OperLogVO) -> anyhow::Result<Self> {
if from.id != to.id {
bail!("oper_log primary not equal")
}
Ok(Self {
id: from.id.clone(),
title: DeltaField::new(&from.title, &to.title),
content: DeltaField::new(&from.content, &to.content),
level: DeltaField::new(&from.level, &to.level),
create_time: DeltaField::new(&from.create_time, &to.create_time),
})
}
pub fn has_changed(&self, vo: &OperLogVO) -> bool {
if let DeltaField::Set(val) = &self.title {
if *val != vo.title {
return true;
}
}
if let DeltaField::Set(val) = &self.content {
if *val != vo.content {
return true;
}
}
if let DeltaField::Set(val) = &self.level {
if *val != vo.level {
return true;
}
}
if let DeltaField::Set(val) = &self.create_time {
if *val != vo.create_time {
return true;
}
}
false
}
}
impl From<OperLogVO> for OperLogDO {
fn from(value: OperLogVO) -> Self {
Self {
id: value.id,
title: DeltaField::Set(value.title),
content: DeltaField::Set(value.content),
level: DeltaField::Set(value.level),
create_time: DeltaField::Set(value.create_time),
}
}
}