From c20ad0344ac58d2939cf9bdc4cd7006156f3fc62 Mon Sep 17 00:00:00 2001 From: wayne <wayne8692wayne8692@gmail.com> Date: 星期四, 24 二月 2022 14:41:23 +0800 Subject: [PATCH] [add] [todo 135141] (local db需跑 02/21的sql) 新增稽核紀錄表,及15個會觸發的稽核紀錄位置 --- pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/AuditLoggingFactory.java | 28 + pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingConsultantLoginStrategy.java | 48 +++ pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingSendFillSatisfactionNoticeStrategy.java | 34 ++ pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java | 10 pamapi/src/main/java/com/pollex/pam/domain/AuditLogging.java | 76 ++++ pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingEditCustomerStrategy.java | 39 ++ pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingCancelAppointmentStrategy.java | 51 +++ pamapi/src/main/java/com/pollex/pam/repository/AuditLoggingRepository.java | 9 pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingCreateAppointmentStrategy.java | 37 ++ pamapi/src/main/java/com/pollex/pam/web/rest/InterviewRecordResource.java | 13 pamapi/src/main/java/com/pollex/pam/aop/logging/audit/AuditLoggingAspect.java | 35 ++ pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingCheckAppointmentStrategy.java | 51 +++ pamapi/src/main/java/com/pollex/pam/web/rest/OtpResource.java | 5 pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingCustomerLoginStrategy.java | 38 ++ pamapi/pom.xml | 4 pamapi/src/main/java/com/pollex/pam/aop/logging/audit/AuditLoggingInject.java | 11 pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/ConsultantReadAppointmentStrategy.java | 44 ++ pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java | 17 pamapi/src/main/java/com/pollex/pam/aop/logging/audit/AuditLoggingType.java | 24 + pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingEditConsultantStrategy.java | 39 ++ pamapi/src/main/java/com/pollex/pam/web/rest/EServiceResource.java | 5 pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantEditDTO.java | 4 pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingCreateInterviewStrategy.java | 39 ++ pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingFillSatisfactionStrategy.java | 58 +++ pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/DoNothingStrategy.java | 25 + pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingSendInterviewNoticeStrategy.java | 39 ++ pamapi/src/main/java/com/pollex/pam/web/rest/CustomerInfoResource.java | 4 pamapi/src/main/java/com/pollex/pam/web/rest/NoticeResource.java | 11 pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingEditAppointmentStrategy.java | 37 ++ pamapi/src/main/java/com/pollex/pam/web/rest/SatisfactionResource.java | 6 pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/AuditLoggingStrategy.java | 11 pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingAppointmentCloseStrategy.java | 52 +++ 32 files changed, 890 insertions(+), 14 deletions(-) diff --git a/pamapi/pom.xml b/pamapi/pom.xml index a070277..bda6083 100644 --- a/pamapi/pom.xml +++ b/pamapi/pom.xml @@ -344,6 +344,10 @@ <artifactId>wsdl4j</artifactId> <version>1.6.2</version> </dependency> + <dependency> + <groupId>com.google.code.gson</groupId> + <artifactId>gson</artifactId> + </dependency> <!-- diff --git a/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/AuditLoggingAspect.java b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/AuditLoggingAspect.java new file mode 100644 index 0000000..55c2b62 --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/AuditLoggingAspect.java @@ -0,0 +1,35 @@ +package com.pollex.pam.aop.logging.audit; + +import com.pollex.pam.aop.logging.audit.strategy.AuditLoggingFactory; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Method; + +@Component +@Aspect +public class AuditLoggingAspect { + + private static final Logger log = LoggerFactory.getLogger(AuditLoggingAspect.class); + + @Autowired + AuditLoggingFactory auditLoggingFactory; + + @Around("@annotation(com.pollex.pam.aop.logging.audit.AuditLoggingInject)") + public Object around(ProceedingJoinPoint joinPoint) throws Throwable { + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + AuditLoggingInject auditLoggingInject = method.getAnnotation(AuditLoggingInject.class); + + log.info("run audit logging strategy = {}", auditLoggingInject.type()); + auditLoggingFactory.getAuditLoggingStrategy(auditLoggingInject.type()).auditLogging(joinPoint); + + return joinPoint.proceed(); + } +} diff --git a/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/AuditLoggingInject.java b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/AuditLoggingInject.java new file mode 100644 index 0000000..3f27ded --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/AuditLoggingInject.java @@ -0,0 +1,11 @@ +package com.pollex.pam.aop.logging.audit; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface AuditLoggingInject { + AuditLoggingType type(); +} diff --git a/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/AuditLoggingType.java b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/AuditLoggingType.java new file mode 100644 index 0000000..59f795c --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/AuditLoggingType.java @@ -0,0 +1,24 @@ +package com.pollex.pam.aop.logging.audit; + +public enum AuditLoggingType { + CUSTOMER_LOGIN, + EDIT_CUSTOMER_DATA, + CUSTOMER_CREATE_APPOINTMENT, + CUSTOMER_CANCEL_APPOINTMENT, + CUSTOMER_EDIT_APPOINTMENT, + + CHECK_APPOINTMENT, + CUSTOMER_FILL_SATISFACTION, + + CONSULTANT_LOGIN, + EDIT_CONSULTANT_DATA, + CONSULTANT_READ_APPOINTMENT, + CONSULTANT_CREATE_INTERVIEW, + CONSULTANT_SEND_INTERVIEW_NOTICE, + + APPOINTMENT_CLOSE, + EDIT_CLOSED_APPOINTMENT, + CONSULTANT_SEND_FILL_SATISFACTION_NOTICE, + + DO_NOTHING +} diff --git a/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/AuditLoggingFactory.java b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/AuditLoggingFactory.java new file mode 100644 index 0000000..87d1513 --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/AuditLoggingFactory.java @@ -0,0 +1,28 @@ +package com.pollex.pam.aop.logging.audit.strategy; + +import com.pollex.pam.aop.logging.audit.AuditLoggingType; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class AuditLoggingFactory { + + @Autowired + List<AuditLoggingStrategy> strategies; + + @Autowired + DoNothingStrategy doNothingStrategy; + + public AuditLoggingStrategy getAuditLoggingStrategy(AuditLoggingType type) { + for(AuditLoggingStrategy strategy : strategies) { + if(strategy.getType() == type) { + return strategy; + } + } + + return doNothingStrategy; + } + +} diff --git a/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/AuditLoggingStrategy.java b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/AuditLoggingStrategy.java new file mode 100644 index 0000000..b500621 --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/AuditLoggingStrategy.java @@ -0,0 +1,11 @@ +package com.pollex.pam.aop.logging.audit.strategy; + +import com.pollex.pam.aop.logging.audit.AuditLoggingType; +import org.aspectj.lang.ProceedingJoinPoint; +import org.springframework.stereotype.Component; + +@Component +public interface AuditLoggingStrategy { + AuditLoggingType getType(); + void auditLogging(ProceedingJoinPoint joinPoint); +} diff --git a/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/ConsultantReadAppointmentStrategy.java b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/ConsultantReadAppointmentStrategy.java new file mode 100644 index 0000000..d770121 --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/ConsultantReadAppointmentStrategy.java @@ -0,0 +1,44 @@ +package com.pollex.pam.aop.logging.audit.strategy; + +import com.google.gson.Gson; +import com.pollex.pam.aop.logging.audit.AuditLoggingType; +import com.pollex.pam.domain.Appointment; +import com.pollex.pam.domain.AuditLogging; +import com.pollex.pam.repository.AuditLoggingRepository; +import com.pollex.pam.security.SecurityUtils; +import com.pollex.pam.service.AppointmentService; +import org.aspectj.lang.ProceedingJoinPoint; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import static com.pollex.pam.aop.logging.audit.AuditLoggingType.CONSULTANT_READ_APPOINTMENT; + +@Component +@Transactional +public class ConsultantReadAppointmentStrategy implements AuditLoggingStrategy{ + + @Autowired + AuditLoggingRepository auditLoggingRepository; + + @Autowired + AppointmentService appointmentService; + + @Override + public AuditLoggingType getType() { + return CONSULTANT_READ_APPOINTMENT; + } + + @Override + public void auditLogging(ProceedingJoinPoint joinPoint) { + Long appointmentId = (Long) joinPoint.getArgs()[0]; + Appointment appointment = appointmentService.findById(appointmentId); + + AuditLogging auditLogging = new AuditLogging(); + auditLogging.setContent(new Gson().toJson(appointment)); + auditLogging.setFunctionalType(getType()); + auditLogging.setCreatedBy(SecurityUtils.getAgentNo()); + + auditLoggingRepository.save(auditLogging); + } +} diff --git a/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/DoNothingStrategy.java b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/DoNothingStrategy.java new file mode 100644 index 0000000..4f602cc --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/DoNothingStrategy.java @@ -0,0 +1,25 @@ +package com.pollex.pam.aop.logging.audit.strategy; + +import com.pollex.pam.aop.logging.audit.AuditLoggingType; +import org.aspectj.lang.ProceedingJoinPoint; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import static com.pollex.pam.aop.logging.audit.AuditLoggingType.DO_NOTHING; + +@Component +public class DoNothingStrategy implements AuditLoggingStrategy{ + + private static final Logger log = LoggerFactory.getLogger(DoNothingStrategy.class); + + @Override + public AuditLoggingType getType() { + return DO_NOTHING; + } + + @Override + public void auditLogging(ProceedingJoinPoint joinPoint) { + log.info("audit logging do nothing...."); + } +} diff --git a/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingAppointmentCloseStrategy.java b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingAppointmentCloseStrategy.java new file mode 100644 index 0000000..9b7fc45 --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingAppointmentCloseStrategy.java @@ -0,0 +1,52 @@ +package com.pollex.pam.aop.logging.audit.strategy; + +import com.google.gson.Gson; +import com.pollex.pam.aop.logging.audit.AuditLoggingType; +import com.pollex.pam.domain.AuditLogging; +import com.pollex.pam.repository.AppointmentClosedInfoRepository; +import com.pollex.pam.repository.AuditLoggingRepository; +import com.pollex.pam.security.SecurityUtils; +import com.pollex.pam.service.dto.AppointmentCloseDTO; +import org.aspectj.lang.ProceedingJoinPoint; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import static com.pollex.pam.aop.logging.audit.AuditLoggingType.APPOINTMENT_CLOSE; +import static com.pollex.pam.aop.logging.audit.AuditLoggingType.EDIT_CLOSED_APPOINTMENT; + +@Component +@Transactional +public class LoggingAppointmentCloseStrategy implements AuditLoggingStrategy{ + + @Autowired + AuditLoggingRepository auditLoggingRepository; + + @Autowired + AppointmentClosedInfoRepository appointmentClosedInfoRepository; + + @Override + public AuditLoggingType getType() { + return APPOINTMENT_CLOSE; + } + + @Override + public void auditLogging(ProceedingJoinPoint joinPoint) { + AppointmentCloseDTO dto = (AppointmentCloseDTO) joinPoint.getArgs()[0]; + Long appointmentId = dto.getAppointmentId(); + + AuditLogging auditLogging = new AuditLogging(); + auditLogging.setContent(new Gson().toJson(dto)); + auditLogging.setCreatedBy(SecurityUtils.getCurrentUserLogin().orElse(null)); + + boolean isAppointmentClosedInfoExist = appointmentClosedInfoRepository.findByAppointmentId(appointmentId).isPresent(); + if(isAppointmentClosedInfoExist) { + auditLogging.setFunctionalType(EDIT_CLOSED_APPOINTMENT); + } + else { + auditLogging.setFunctionalType(APPOINTMENT_CLOSE); + } + + auditLoggingRepository.save(auditLogging); + } +} diff --git a/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingCancelAppointmentStrategy.java b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingCancelAppointmentStrategy.java new file mode 100644 index 0000000..ffcd39e --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingCancelAppointmentStrategy.java @@ -0,0 +1,51 @@ +package com.pollex.pam.aop.logging.audit.strategy; + +import com.google.gson.Gson; +import com.pollex.pam.aop.logging.audit.AuditLoggingType; +import com.pollex.pam.domain.AuditLogging; +import com.pollex.pam.repository.AppointmentRepository; +import com.pollex.pam.repository.AuditLoggingRepository; +import com.pollex.pam.security.SecurityUtils; +import com.pollex.pam.service.dto.AppointmentDTO; +import com.pollex.pam.service.mapper.AppointmentMapper; +import org.aspectj.lang.ProceedingJoinPoint; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import static com.pollex.pam.aop.logging.audit.AuditLoggingType.CUSTOMER_CANCEL_APPOINTMENT; + +@Component +@Transactional +public class LoggingCancelAppointmentStrategy implements AuditLoggingStrategy { + + @Autowired + AuditLoggingRepository auditLoggingRepository; + + @Autowired + AppointmentRepository appointmentRepository; + + @Autowired + AppointmentMapper appointmentMapper; + + @Override + public AuditLoggingType getType() { + return CUSTOMER_CANCEL_APPOINTMENT; + } + + @Override + public void auditLogging(ProceedingJoinPoint joinPoint) { + Long appointmentId = (Long) joinPoint.getArgs()[0]; + + appointmentRepository.findById(appointmentId).ifPresent(appointment -> { + AppointmentDTO dto = appointmentMapper.toAppointmentDTO(appointment); + + AuditLogging auditLogging = new AuditLogging(); + auditLogging.setContent(new Gson().toJson(dto)); + auditLogging.setFunctionalType(getType()); + auditLogging.setCreatedBy(SecurityUtils.getCurrentUserLogin().orElse(null)); + + auditLoggingRepository.save(auditLogging); + }); + } +} diff --git a/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingCheckAppointmentStrategy.java b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingCheckAppointmentStrategy.java new file mode 100644 index 0000000..240a6fc --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingCheckAppointmentStrategy.java @@ -0,0 +1,51 @@ +package com.pollex.pam.aop.logging.audit.strategy; + +import com.google.gson.Gson; +import com.pollex.pam.aop.logging.audit.AuditLoggingType; +import com.pollex.pam.domain.AuditLogging; +import com.pollex.pam.repository.AppointmentRepository; +import com.pollex.pam.repository.AuditLoggingRepository; +import com.pollex.pam.security.SecurityUtils; +import com.pollex.pam.service.dto.AppointmentDTO; +import com.pollex.pam.service.mapper.AppointmentMapper; +import org.aspectj.lang.ProceedingJoinPoint; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import static com.pollex.pam.aop.logging.audit.AuditLoggingType.CHECK_APPOINTMENT; + +@Component +@Transactional +public class LoggingCheckAppointmentStrategy implements AuditLoggingStrategy{ + + @Autowired + AuditLoggingRepository auditLoggingRepository; + + @Autowired + AppointmentRepository appointmentRepository; + + @Autowired + AppointmentMapper appointmentMapper; + + @Override + public AuditLoggingType getType() { + return CHECK_APPOINTMENT; + } + + @Override + public void auditLogging(ProceedingJoinPoint joinPoint) { + Long appointmentId = (Long) joinPoint.getArgs()[0]; + + appointmentRepository.findById(appointmentId).ifPresent(appointment -> { + AppointmentDTO dto = appointmentMapper.toAppointmentDTO(appointment); + + AuditLogging auditLogging = new AuditLogging(); + auditLogging.setContent(new Gson().toJson(dto)); + auditLogging.setFunctionalType(getType()); + auditLogging.setCreatedBy(SecurityUtils.getCurrentUserLogin().orElse(null)); + + auditLoggingRepository.save(auditLogging); + }); + } +} diff --git a/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingConsultantLoginStrategy.java b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingConsultantLoginStrategy.java new file mode 100644 index 0000000..41373a7 --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingConsultantLoginStrategy.java @@ -0,0 +1,48 @@ +package com.pollex.pam.aop.logging.audit.strategy; + +import com.google.gson.Gson; +import com.pollex.pam.aop.logging.audit.AuditLoggingType; +import com.pollex.pam.domain.AuditLogging; +import com.pollex.pam.repository.AuditLoggingRepository; +import com.pollex.pam.repository.ConsultantRepository; +import com.pollex.pam.service.ConsultantService; +import com.pollex.pam.web.rest.vm.EServiceLoginVM; +import org.aspectj.lang.ProceedingJoinPoint; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import static com.pollex.pam.aop.logging.audit.AuditLoggingType.CONSULTANT_LOGIN; + +@Component +@Transactional +public class LoggingConsultantLoginStrategy implements AuditLoggingStrategy{ + + @Autowired + AuditLoggingRepository auditLoggingRepository; + + @Autowired + ConsultantRepository consultantRepository; + + @Autowired + ConsultantService consultantService; + + @Override + public AuditLoggingType getType() { + return CONSULTANT_LOGIN; + } + + @Override + public void auditLogging(ProceedingJoinPoint joinPoint) { + EServiceLoginVM loginVM = (EServiceLoginVM)joinPoint.getArgs()[0]; + consultantRepository.findOneByAgentNo(loginVM.getUsername()).ifPresent(consultant -> { + + AuditLogging auditLogging = new AuditLogging(); + auditLogging.setContent(new Gson().toJson(consultant)); + auditLogging.setFunctionalType(getType()); + auditLogging.setCreatedBy(loginVM.getUsername()); + + auditLoggingRepository.save(auditLogging); + }); + } +} diff --git a/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingCreateAppointmentStrategy.java b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingCreateAppointmentStrategy.java new file mode 100644 index 0000000..56402ec --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingCreateAppointmentStrategy.java @@ -0,0 +1,37 @@ +package com.pollex.pam.aop.logging.audit.strategy; + +import com.google.gson.Gson; +import com.pollex.pam.aop.logging.audit.AuditLoggingType; +import com.pollex.pam.domain.AuditLogging; +import com.pollex.pam.repository.AuditLoggingRepository; +import com.pollex.pam.security.SecurityUtils; +import com.pollex.pam.service.dto.AppointmentCreateDTO; +import org.aspectj.lang.ProceedingJoinPoint; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +@Component +@Transactional +public class LoggingCreateAppointmentStrategy implements AuditLoggingStrategy { + + @Autowired + AuditLoggingRepository auditLoggingRepository; + + @Override + public AuditLoggingType getType() { + return AuditLoggingType.CUSTOMER_CREATE_APPOINTMENT; + } + + @Override + public void auditLogging(ProceedingJoinPoint joinPoint) { + AppointmentCreateDTO dto = (AppointmentCreateDTO) joinPoint.getArgs()[0]; + + AuditLogging auditLogging = new AuditLogging(); + auditLogging.setContent(new Gson().toJson(dto)); + auditLogging.setFunctionalType(getType()); + auditLogging.setCreatedBy(SecurityUtils.getCurrentUserLogin().orElse(null)); + + auditLoggingRepository.save(auditLogging); + } +} diff --git a/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingCreateInterviewStrategy.java b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingCreateInterviewStrategy.java new file mode 100644 index 0000000..2cf3c11 --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingCreateInterviewStrategy.java @@ -0,0 +1,39 @@ +package com.pollex.pam.aop.logging.audit.strategy; + +import com.google.gson.Gson; +import com.pollex.pam.aop.logging.audit.AuditLoggingType; +import com.pollex.pam.domain.AuditLogging; +import com.pollex.pam.repository.AuditLoggingRepository; +import com.pollex.pam.security.SecurityUtils; +import com.pollex.pam.service.dto.InterviewRecordDTO; +import org.aspectj.lang.ProceedingJoinPoint; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import static com.pollex.pam.aop.logging.audit.AuditLoggingType.CONSULTANT_CREATE_INTERVIEW; + +@Component +@Transactional +public class LoggingCreateInterviewStrategy implements AuditLoggingStrategy{ + + @Autowired + AuditLoggingRepository auditLoggingRepository; + + @Override + public AuditLoggingType getType() { + return CONSULTANT_CREATE_INTERVIEW; + } + + @Override + public void auditLogging(ProceedingJoinPoint joinPoint) { + InterviewRecordDTO dto = (InterviewRecordDTO) joinPoint.getArgs()[0]; + + AuditLogging auditLogging = new AuditLogging(); + auditLogging.setContent(new Gson().toJson(dto)); + auditLogging.setFunctionalType(getType()); + auditLogging.setCreatedBy(SecurityUtils.getCurrentUserLogin().orElse(null)); + + auditLoggingRepository.save(auditLogging); + } +} diff --git a/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingCustomerLoginStrategy.java b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingCustomerLoginStrategy.java new file mode 100644 index 0000000..24d5b6f --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingCustomerLoginStrategy.java @@ -0,0 +1,38 @@ +package com.pollex.pam.aop.logging.audit.strategy; + +import com.google.gson.Gson; +import com.pollex.pam.aop.logging.audit.AuditLoggingType; +import com.pollex.pam.domain.AuditLogging; +import com.pollex.pam.repository.AuditLoggingRepository; +import com.pollex.pam.web.rest.vm.VerifyOtpVM; +import org.aspectj.lang.ProceedingJoinPoint; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import static com.pollex.pam.aop.logging.audit.AuditLoggingType.CUSTOMER_LOGIN; + +@Component +@Transactional +public class LoggingCustomerLoginStrategy implements AuditLoggingStrategy{ + + @Autowired + AuditLoggingRepository auditLoggingRepository; + + @Override + public AuditLoggingType getType() { + return CUSTOMER_LOGIN; + } + + @Override + public void auditLogging(ProceedingJoinPoint joinPoint) { + VerifyOtpVM verifyOtpVM = (VerifyOtpVM) joinPoint.getArgs()[0]; + + AuditLogging logging = new AuditLogging(); + logging.setContent(new Gson().toJson(verifyOtpVM)); + logging.setFunctionalType(getType()); + logging.setCreatedBy(verifyOtpVM.getAccount()); + + auditLoggingRepository.save(logging); + } +} diff --git a/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingEditAppointmentStrategy.java b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingEditAppointmentStrategy.java new file mode 100644 index 0000000..d86aab7 --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingEditAppointmentStrategy.java @@ -0,0 +1,37 @@ +package com.pollex.pam.aop.logging.audit.strategy; + +import com.google.gson.Gson; +import com.pollex.pam.aop.logging.audit.AuditLoggingType; +import com.pollex.pam.domain.AuditLogging; +import com.pollex.pam.repository.AuditLoggingRepository; +import com.pollex.pam.security.SecurityUtils; +import com.pollex.pam.service.dto.AppointmentUpdateDTO; +import org.aspectj.lang.ProceedingJoinPoint; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +@Component +@Transactional +public class LoggingEditAppointmentStrategy implements AuditLoggingStrategy{ + + @Autowired + AuditLoggingRepository auditLoggingRepository; + + @Override + public AuditLoggingType getType() { + return AuditLoggingType.CUSTOMER_EDIT_APPOINTMENT; + } + + @Override + public void auditLogging(ProceedingJoinPoint joinPoint) { + AppointmentUpdateDTO dto = (AppointmentUpdateDTO) joinPoint.getArgs()[0]; + + AuditLogging auditLogging = new AuditLogging(); + auditLogging.setContent(new Gson().toJson(dto)); + auditLogging.setFunctionalType(getType()); + auditLogging.setCreatedBy(SecurityUtils.getCurrentUserLogin().orElse(null)); + + auditLoggingRepository.save(auditLogging); + } +} diff --git a/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingEditConsultantStrategy.java b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingEditConsultantStrategy.java new file mode 100644 index 0000000..45c4677 --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingEditConsultantStrategy.java @@ -0,0 +1,39 @@ +package com.pollex.pam.aop.logging.audit.strategy; + +import com.google.gson.GsonBuilder; +import com.pollex.pam.aop.logging.audit.AuditLoggingType; +import com.pollex.pam.domain.AuditLogging; +import com.pollex.pam.repository.AuditLoggingRepository; +import com.pollex.pam.security.SecurityUtils; +import com.pollex.pam.service.dto.ConsultantEditDTO; +import org.aspectj.lang.ProceedingJoinPoint; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import static com.pollex.pam.aop.logging.audit.AuditLoggingType.EDIT_CONSULTANT_DATA; + +@Component +@Transactional +public class LoggingEditConsultantStrategy implements AuditLoggingStrategy{ + + @Autowired + AuditLoggingRepository auditLoggingRepository; + + @Override + public AuditLoggingType getType() { + return EDIT_CONSULTANT_DATA; + } + + @Override + public void auditLogging(ProceedingJoinPoint joinPoint) { + ConsultantEditDTO dto = (ConsultantEditDTO) joinPoint.getArgs()[0]; + + AuditLogging auditLogging = new AuditLogging(); + auditLogging.setContent(new GsonBuilder().excludeFieldsWithModifiers().create().toJson(dto)); + auditLogging.setFunctionalType(getType()); + auditLogging.setCreatedBy(SecurityUtils.getCurrentUserLogin().orElse(null)); + + auditLoggingRepository.save(auditLogging); + } +} diff --git a/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingEditCustomerStrategy.java b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingEditCustomerStrategy.java new file mode 100644 index 0000000..a41dcce --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingEditCustomerStrategy.java @@ -0,0 +1,39 @@ +package com.pollex.pam.aop.logging.audit.strategy; + +import com.google.gson.Gson; +import com.pollex.pam.aop.logging.audit.AuditLoggingType; +import com.pollex.pam.domain.AuditLogging; +import com.pollex.pam.repository.AuditLoggingRepository; +import com.pollex.pam.security.SecurityUtils; +import com.pollex.pam.service.dto.CustomerDTO; +import org.aspectj.lang.ProceedingJoinPoint; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import static com.pollex.pam.aop.logging.audit.AuditLoggingType.EDIT_CUSTOMER_DATA; + +@Component +@Transactional +public class LoggingEditCustomerStrategy implements AuditLoggingStrategy{ + + @Autowired + AuditLoggingRepository auditLoggingRepository; + + @Override + public AuditLoggingType getType() { + return EDIT_CUSTOMER_DATA; + } + + @Override + public void auditLogging(ProceedingJoinPoint joinPoint) { + CustomerDTO dto = (CustomerDTO) joinPoint.getArgs()[0]; + + AuditLogging auditLogging = new AuditLogging(); + auditLogging.setContent(new Gson().toJson(dto)); + auditLogging.setFunctionalType(getType()); + auditLogging.setCreatedBy(SecurityUtils.getCurrentUserLogin().orElse(null)); + + auditLoggingRepository.save(auditLogging); + } +} diff --git a/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingFillSatisfactionStrategy.java b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingFillSatisfactionStrategy.java new file mode 100644 index 0000000..4c179f9 --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingFillSatisfactionStrategy.java @@ -0,0 +1,58 @@ +package com.pollex.pam.aop.logging.audit.strategy; + +import com.google.gson.Gson; +import com.pollex.pam.aop.logging.audit.AuditLoggingType; +import com.pollex.pam.domain.AuditLogging; +import com.pollex.pam.repository.AuditLoggingRepository; +import com.pollex.pam.security.SecurityUtils; +import com.pollex.pam.service.dto.SatisfactionCustomerScoreDTO; +import org.aspectj.lang.ProceedingJoinPoint; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; + +import static com.pollex.pam.aop.logging.audit.AuditLoggingType.CUSTOMER_FILL_SATISFACTION; + +@Component +@Transactional +public class LoggingFillSatisfactionStrategy implements AuditLoggingStrategy{ + + @Autowired + AuditLoggingRepository auditLoggingRepository; + + @Override + public AuditLoggingType getType() { + return CUSTOMER_FILL_SATISFACTION; + } + + @Override + public void auditLogging(ProceedingJoinPoint joinPoint) { + Object arg = joinPoint.getArgs()[0]; + + if(arg instanceof List) { + List<SatisfactionCustomerScoreDTO> dtos = (List<SatisfactionCustomerScoreDTO>) arg; + List<AuditLogging> loggings = dtos.stream().map(dto -> { + AuditLogging auditLogging = new AuditLogging(); + auditLogging.setContent(new Gson().toJson(dto)); + auditLogging.setFunctionalType(getType()); + auditLogging.setCreatedBy(SecurityUtils.getCurrentUserLogin().orElse(null)); + + return auditLogging; + }).collect(Collectors.toList()); + + auditLoggingRepository.saveAll(loggings); + } + else { + SatisfactionCustomerScoreDTO dto = (SatisfactionCustomerScoreDTO) arg; + AuditLogging auditLogging = new AuditLogging(); + auditLogging.setContent(new Gson().toJson(dto)); + auditLogging.setFunctionalType(getType()); + auditLogging.setCreatedBy(SecurityUtils.getCurrentUserLogin().orElse(null)); + + auditLoggingRepository.save(auditLogging); + } + } +} diff --git a/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingSendFillSatisfactionNoticeStrategy.java b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingSendFillSatisfactionNoticeStrategy.java new file mode 100644 index 0000000..2b3de65 --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingSendFillSatisfactionNoticeStrategy.java @@ -0,0 +1,34 @@ +package com.pollex.pam.aop.logging.audit.strategy; + +import com.pollex.pam.aop.logging.audit.AuditLoggingType; +import com.pollex.pam.domain.AuditLogging; +import com.pollex.pam.repository.AuditLoggingRepository; +import com.pollex.pam.security.SecurityUtils; +import org.aspectj.lang.ProceedingJoinPoint; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import static com.pollex.pam.aop.logging.audit.AuditLoggingType.CONSULTANT_SEND_FILL_SATISFACTION_NOTICE; + +@Component +@Transactional +public class LoggingSendFillSatisfactionNoticeStrategy implements AuditLoggingStrategy{ + + @Autowired + AuditLoggingRepository auditLoggingRepository; + + @Override + public AuditLoggingType getType() { + return CONSULTANT_SEND_FILL_SATISFACTION_NOTICE; + } + + @Override + public void auditLogging(ProceedingJoinPoint joinPoint) { + AuditLogging auditLogging = new AuditLogging(); + auditLogging.setFunctionalType(getType()); + auditLogging.setCreatedBy(SecurityUtils.getCurrentUserLogin().orElse(null)); + + auditLoggingRepository.save(auditLogging); + } +} diff --git a/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingSendInterviewNoticeStrategy.java b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingSendInterviewNoticeStrategy.java new file mode 100644 index 0000000..2de3fa5 --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/aop/logging/audit/strategy/LoggingSendInterviewNoticeStrategy.java @@ -0,0 +1,39 @@ +package com.pollex.pam.aop.logging.audit.strategy; + +import com.google.gson.Gson; +import com.pollex.pam.aop.logging.audit.AuditLoggingType; +import com.pollex.pam.domain.AuditLogging; +import com.pollex.pam.repository.AuditLoggingRepository; +import com.pollex.pam.security.SecurityUtils; +import com.pollex.pam.service.dto.AppointmentNoticeSendDTO; +import org.aspectj.lang.ProceedingJoinPoint; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import static com.pollex.pam.aop.logging.audit.AuditLoggingType.CONSULTANT_SEND_INTERVIEW_NOTICE; + +@Component +@Transactional +public class LoggingSendInterviewNoticeStrategy implements AuditLoggingStrategy{ + + @Autowired + AuditLoggingRepository auditLoggingRepository; + + @Override + public AuditLoggingType getType() { + return CONSULTANT_SEND_INTERVIEW_NOTICE; + } + + @Override + public void auditLogging(ProceedingJoinPoint joinPoint) { + AppointmentNoticeSendDTO dto = (AppointmentNoticeSendDTO) joinPoint.getArgs()[0]; + + AuditLogging auditLogging = new AuditLogging(); + auditLogging.setContent(new Gson().toJson(dto)); + auditLogging.setFunctionalType(getType()); + auditLogging.setCreatedBy(SecurityUtils.getCurrentUserLogin().orElse(null)); + + auditLoggingRepository.save(auditLogging); + } +} diff --git a/pamapi/src/main/java/com/pollex/pam/domain/AuditLogging.java b/pamapi/src/main/java/com/pollex/pam/domain/AuditLogging.java new file mode 100644 index 0000000..0084c6c --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/domain/AuditLogging.java @@ -0,0 +1,76 @@ +package com.pollex.pam.domain; + +import com.pollex.pam.aop.logging.audit.AuditLoggingType; +import org.springframework.data.annotation.CreatedBy; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.Instant; + +@EntityListeners(AuditingEntityListener.class) +@Entity +@Table(name = "audit_logging") +public class AuditLogging implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Enumerated(EnumType.STRING) + @Column(name = "functional_type") + private AuditLoggingType functionalType; + + @Column(name = "content") + private String content; + + @Column(name = "created_by", updatable = false) + private String createdBy; + + @CreatedDate + @Column(name = "created_date", updatable = false) + private Instant createdDate; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public AuditLoggingType getFunctionalType() { + return functionalType; + } + + public void setFunctionalType(AuditLoggingType functionalType) { + this.functionalType = functionalType; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + + public Instant getCreatedDate() { + return createdDate; + } + + public void setCreatedDate(Instant createdDate) { + this.createdDate = createdDate; + } +} diff --git a/pamapi/src/main/java/com/pollex/pam/repository/AuditLoggingRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/AuditLoggingRepository.java new file mode 100644 index 0000000..df66794 --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/repository/AuditLoggingRepository.java @@ -0,0 +1,9 @@ +package com.pollex.pam.repository; + +import com.pollex.pam.domain.AuditLogging; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface AuditLoggingRepository extends JpaRepository<AuditLogging, Long> { +} diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantEditDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantEditDTO.java index 8e2f940..73c397c 100644 --- a/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantEditDTO.java +++ b/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantEditDTO.java @@ -2,6 +2,7 @@ import java.util.List; +import com.google.gson.annotations.Expose; import com.pollex.pam.enums.GenderEnum; public class ConsultantEditDTO { @@ -22,7 +23,10 @@ private String experiences; private String awards; private String communicationStyle; + + @Expose private String photoBase64; + private String photoFileName; private String agentNo; diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java index 6a8e6b7..d1e752e 100644 --- a/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java +++ b/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java @@ -1,5 +1,7 @@ package com.pollex.pam.web.rest; +import com.pollex.pam.aop.logging.audit.AuditLoggingInject; +import com.pollex.pam.aop.logging.audit.AuditLoggingType; import com.pollex.pam.appointment.process.AppointmentProcess; import com.pollex.pam.domain.Appointment; import com.pollex.pam.security.SecurityUtils; @@ -15,6 +17,8 @@ import com.pollex.pam.service.AppointmentService; import com.pollex.pam.service.PersonalNotificationService; import com.pollex.pam.service.SatisfactionService; + +import static com.pollex.pam.aop.logging.audit.AuditLoggingType.*; @RestController @RequestMapping("/api/appointment") @@ -38,6 +42,7 @@ @Autowired PersonalNotificationService personalNotificationService; + @AuditLoggingInject(type = CUSTOMER_EDIT_APPOINTMENT) @PutMapping("") public ResponseEntity<Void> updateAppointment(@RequestBody AppointmentUpdateDTO dto) { Appointment appointment = appointmentService.updateAppointment(dto); @@ -45,12 +50,14 @@ return ResponseEntity.noContent().build(); } + @AuditLoggingInject(type = AuditLoggingType.CUSTOMER_CANCEL_APPOINTMENT) @DeleteMapping("/{appointmentId}") public ResponseEntity<Void> markAppointmentDeleted(@PathVariable Long appointmentId) { appointmentService.markAppointmentDeleted(appointmentId); return ResponseEntity.noContent().build(); } + @AuditLoggingInject(type = AuditLoggingType.CUSTOMER_CREATE_APPOINTMENT) @PostMapping("/customer/create") public AppointmentDTO clientCreateAppointment(@RequestBody AppointmentCreateDTO appointmentCreateDTO) { Appointment appointment = appointmentService.customerCreateAppointment(appointmentCreateDTO); @@ -66,17 +73,20 @@ return appointmentService.getAppointmentDetail(appointmentId); } + @AuditLoggingInject(type = CHECK_APPOINTMENT) @GetMapping("/getDetail/{appointmentId}") public AppointmentCustomerViewDTO getAppointmentDetail(@PathVariable Long appointmentId) { return appointmentService.getAppointmentDetail(appointmentId); } + @AuditLoggingInject(type = CONSULTANT_READ_APPOINTMENT) @PostMapping("/recordRead/{appointmentId}") public ResponseEntity<Void> recordConsultantReadAppointment(@PathVariable Long appointmentId) { appointmentService.recordConsultantReadTime(appointmentId); return ResponseEntity.noContent().build(); } + @AuditLoggingInject(type = APPOINTMENT_CLOSE) @PostMapping("/close") public ResponseEntity<Void> closeAppointment(@RequestBody AppointmentCloseDTO closeDTO) { appointmentService.closeAppointment(closeDTO); diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java index 3af2eaf..75cdc22 100644 --- a/pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java +++ b/pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java @@ -1,5 +1,7 @@ package com.pollex.pam.web.rest; +import com.pollex.pam.aop.logging.audit.AuditLoggingInject; +import com.pollex.pam.aop.logging.audit.AuditLoggingType; import com.pollex.pam.domain.Appointment; import com.pollex.pam.domain.Consultant; import com.pollex.pam.security.SecurityUtils; @@ -23,13 +25,16 @@ import java.nio.charset.StandardCharsets; import java.util.List; +import static com.pollex.pam.aop.logging.audit.AuditLoggingType.CONSULTANT_SEND_FILL_SATISFACTION_NOTICE; +import static com.pollex.pam.aop.logging.audit.AuditLoggingType.EDIT_CONSULTANT_DATA; + @RestController @RequestMapping("/api/consultant") public class ConsultantResource { @Autowired ConsultantService consultantService; - + @Autowired AppointmentService appointmentService; @@ -102,8 +107,8 @@ }else { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } - - + + } @PostMapping("/record/allAppointmentsView") @@ -111,7 +116,8 @@ consultantService.recordAllAppointmentsView(); return ResponseEntity.noContent().build(); } - + + @AuditLoggingInject(type = EDIT_CONSULTANT_DATA) @PostMapping("/edit") public ResponseEntity<Consultant> editConsultant(@RequestBody ConsultantEditDTO editDTO) { if(!editDTO.getAgentNo().equals(SecurityUtils.getAgentNo())) { @@ -120,7 +126,8 @@ Consultant editResult = consultantService.editConsultant(editDTO); return new ResponseEntity<>(editResult, HttpStatus.OK); } - + + @AuditLoggingInject(type = CONSULTANT_SEND_FILL_SATISFACTION_NOTICE) @PostMapping("/sendSatisfactionToClient/{appointmentId}") public ResponseEntity<Void> sendSatisfactionToClient(@PathVariable Long appointmentId) { Appointment appointment = appointmentService.findById(appointmentId); diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/CustomerInfoResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/CustomerInfoResource.java index df6d70b..0e3924a 100644 --- a/pamapi/src/main/java/com/pollex/pam/web/rest/CustomerInfoResource.java +++ b/pamapi/src/main/java/com/pollex/pam/web/rest/CustomerInfoResource.java @@ -1,5 +1,6 @@ package com.pollex.pam.web.rest; +import com.pollex.pam.aop.logging.audit.AuditLoggingInject; import com.pollex.pam.service.CustomerService; import com.pollex.pam.service.dto.CustomerDTO; import org.springframework.beans.factory.annotation.Autowired; @@ -8,6 +9,8 @@ import org.springframework.util.Assert; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; + +import static com.pollex.pam.aop.logging.audit.AuditLoggingType.EDIT_CUSTOMER_DATA; @RestController @RequestMapping("/api/customer/info") @@ -21,6 +24,7 @@ return new ResponseEntity<>(customerService.getLoggedCustomerDTO(), HttpStatus.OK); } + @AuditLoggingInject(type = EDIT_CUSTOMER_DATA) @PutMapping("") public ResponseEntity<Void> updateLoggedCustomerInfo(@RequestBody CustomerDTO customerDTO) { boolean hasEmail = StringUtils.hasText(customerDTO.getEmail()); diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/EServiceResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/EServiceResource.java index 840b8c9..e8ac6f1 100644 --- a/pamapi/src/main/java/com/pollex/pam/web/rest/EServiceResource.java +++ b/pamapi/src/main/java/com/pollex/pam/web/rest/EServiceResource.java @@ -1,5 +1,7 @@ package com.pollex.pam.web.rest; +import com.pollex.pam.aop.logging.audit.AuditLoggingInject; +import com.pollex.pam.aop.logging.audit.AuditLoggingType; import com.pollex.pam.security.jwt.JWTFilter; import com.pollex.pam.security.jwt.TokenProvider; import com.pollex.pam.security.token.EServiceAuthenticationToken; @@ -16,6 +18,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import static com.pollex.pam.aop.logging.audit.AuditLoggingType.CONSULTANT_LOGIN; + @RestController @RequestMapping("/api/eService") public class EServiceResource { @@ -26,6 +30,7 @@ @Autowired TokenProvider tokenProvider; + @AuditLoggingInject(type = CONSULTANT_LOGIN) @PostMapping("/authenticate") public ResponseEntity<UserJWTController.JWTToken> authorize(@RequestBody EServiceLoginVM eServiceLoginVM) { EServiceAuthenticationToken authenticationToken = new EServiceAuthenticationToken( diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/InterviewRecordResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/InterviewRecordResource.java index 730c020..bfb29c3 100644 --- a/pamapi/src/main/java/com/pollex/pam/web/rest/InterviewRecordResource.java +++ b/pamapi/src/main/java/com/pollex/pam/web/rest/InterviewRecordResource.java @@ -1,5 +1,7 @@ package com.pollex.pam.web.rest; +import com.pollex.pam.aop.logging.audit.AuditLoggingInject; +import com.pollex.pam.aop.logging.audit.AuditLoggingType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -12,23 +14,26 @@ import com.pollex.pam.service.InterviewRecordService; import com.pollex.pam.service.dto.InterviewRecordDTO; +import static com.pollex.pam.aop.logging.audit.AuditLoggingType.CONSULTANT_CREATE_INTERVIEW; + @RestController @RequestMapping("/api/interview_record") public class InterviewRecordResource { - + @Autowired InterviewRecordService interviewRecordService; - + + @AuditLoggingInject(type = CONSULTANT_CREATE_INTERVIEW) @PostMapping("/create") public InterviewRecord create(@RequestBody InterviewRecordDTO dto) { return interviewRecordService.create(dto); } - + @PostMapping("/update") public InterviewRecord update(@RequestBody InterviewRecordDTO dto) { return interviewRecordService.update(dto); } - + @DeleteMapping("/{interviewRecordId}") public void delete(@PathVariable Long interviewRecordId) { interviewRecordService.delete(interviewRecordId); diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/NoticeResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/NoticeResource.java index f1bde12..c8421ce 100644 --- a/pamapi/src/main/java/com/pollex/pam/web/rest/NoticeResource.java +++ b/pamapi/src/main/java/com/pollex/pam/web/rest/NoticeResource.java @@ -1,5 +1,7 @@ package com.pollex.pam.web.rest; +import com.pollex.pam.aop.logging.audit.AuditLoggingInject; +import com.pollex.pam.aop.logging.audit.AuditLoggingType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -14,16 +16,19 @@ import com.pollex.pam.service.NoticeService; import com.pollex.pam.service.dto.AppointmentNoticeSendDTO; +import static com.pollex.pam.aop.logging.audit.AuditLoggingType.CONSULTANT_SEND_INTERVIEW_NOTICE; + @RestController @RequestMapping("/api/notice") public class NoticeResource { - + @Autowired NoticeService noticeService; - + @Autowired AppointmentService appointmentService; - + + @AuditLoggingInject(type = CONSULTANT_SEND_INTERVIEW_NOTICE) @PostMapping("/send") public void sendNotice(@RequestBody AppointmentNoticeSendDTO dto) { Appointment appointment = appointmentService.findById(dto.getAppointmentId()); diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/OtpResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/OtpResource.java index 883c80a..e0cebb7 100644 --- a/pamapi/src/main/java/com/pollex/pam/web/rest/OtpResource.java +++ b/pamapi/src/main/java/com/pollex/pam/web/rest/OtpResource.java @@ -3,7 +3,7 @@ import java.util.Arrays; import java.util.UUID; -import com.pollex.pam.web.rest.errors.CustomerNotRegisteredException; +import com.pollex.pam.aop.logging.audit.AuditLoggingInject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -31,6 +31,8 @@ import com.pollex.pam.service.dto.OtpResponseDTO; import com.pollex.pam.web.rest.vm.OtpLoginVM; import com.pollex.pam.web.rest.vm.VerifyOtpVM; + +import static com.pollex.pam.aop.logging.audit.AuditLoggingType.CUSTOMER_LOGIN; @RestController @RequestMapping("/api/otp") @@ -82,6 +84,7 @@ return new ResponseEntity<>(otpResponse, HttpStatus.OK); } + @AuditLoggingInject(type = CUSTOMER_LOGIN) @PostMapping("/verify") public ResponseEntity<UserJWTController.JWTToken> verifyOtp(@RequestBody VerifyOtpVM verifyOtpParam) { otpUtilService.verifyOtp(verifyOtpParam); diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/SatisfactionResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/SatisfactionResource.java index 92baf43..82c9afe 100644 --- a/pamapi/src/main/java/com/pollex/pam/web/rest/SatisfactionResource.java +++ b/pamapi/src/main/java/com/pollex/pam/web/rest/SatisfactionResource.java @@ -2,6 +2,8 @@ import java.util.List; +import com.pollex.pam.aop.logging.audit.AuditLoggingInject; +import com.pollex.pam.aop.logging.audit.AuditLoggingType; import com.pollex.pam.enums.SatisfactionTypeEnum; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,12 +31,14 @@ @Autowired SatisfactionService satisfactionService; + @AuditLoggingInject(type = AuditLoggingType.CUSTOMER_FILL_SATISFACTION) @PostMapping("/score") public Satisfaction scorefaction(@RequestBody SatisfactionCustomerScoreDTO scoreDTO) { return satisfactionService.scorefaction(scoreDTO); } - @PostMapping("/score/all") + @AuditLoggingInject(type = AuditLoggingType.CUSTOMER_FILL_SATISFACTION) + @PostMapping("/score/all") public List<Satisfaction> scoreAllfaction(@RequestBody List<SatisfactionCustomerScoreDTO> scoreDTO) { return satisfactionService.scoreAllfaction(scoreDTO); } -- Gitblit v1.8.0