package sample.context.orm;
import java.time.LocalDateTime;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.*;
import sample.context.Timestamper;
import sample.context.actor.*;
/**
* Entityの永続化タイミングでAOP処理を差し込む Interceptor。
*/
@Getter
@Setter
public class OrmInterceptor {
@Autowired
private ActorSession session;
@Autowired
private Timestamper time;
/** 登録時の事前差し込み処理を行います。 */
public void touchForCreate(Object entity) {
if (entity instanceof OrmActiveMetaRecord) {
Actor staff = session.actor();
LocalDateTime now = time.date();
OrmActiveMetaRecord<?> metaEntity = (OrmActiveMetaRecord<?>) entity;
metaEntity.setCreateId(staff.getId());
metaEntity.setCreateDate(now);
metaEntity.setUpdateId(staff.getId());
metaEntity.setUpdateDate(now);
}
}
/** 変更時の事前差し込み処理を行います。 */
public boolean touchForUpdate(final Object entity) {
if (entity instanceof OrmActiveMetaRecord) {
Actor staff = session.actor();
LocalDateTime now = time.date();
OrmActiveMetaRecord<?> metaEntity = (OrmActiveMetaRecord<?>) entity;
if (metaEntity.getCreateDate() == null) {
metaEntity.setCreateId(staff.getId());
metaEntity.setCreateDate(now);
}
metaEntity.setUpdateId(staff.getId());
metaEntity.setUpdateDate(now);
}
return false;
}
}