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