From 472fd20c108714b28be49d4fedee5bbabe1b2358 Mon Sep 17 00:00:00 2001
From: wayne <wayne8692wayne8692@gmail.com>
Date: 星期五, 04 三月 2022 17:40:47 +0800
Subject: [PATCH] Merge branch 'Phase3' into pollex-dev

---
 pamapi/src/main/resources/i18n/messages.properties                                      |    2 
 pamapi/src/test/java/com/pollex/pam/web/rest/PublicUserResourceIT.java                  |    6 
 pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java                   |   28 +
 PAMapp/pages/agentInfo/edit/_agentNo.vue                                                |   40 ++
 pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java                         |   17 
 pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantLoginValidateResource.java       |    8 
 pamapi/src/main/java/com/pollex/pam/web/rest/TestLoginResource.java                     |    8 
 pamapi/src/main/java/com/pollex/pam/aop/logging/LoggingAspect.java                      |    2 
 pamapi/src/main/java/com/pollex/pam/web/rest/InterviewRecordResource.java               |   18 
 pamapi/src/main/java/com/pollex/pam/config/ApplicationProperties.java                   |  123 --------
 pamapi/src/main/java/com/pollex/pam/service/CustomerAuthService.java                    |    8 
 pamapi/src/main/resources/templates/mail/appointmentPendingNotifyEmail.html             |    2 
 pamapi/src/doc/顧問API/編輯修改顧問資料.txt                                                       |    3 
 pamapi/src/main/java/com/pollex/pam/config/WebsocketConfiguration.java                  |    2 
 PAMapp/pages/questionnaire/_agentNo.vue                                                 |   18 
 pamapi/src/test/java/com/pollex/pam/web/rest/UserJWTControllerIT.java                   |    6 
 PAMapp/components/AddAndReservedBtns.vue                                                |   11 
 pamapi/src/test/java/com/pollex/pam/config/NoOpMailConfiguration.java                   |    2 
 pamapi/src/main/java/com/pollex/pam/web/rest/errors/ExceptionTranslator.java            |    9 
 PAMapp/pages/agentInfo/_agentNo.vue                                                     |   13 
 pamapi/src/main/java/com/pollex/pam/web/rest/PersonalNotificationResource.java          |   27 -
 pamapi/src/main/resources/i18n/messages_zh_TW.properties                                |    2 
 pamapi/src/main/java/com/pollex/pam/config/CacheConfiguration.java                      |   10 
 PAMapp/shared/services/query-consultant.service.ts                                      |   12 
 pamapi/src/main/java/com/pollex/pam/web/rest/UserResource.java                          |   20 
 pamapi/src/main/java/com/pollex/pam/web/rest/CustomerInfoResource.java                  |    6 
 PAMapp/shared/const/quickFilter-questionList.ts                                         |   12 
 pamapi/src/doc/sql/20220221_w.sql                                                       |   21 +
 pamapi/src/main/java/com/pollex/pam/security/provider/CustomAuthenticationProvider.java |    3 
 pamapi/src/main/java/com/pollex/pam/security/token/OtpAuthenticationToken.java          |    5 
 pamapi/src/main/java/com/pollex/pam/security/provider/OtpAuthenticationProvider.java    |   12 
 pamapi/src/main/java/com/pollex/pam/config/DatabaseConfiguration.java                   |    6 
 pamapi/src/main/java/com/pollex/pam/config/WebsocketSecurityConfiguration.java          |    2 
 pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentMemoResource.java               |   21 
 PAMapp/store/index.ts                                                                   |    8 
 pamapi/src/doc/sql/20220217_w.sql                                                       |    2 
 pamapi/src/main/java/com/pollex/pam/service/OtpWebService.java                          |    2 
 pamapi/src/main/java/com/pollex/pam/service/CustomerService.java                        |   22 
 pamapi/src/main/java/com/pollex/pam/web/rest/OtpResource.java                           |   21 
 pamapi/src/main/java/com/pollex/pam/security/SpringSecurityAuditorAware.java            |    4 
 PAMapp/shared/models/account.model.ts                                                   |    5 
 pamapi/pom.xml                                                                          |    9 
 PAMapp/shared/const/hide-reviews.ts                                                     |    2 
 pamapi/src/test/java/com/pollex/pam/web/rest/AccountResourceIT.java                     |   21 
 pamapi/src/doc/顧問API/指定顧問詳細資訊.txt                                                       |    4 
 pamapi/src/main/java/com/pollex/pam/web/rest/UserJWTController.java                     |    2 
 pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java                    |   34 +-
 pamapi/src/main/java/com/pollex/pam/web/rest/TestSendMsgResource.java                   |    7 
 pamapi/src/test/java/com/pollex/pam/web/rest/UserResourceIT.java                        |   14 
 pamapi/src/main/java/com/pollex/pam/security/DomainUserDetailsService.java              |    4 
 pamapi/src/main/java/com/pollex/pam/web/rest/AccountResource.java                       |   33 -
 pamapi/src/main/java/com/pollex/pam/web/rest/EServiceResource.java                      |    8 
 /dev/null                                                                               |   66 ----
 pamapi/src/main/java/com/pollex/pam/config/SecurityConfiguration.java                   |    2 
 pamapi/src/test/java/com/pollex/pam/ArchTest.java                                       |    4 
 pamapi/src/doc/顧問API/將顧問加入客戶的清單.txt                                                     |   13 
 pamapi/src/main/java/com/pollex/pam/web/rest/NoticeResource.java                        |   22 
 pamapi/src/main/java/com/pollex/pam/web/rest/SatisfactionResource.java                  |   18 
 pamapi/src/main/java/com/pollex/pam/web/rest/PublicUserResource.java                    |    4 
 59 files changed, 383 insertions(+), 433 deletions(-)

diff --git a/PAMapp/components/AddAndReservedBtns.vue b/PAMapp/components/AddAndReservedBtns.vue
index f2f3177..14d3cfb 100644
--- a/PAMapp/components/AddAndReservedBtns.vue
+++ b/PAMapp/components/AddAndReservedBtns.vue
@@ -14,6 +14,8 @@
 import { Vue, Component, Prop, Emit, Action, State, namespace } from 'nuxt-property-decorator';
 import { Consultant } from '~/shared/models/consultant.model';
 
+const roleStorage = namespace('localStorage');
+
 @Component
 export default class AddAndReservedBtns extends Vue {
 
@@ -29,6 +31,9 @@
     @Prop()
     cusClass!: string;
 
+    @roleStorage.Getter
+    isUserLogin!: boolean;
+
     isVisiblePopUp = false;
 
     //////////////////////////////////////////////////////////////////////
@@ -41,6 +46,12 @@
     //////////////////////////////////////////////////////////////////////
 
     addConsultant(item: Consultant): void {
+        if (!this.isUserLogin) {
+          item = {
+            ...item,
+            updateTime: new Date().toISOString()
+          };
+        }
         this.addToMyConsultantList(item).then(addOk => {
             addOk && this.openPopUp();
         });
diff --git a/PAMapp/pages/agentInfo/_agentNo.vue b/PAMapp/pages/agentInfo/_agentNo.vue
index 9313a1a..05d4d62 100644
--- a/PAMapp/pages/agentInfo/_agentNo.vue
+++ b/PAMapp/pages/agentInfo/_agentNo.vue
@@ -36,6 +36,15 @@
       </el-row>
 
       <el-row
+        v-if="currentRole === role.ADMIN"
+        type="flex"
+        class="pam-paragraph">
+        <UiField :span="12" icon="comment" label="靽∠拳">
+          {{ agentInfo.email }}
+        </UiField>
+      </el-row>
+
+      <el-row
         type="flex"
         class="pam-paragraph">
         <UiField :span="12" icon="agent" label="����">
@@ -101,7 +110,7 @@
         </el-col>
       </el-row> -->
 
-      <el-row
+      <!-- <el-row
         type="flex"
         class="pam-paragraph">
         <el-col :span="24" class="pam-field">
@@ -120,7 +129,7 @@
             <el-progress :show-text="false" :stroke-width="15" :percentage="agentInfo.evaluation * 2"></el-progress>
           </div>
         </el-col>
-      </el-row>
+      </el-row> -->
 
       <div class="consultant-edit-btn">
         <UiField icon="flag" label="皞�◢�">
diff --git a/PAMapp/pages/agentInfo/edit/_agentNo.vue b/PAMapp/pages/agentInfo/edit/_agentNo.vue
index ae47457..eb95946 100644
--- a/PAMapp/pages/agentInfo/edit/_agentNo.vue
+++ b/PAMapp/pages/agentInfo/edit/_agentNo.vue
@@ -68,6 +68,27 @@
         </el-col>
       </el-row>
 
+      <el-row
+        type="flex"
+        class="pam-paragraph">
+        <el-col :span="24" class="pam-field">
+          <div class="pam-field__label pam-progress__label">
+            <div>
+              <div class="pam-field__title mb-10">
+                <i class="pam-icon icon-comment"
+                  ></i>靽∠拳
+                  <span class="hint text--bold" v-show="!emailValid">靽∠拳�撘�炊</span>
+                  <span class="hint text--bold" v-show="editInfoValue.email.length === 0">靽∠拳�敹‵</span>
+              </div>
+            </div>
+            <el-input
+            v-model="editInfoValue.email"
+            :class="{'is-invalid': !emailValid}"
+            ></el-input>
+          </div>
+        </el-col>
+      </el-row>
+
 
       <el-row
         type="flex"
@@ -294,7 +315,8 @@
     awards            : '',
     communicationStyle: [] as string[],
     photoBase64       : '',
-    phoneNumber       : ''
+    phoneNumber       : '',
+    email             : '',
   };
 
   communicationStyleList: string[] = agentCommunicationStyleList;
@@ -375,7 +397,8 @@
       experiences       : agentInfo.experiences  || '',
       awards            : agentInfo.awards || '',
       communicationStyle: agentInfo.communicationStyle || '',
-      photoBase64       : ''
+      photoBase64       : '',
+      email             : agentInfo.email || ''
     };
 
     this.editInfoValue = {
@@ -386,14 +409,17 @@
     }
   }
 
+
   //////////////////////////////////////////////////////////////////////
 
   editAgentInfoSetting(): void {
+    console.log('???', this.editInfoValue)
     const editSettingInfo: any = {
       ...this.editInfoValue,
       communicationStyle: this.editInfoValue.communicationStyle.join('��'),
       serveArea: this.editInfoValue.serveArea.join('��'),
-    }
+    };
+    console.log('!!!', editSettingInfo);
     accountSettingService.editAgentInfoSetting(editSettingInfo).then((res: AgentInfoSetting) => {
       this.isInfoUpdate = true;
       this.updateConsultantDetail(editSettingInfo.agentNo);
@@ -437,6 +463,11 @@
             : true;
         }
 
+  get emailValid() {
+      const rule = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
+      return this.editInfoValue.email ? rule.test(this.editInfoValue.email) : true;
+    }
+
   get isSubmitBtnDisabled(): boolean {
       const isFormValid =  this.editInfoValue.name
                         && this.editInfoValue.title
@@ -447,7 +478,8 @@
                         && this.editInfoValue.phoneNumber.length
                         && this.editInfoValue.seniorityYear
                         && this.editInfoValue.expertise.length
-                        && this.editInfoValue.communicationStyle.length;
+                        && this.editInfoValue.communicationStyle.length
+                        && this.editInfoValue.email.length;
       return !isFormValid
   }
 }
diff --git a/PAMapp/pages/communication/consult.vue b/PAMapp/pages/communication/consult.vue
deleted file mode 100644
index 409fe02..0000000
--- a/PAMapp/pages/communication/consult.vue
+++ /dev/null
@@ -1,3 +0,0 @@
-<template>
-    <div>隢株岷</div>
-</template>
\ No newline at end of file
diff --git a/PAMapp/pages/communication/index.vue b/PAMapp/pages/communication/index.vue
deleted file mode 100644
index becae6b..0000000
--- a/PAMapp/pages/communication/index.vue
+++ /dev/null
@@ -1,3 +0,0 @@
-<template>
-    <div>���隢株岷</div>
-</template>
\ No newline at end of file
diff --git a/PAMapp/pages/communication/myDemand.vue b/PAMapp/pages/communication/myDemand.vue
deleted file mode 100644
index a7f5774..0000000
--- a/PAMapp/pages/communication/myDemand.vue
+++ /dev/null
@@ -1,3 +0,0 @@
-<template>
-    <div>隢株岷��撓���鞈��</div>
-</template>
\ No newline at end of file
diff --git a/PAMapp/pages/questionnaire/_agentNo.vue b/PAMapp/pages/questionnaire/_agentNo.vue
index 213a636..bf703e4 100644
--- a/PAMapp/pages/questionnaire/_agentNo.vue
+++ b/PAMapp/pages/questionnaire/_agentNo.vue
@@ -336,7 +336,6 @@
     private setMyRequest(): void {
       const storageMyRequest = getRequestsFromStorage();
       const storageMyRequirement = this.recommendConsultantItem ? JSON.parse(this.recommendConsultantItem).requirements:[];
-      const contactTypePromise = accountSettingService.getUserAccountSetting();
 
       if (storageMyRequest) {
         this.myRequest = {
@@ -358,12 +357,15 @@
         removeRequestQuestionFromStorage();
       }
 
-      contactTypePromise.then((contactTypeDetail) => {
-            this.myRequest = {
-              ...this.myRequest,
-              ...contactTypeDetail
-            }
-      })
+      if (authService.isUserLogin()) {
+        accountSettingService.getUserAccountSetting().then((contactTypeDetail) => {
+              this.myRequest = {
+                ...this.myRequest,
+                ...contactTypeDetail
+              }
+        })
+      }
+
 
     }
 
@@ -433,7 +435,7 @@
       if (this.isEditBtn) {
         this.editAppointmentDemand();
       } else {
-        queryConsultantService.addFavoriteConsultant([this.$route.params.agentNo]).then(res => this.sentAppointmentDemand());
+        queryConsultantService.addFavoriteConsultant([{ agentNo: this.$route.params.agentNo, createdTime: new Date().toISOString()}]).then(res => this.sentAppointmentDemand());
       }
        const editSettingInfo: UserSetting = {
           name: this.myRequest.name,
diff --git a/PAMapp/pages/recommendConsultant/criteria.vue b/PAMapp/pages/recommendConsultant/criteria.vue
deleted file mode 100644
index 039388e..0000000
--- a/PAMapp/pages/recommendConsultant/criteria.vue
+++ /dev/null
@@ -1,3 +0,0 @@
-<template>
-    <div>������(����)</div>
-</template>
\ No newline at end of file
diff --git a/PAMapp/shared/const/hide-reviews.ts b/PAMapp/shared/const/hide-reviews.ts
index 35d2e34..0961710 100644
--- a/PAMapp/shared/const/hide-reviews.ts
+++ b/PAMapp/shared/const/hide-reviews.ts
@@ -1 +1 @@
-export const hideReviews = false;
+export const hideReviews = true;
diff --git a/PAMapp/shared/const/quickFilter-questionList.ts b/PAMapp/shared/const/quickFilter-questionList.ts
index 3539755..b00bd67 100644
--- a/PAMapp/shared/const/quickFilter-questionList.ts
+++ b/PAMapp/shared/const/quickFilter-questionList.ts
@@ -12,12 +12,12 @@
         ],
         type: 'radio'
     },
-    {
-        name: 'avgScore',
-        title: '憿批�遛��漲',
-        detail: [],
-        type: ''
-    },
+    // {
+    //     name: 'avgScore',
+    //     title: '憿批�遛��漲',
+    //     detail: [],
+    //     type: ''
+    // },
     {
         name: 'communicationStyles',
         title: '皞�◢�',
diff --git a/PAMapp/shared/models/account.model.ts b/PAMapp/shared/models/account.model.ts
index f2e0e03..f433c6c 100644
--- a/PAMapp/shared/models/account.model.ts
+++ b/PAMapp/shared/models/account.model.ts
@@ -17,8 +17,9 @@
     seniorityYear     : number;
     seniorityMonth    : number;
     concept           : string;
-    experiences        : string;
-    awards           : string;
+    experiences       : string;
+    awards            : string;
     communicationStyle: string;
     photoBase64       : string;
+    email             : string;
 }
diff --git a/PAMapp/shared/services/query-consultant.service.ts b/PAMapp/shared/services/query-consultant.service.ts
index 8a5a139..fdc5507 100644
--- a/PAMapp/shared/services/query-consultant.service.ts
+++ b/PAMapp/shared/services/query-consultant.service.ts
@@ -23,8 +23,11 @@
   }
 
   // ��憿批��
-  async addFavoriteConsultant(agentNoList: string[]) {
-    return http.post('/consultant/favorite', { agentNoList });
+  async addFavoriteConsultant(addFavoriteConsultantList: AddFavoriteConsultantItem[]) {
+    const payload = {
+      consultantList: addFavoriteConsultantList
+    };
+    return http.post('/consultant/favorite', payload);
   }
 
   // ����岷���
@@ -35,3 +38,8 @@
 }
 
 export default new QueryConsultantService();
+
+export interface AddFavoriteConsultantItem {
+  agentNo    : string;
+  createdTime: string;
+}
diff --git a/PAMapp/store/index.ts b/PAMapp/store/index.ts
index b4cd250..9dd6256 100644
--- a/PAMapp/store/index.ts
+++ b/PAMapp/store/index.ts
@@ -1,7 +1,7 @@
 import { Module, VuexModule, Mutation, Action } from 'vuex-module-decorators'
 
 import myConsultantService from '~/shared/services/my-consultant.service';
-import queryConsultantService from '~/shared/services/query-consultant.service';
+import queryConsultantService, { AddFavoriteConsultantItem } from '~/shared/services/query-consultant.service';
 import reviewsService from '~/shared/services/reviews.service';
 import { Consultant } from '~/shared/models/consultant.model';
 import { getFavoriteFromStorage, setFavoriteToStorage } from '~/shared/storageConsultant';
@@ -78,8 +78,8 @@
 
 
         if (localData?.length) {
-            const agentNoList = localData.map(i => i.agentNo)
-            await queryConsultantService.addFavoriteConsultant(agentNoList).then(res => {
+            const addFavoriteAgentList: AddFavoriteConsultantItem[] = localData.map(i => ({ agentNo: i.agentNo, createdTime: i.updateTime}));
+            await queryConsultantService.addFavoriteConsultant(addFavoriteAgentList).then(res => {
                 localStorage.removeItem('favoriteConsultant')
             })
         }
@@ -114,7 +114,7 @@
             if (!found) {
                 const newData = [consultantToAdd].concat(this.myConsultantList);
                 if (this.isUserLogin) {
-                    await queryConsultantService.addFavoriteConsultant([consultantToAdd.agentNo])
+                    await queryConsultantService.addFavoriteConsultant([{ agentNo: consultantToAdd.agentNo, createdTime: consultantToAdd.updateTime  }])
                 } else {
                     setFavoriteToStorage(newData);
                 }
diff --git a/pamapi/pom.xml b/pamapi/pom.xml
index a070277..500eb4e 100644
--- a/pamapi/pom.xml
+++ b/pamapi/pom.xml
@@ -101,6 +101,11 @@
 
     <dependencies>
         <dependency>
+            <groupId>com.pollex.pam.business</groupId>
+            <artifactId>PamBusiness</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
             <groupId>tech.jhipster</groupId>
             <artifactId>jhipster-framework</artifactId>
         </dependency>
@@ -344,6 +349,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/doc/sql/20220217_w.sql b/pamapi/src/doc/sql/20220217_w.sql
new file mode 100644
index 0000000..f084b18
--- /dev/null
+++ b/pamapi/src/doc/sql/20220217_w.sql
@@ -0,0 +1,2 @@
+ALTER TABLE public.consultant ADD status varchar NULL;
+UPDATE public.consultant SET status = 'AVAILABLE';
diff --git a/pamapi/src/doc/sql/20220221_w.sql b/pamapi/src/doc/sql/20220221_w.sql
new file mode 100644
index 0000000..2e24808
--- /dev/null
+++ b/pamapi/src/doc/sql/20220221_w.sql
@@ -0,0 +1,21 @@
+CREATE TABLE public.audit_logging (
+      id bigserial NOT NULL,
+      functional_type varchar NULL,
+      "content" varchar NULL,
+      created_by varchar NULL,
+      created_date timestamp NULL,
+      CONSTRAINT audit_logging_pk PRIMARY KEY (id)
+);
+
+ALTER TABLE public.consultant ADD latest_login_time timestamp NULL;
+
+update consultant set latest_login_time = (select login_date from login_record where account = 'A183619275' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'A183619275';
+update consultant set latest_login_time = (select login_date from login_record where account = 'AGAM11249699' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'AGAM11249699';
+update consultant set latest_login_time = (select login_date from login_record where account = 'Z152717443' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'Z152717443';
+update consultant set latest_login_time = (select login_date from login_record where account = 'D265260662' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'D265260662';
+update consultant set latest_login_time = (select login_date from login_record where account = 'AG0109051204' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'AG0109051204';
+update consultant set latest_login_time = (select login_date from login_record where account = 'B282677963' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'B282677963';
+update consultant set latest_login_time = (select login_date from login_record where account = 'AG0101234567' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'AG0101234567';
+update consultant set latest_login_time = (select login_date from login_record where account = 'X147309614' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'X147309614';
+update consultant set latest_login_time = (select login_date from login_record where account = 'J149388015' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'J149388015';
+update consultant set latest_login_time = (select login_date from login_record where account = 'R221444250' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'R221444250';
diff --git "a/pamapi/src/doc/\351\241\247\345\225\217API/\345\260\207\351\241\247\345\225\217\345\212\240\345\205\245\345\256\242\346\210\266\347\232\204\346\270\205\345\226\256.txt" "b/pamapi/src/doc/\351\241\247\345\225\217API/\345\260\207\351\241\247\345\225\217\345\212\240\345\205\245\345\256\242\346\210\266\347\232\204\346\270\205\345\226\256.txt"
index eb5a825..13c32b7 100644
--- "a/pamapi/src/doc/\351\241\247\345\225\217API/\345\260\207\351\241\247\345\225\217\345\212\240\345\205\245\345\256\242\346\210\266\347\232\204\346\270\205\345\226\256.txt"
+++ "b/pamapi/src/doc/\351\241\247\345\225\217API/\345\260\207\351\241\247\345\225\217\345\212\240\345\205\245\345\256\242\346\210\266\347\232\204\346\270\205\345\226\256.txt"
@@ -2,7 +2,16 @@
 
 request body:
 {
-    "agentNoList": ["12345"]
+    "consultantList": [
+        {
+            "agentNo": "Z152717443",
+            "createdTime": "2020-05-18T03:24:40Z"   // ��null����垢���葆����
+        },
+        {
+            "agentNo": "AGAM11249699",
+            "createdTime": "2020-05-18T03:24:42Z"
+        }
+        ...
+    ]
 }
-
 response body: �嚗�ttp status 202
diff --git "a/pamapi/src/doc/\351\241\247\345\225\217API/\346\214\207\345\256\232\351\241\247\345\225\217\350\251\263\347\264\260\350\263\207\350\250\212.txt" "b/pamapi/src/doc/\351\241\247\345\225\217API/\346\214\207\345\256\232\351\241\247\345\225\217\350\251\263\347\264\260\350\263\207\350\250\212.txt"
index 9e345bd..9b6530d 100644
--- "a/pamapi/src/doc/\351\241\247\345\225\217API/\346\214\207\345\256\232\351\241\247\345\225\217\350\251\263\347\264\260\350\263\207\350\250\212.txt"
+++ "b/pamapi/src/doc/\351\241\247\345\225\217API/\346\214\207\345\256\232\351\241\247\345\225\217\350\251\263\347\264\260\350\263\207\350\250\212.txt"
@@ -8,11 +8,13 @@
   "avgScore" : 3.1,
   "title" : "�����(DM)",
   "phoneNumber" : "0987168787",
+  "email": "wayne@pollex.com.tw",
   "serveArea" : "���腦������蝮�",
   "companyAddress" : "��蝮����銝剜迤頝�30���9璅�",
   "latestLoginTime" : "2021-12-24T08:48:21.497Z",
   "seniority" : "38 撟� ",
-  "evaluation" : 50,
+  "nearlyMonthAppointmentCount" : 30, 餈����������隢株岷摨�
+  "allAppointmentCount" : 50, �����������隢株岷摨�
   "expertise" : [ "�摨瑁����", "摮戊��", "鞈閬��", "璅暑��隡�", "靽�瑼�/閬��", "����" ],
   "concept" : "瘥遢靽閬������\r\n�敹�敹�票敹����恥�\r\n\r\n����之靽∪艙\r\n��� 擃p�� ���祥�����r\n��� 蝪∪��� ��������r\n��� 摰Zˊ��� �銝�隞賡������r\n\r\n���������風�������犖",
   "experiences" : "暻餌��極摮賊������飛蝟�,�憭余MBA,銝剖�之摮貉瓷��頂,鈭箄澈靽霅,鞎∠靽霅,�����霅,憭馳�隞�霅,��隡��移蝞葦霅,��靽鴽方�犖��岫霅,蝢�ˊ�蝞∴坐撣怨�,蝢�ˊ�鴽方�葦霅,蝢�瓷������靽葦霅",
diff --git "a/pamapi/src/doc/\351\241\247\345\225\217API/\347\267\250\350\274\257\344\277\256\346\224\271\351\241\247\345\225\217\350\263\207\346\226\231.txt" "b/pamapi/src/doc/\351\241\247\345\225\217API/\347\267\250\350\274\257\344\277\256\346\224\271\351\241\247\345\225\217\350\263\207\346\226\231.txt"
index aa25bc6..8d44d73 100644
--- "a/pamapi/src/doc/\351\241\247\345\225\217API/\347\267\250\350\274\257\344\277\256\346\224\271\351\241\247\345\225\217\350\263\207\346\226\231.txt"
+++ "b/pamapi/src/doc/\351\241\247\345\225\217API/\347\267\250\350\274\257\344\277\256\346\224\271\351\241\247\345\225\217\350\263\207\346\226\231.txt"
@@ -15,6 +15,7 @@
     "serveArea":"������蝮�",
     "gender":"male",
     "phoneNumber":"09123456789",
+    "email": "wayne@pollex.com.tw",
     "companyAddress":"摰蝮�鈭����楝3���3璅�",
     "seniorityYear":40,
     "seniorityMonth":10,
@@ -23,4 +24,4 @@
     "awards":"26甈∪��匱蝥���(IQA)",
     "communicationStyle":"����",
     "photoBase64":"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"
-}
\ No newline at end of file
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/aop/logging/LoggingAspect.java b/pamapi/src/main/java/com/pollex/pam/aop/logging/LoggingAspect.java
index 19b207e..50e5c0e 100644
--- a/pamapi/src/main/java/com/pollex/pam/aop/logging/LoggingAspect.java
+++ b/pamapi/src/main/java/com/pollex/pam/aop/logging/LoggingAspect.java
@@ -42,7 +42,7 @@
     /**
      * Pointcut that matches all Spring beans in the application's main packages.
      */
-    @Pointcut("within(com.pollex.pam.repository..*)" + " || within(com.pollex.pam.service..*)" + " || within(com.pollex.pam.web.rest..*)")
+    @Pointcut("within(com.pollex.pam.business.repository..*)" + " || within(com.pollex.pam.business.service..*)" + " || within(com.pollex.pam.web.rest..*)")
     public void applicationPackagePointcut() {
         // Method is empty as this is just a Pointcut, the implementations are in the advices.
     }
diff --git a/pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcess.java b/pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcess.java
deleted file mode 100644
index 846287c..0000000
--- a/pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcess.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.pollex.pam.appointment.process;
-
-import java.time.Instant;
-import java.util.List;
-import java.util.Optional;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import com.pollex.pam.domain.Appointment;
-import com.pollex.pam.domain.AppointmentClosedInfo;
-import com.pollex.pam.enums.ContactStatusEnum;
-import com.pollex.pam.repository.AppointmentClosedInfoRepository;
-import com.pollex.pam.repository.AppointmentRepository;
-import com.pollex.pam.service.AppointmentClosedInfoService;
-import com.pollex.pam.service.AppointmentService;
-import com.pollex.pam.service.dto.AbstractAppointmentProcessDTO;
-import com.pollex.pam.service.dto.DoneProcessDTO;
-
-@Service
-public class AppointmentProcess{
-	
-	@Autowired
-	List<AppointmentProcessInterface> processList;
-	
-	@Autowired
-	AppointmentService appointmentService;
-	
-	@Autowired
-	AppointmentRepository appointmentRepository;
-	
-	@Autowired
-	AppointmentClosedInfoRepository appointmentClosedInfoRepository;
-	
-	public void process(AbstractAppointmentProcessDTO dto) {
-		
-		processList.stream().forEach(process ->{
-			if(process.getProcessType() == dto.getContactStatus()) {
-				Optional<AppointmentClosedInfo> closedInfoOP = appointmentClosedInfoRepository.findByAppointmentId(dto.getAppointmentId());
-				if(closedInfoOP.isPresent()) {
-					process.editClosedInfo(dto, closedInfoOP.get());
-				}else {
-					process.create(dto);
-				}
-			}
-		});
-		
-		changeAppointmentCommunicateStatus(dto.getAppointmentId(), dto.getContactStatus());
-	}
-
-	private void changeAppointmentCommunicateStatus(Long appointmentId, ContactStatusEnum contactStatus) {
-		Appointment appointment = appointmentService.findById(appointmentId);
-		appointment.setCommunicateStatus(contactStatus);
-		appointmentRepository.save(appointment);
-	}
-	
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcessInterface.java b/pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcessInterface.java
deleted file mode 100644
index ee63d5a..0000000
--- a/pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcessInterface.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.pollex.pam.appointment.process;
-
-import com.pollex.pam.domain.AppointmentClosedInfo;
-import com.pollex.pam.enums.ContactStatusEnum;
-import com.pollex.pam.service.dto.AbstractAppointmentProcessDTO;
-
-public interface AppointmentProcessInterface {
-	
-	AppointmentClosedInfo create(AbstractAppointmentProcessDTO dto);
-	AppointmentClosedInfo editClosedInfo(AbstractAppointmentProcessDTO dto
-			, AppointmentClosedInfo closedInfo);
-	ContactStatusEnum getProcessType();
-	
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/appointment/process/ClosedProcess.java b/pamapi/src/main/java/com/pollex/pam/appointment/process/ClosedProcess.java
deleted file mode 100644
index 69dbd24..0000000
--- a/pamapi/src/main/java/com/pollex/pam/appointment/process/ClosedProcess.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.pollex.pam.appointment.process;
-
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.pollex.pam.domain.Appointment;
-import com.pollex.pam.domain.AppointmentClosedInfo;
-import com.pollex.pam.enums.ContactStatusEnum;
-import com.pollex.pam.repository.AppointmentClosedInfoRepository;
-import com.pollex.pam.service.AppointmentClosedInfoService;
-import com.pollex.pam.service.AppointmentService;
-import com.pollex.pam.service.SatisfactionService;
-import com.pollex.pam.service.dto.AbstractAppointmentProcessDTO;
-import com.pollex.pam.service.dto.ClosedProcessDTO;
-
-@Service
-@Transactional
-public class ClosedProcess implements AppointmentProcessInterface{
-
-	@Autowired
-	AppointmentClosedInfoRepository appointmentClosedInfoRepository;
-
-	@Autowired
-	AppointmentService appointmentService;
-
-	@Autowired
-	AppointmentClosedInfoService appointmentClosedInfoService;
-
-	@Autowired
-	SatisfactionService satisfactionService;
-
-	@Override
-	public AppointmentClosedInfo create(AbstractAppointmentProcessDTO processDTO) {
-		ClosedProcessDTO closeProcess = toClosedProcessDTO(processDTO);
-		AppointmentClosedInfo closedInfo = new AppointmentClosedInfo();
-		BeanUtils.copyProperties(closeProcess, closedInfo);
-		Appointment appointment = appointmentService.findById(processDTO.getAppointmentId());
-		satisfactionService.createAppointmentSatisfaction(appointment);
-		return appointmentClosedInfoRepository.save(closedInfo);
-	}
-
-	private ClosedProcessDTO toClosedProcessDTO(AbstractAppointmentProcessDTO processDTO) {
-		ClosedProcessDTO closeProcess = (ClosedProcessDTO)processDTO;
-		BeanUtils.copyProperties(processDTO, closeProcess);
-		return closeProcess;
-	}
-
-	@Override
-	public ContactStatusEnum getProcessType() {
-		return ContactStatusEnum.CLOSED;
-	}
-
-	@Override
-	public AppointmentClosedInfo editClosedInfo(
-			AbstractAppointmentProcessDTO abstractDTO
-			, AppointmentClosedInfo closedInfo) {
-		ClosedProcessDTO closeProcess =  toClosedProcessDTO(abstractDTO);
-		BeanUtils.copyProperties(closeProcess, closedInfo);
-		return appointmentClosedInfoRepository.save(closedInfo);
-	}
-
-
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/appointment/process/DoneProcess.java b/pamapi/src/main/java/com/pollex/pam/appointment/process/DoneProcess.java
deleted file mode 100644
index f42257e..0000000
--- a/pamapi/src/main/java/com/pollex/pam/appointment/process/DoneProcess.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.pollex.pam.appointment.process;
-
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.pollex.pam.domain.Appointment;
-import com.pollex.pam.domain.AppointmentClosedInfo;
-import com.pollex.pam.enums.ContactStatusEnum;
-import com.pollex.pam.repository.AppointmentClosedInfoRepository;
-import com.pollex.pam.service.AppointmentClosedInfoService;
-import com.pollex.pam.service.AppointmentService;
-import com.pollex.pam.service.SatisfactionService;
-import com.pollex.pam.service.dto.AbstractAppointmentProcessDTO;
-import com.pollex.pam.service.dto.DoneProcessDTO;
-
-@Service
-@Transactional
-public class DoneProcess implements AppointmentProcessInterface{
-
-	@Autowired
-	AppointmentClosedInfoRepository appointmentClosedInfoRepository;
-
-	@Autowired
-	AppointmentClosedInfoService appointmentClosedInfoService;
-
-	@Autowired
-	SatisfactionService satisfactionService;
-
-	@Autowired
-	AppointmentService appointmentService;
-
-	@Override
-	public AppointmentClosedInfo create(AbstractAppointmentProcessDTO processDTO) {
-		DoneProcessDTO doneProcess = toDoneProcessDTO(processDTO);
-		AppointmentClosedInfo closedInfo = new AppointmentClosedInfo();
-		BeanUtils.copyProperties(doneProcess, closedInfo);
-		Appointment appointment = appointmentService.findById(processDTO.getAppointmentId());
-		satisfactionService.createAppointmentSatisfaction(appointment);
-		return appointmentClosedInfoRepository.save(closedInfo);
-	}
-
-	@Override
-	public ContactStatusEnum getProcessType() {
-		return ContactStatusEnum.DONE;
-	}
-
-	@Override
-	public AppointmentClosedInfo editClosedInfo(
-			AbstractAppointmentProcessDTO abstractDTO
-			, AppointmentClosedInfo closedInfo) {
-		DoneProcessDTO doneProcess =  toDoneProcessDTO(abstractDTO);
-		BeanUtils.copyProperties(doneProcess, closedInfo);
-		return appointmentClosedInfoRepository.save(closedInfo);
-	}
-
-	private DoneProcessDTO toDoneProcessDTO(AbstractAppointmentProcessDTO abstractDTO) {
-		DoneProcessDTO doneProcess = (DoneProcessDTO)abstractDTO;
-		BeanUtils.copyProperties(abstractDTO, doneProcess);
-		return doneProcess;
-	}
-
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/config/ApplicationProperties.java b/pamapi/src/main/java/com/pollex/pam/config/ApplicationProperties.java
index 60b33ca..d692e29 100644
--- a/pamapi/src/main/java/com/pollex/pam/config/ApplicationProperties.java
+++ b/pamapi/src/main/java/com/pollex/pam/config/ApplicationProperties.java
@@ -1,6 +1,9 @@
 package com.pollex.pam.config;
 
-import com.pollex.pam.enums.SendEmailMsgMethod;
+import com.pollex.pam.business.config.AppProperties;
+import com.pollex.pam.business.config.SendEmailProperties;
+import com.pollex.pam.business.config.SendSMSProperties;
+import com.pollex.pam.business.enums.SendEmailMsgMethod;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -10,7 +13,7 @@
  * See {@link tech.jhipster.config.JHipsterProperties} for a good example.
  */
 @ConfigurationProperties(prefix = "application", ignoreUnknownFields = false)
-public class ApplicationProperties {
+public class ApplicationProperties implements AppProperties {
 
     private boolean mockLogin;
     private String otpWebServiceUrl;
@@ -20,8 +23,8 @@
     private String eServiceLoginFunc;
     private String eServiceLoginSys;
     private String frontEndDomain;
-    private SMS sms;
-    private Email email;
+    private SendSMSProperties sms;
+    private SendEmailProperties email;
     private String fileFolderPath;
 
     public boolean isMockLogin() {
@@ -88,126 +91,22 @@
         this.frontEndDomain = frontEndDomain;
     }
 
-    public SMS getSms() {
+    public SendSMSProperties getSms() {
         return sms;
     }
 
-    public void setSms(SMS sms) {
+    public void setSms(SendSMSProperties sms) {
         this.sms = sms;
     }
 
-    public Email getEmail() {
+    public SendEmailProperties getEmail() {
         return email;
     }
 
-    public void setEmail(Email email) {
+    public void setEmail(SendEmailProperties email) {
         this.email = email;
     }
 
-    public static class SMS {
-        private String url;
-        private String sourceCode;
-        private String sender;
-        private String smsType;
-        private String subject;
-        private boolean sendNotifyMsg;
-
-        public String getUrl() {
-            return url;
-        }
-
-        public void setUrl(String url) {
-            this.url = url;
-        }
-
-        public String getSourceCode() {
-            return sourceCode;
-        }
-
-        public void setSourceCode(String sourceCode) {
-            this.sourceCode = sourceCode;
-        }
-
-        public String getSender() {
-            return sender;
-        }
-
-        public void setSender(String sender) {
-            this.sender = sender;
-        }
-
-        public String getSmsType() {
-            return smsType;
-        }
-
-        public void setSmsType(String smsType) {
-            this.smsType = smsType;
-        }
-
-        public String getSubject() {
-            return subject;
-        }
-
-        public void setSubject(String subject) {
-            this.subject = subject;
-        }
-
-        public boolean isSendNotifyMsg() {
-            return sendNotifyMsg;
-        }
-
-        public void setSendNotifyMsg(boolean sendNotifyMsg) {
-            this.sendNotifyMsg = sendNotifyMsg;
-        }
-    }
-
-    public static class Email {
-        private String url;
-        private String functionId;
-        private String senderEmail;
-        private boolean sendNotifyMsg;
-        private SendEmailMsgMethod method;
-
-        public String getUrl() {
-            return url;
-        }
-
-        public void setUrl(String url) {
-            this.url = url;
-        }
-
-        public String getFunctionId() {
-            return functionId;
-        }
-
-        public void setFunctionId(String functionId) {
-            this.functionId = functionId;
-        }
-
-        public String getSenderEmail() {
-            return senderEmail;
-        }
-
-        public void setSenderEmail(String senderEmail) {
-            this.senderEmail = senderEmail;
-        }
-
-        public boolean isSendNotifyMsg() {
-            return sendNotifyMsg;
-        }
-
-        public void setSendNotifyMsg(boolean sendNotifyMsg) {
-            this.sendNotifyMsg = sendNotifyMsg;
-        }
-
-        public SendEmailMsgMethod getMethod() {
-            return method;
-        }
-
-        public void setMethod(SendEmailMsgMethod method) {
-            this.method = method;
-        }
-    }
 	public String getFileFolderPath() {
 		return fileFolderPath;
 	}
diff --git a/pamapi/src/main/java/com/pollex/pam/config/CacheConfiguration.java b/pamapi/src/main/java/com/pollex/pam/config/CacheConfiguration.java
index 980373c..12bbec4 100644
--- a/pamapi/src/main/java/com/pollex/pam/config/CacheConfiguration.java
+++ b/pamapi/src/main/java/com/pollex/pam/config/CacheConfiguration.java
@@ -43,11 +43,11 @@
     @Bean
     public JCacheManagerCustomizer cacheManagerCustomizer() {
         return cm -> {
-            createCache(cm, com.pollex.pam.repository.UserRepository.USERS_BY_LOGIN_CACHE);
-            createCache(cm, com.pollex.pam.repository.UserRepository.USERS_BY_EMAIL_CACHE);
-            createCache(cm, com.pollex.pam.domain.User.class.getName());
-            createCache(cm, com.pollex.pam.domain.Authority.class.getName());
-            createCache(cm, com.pollex.pam.domain.User.class.getName() + ".authorities");
+            createCache(cm, com.pollex.pam.business.repository.UserRepository.USERS_BY_LOGIN_CACHE);
+            createCache(cm, com.pollex.pam.business.repository.UserRepository.USERS_BY_EMAIL_CACHE);
+            createCache(cm, com.pollex.pam.business.domain.User.class.getName());
+            createCache(cm, com.pollex.pam.business.domain.Authority.class.getName());
+            createCache(cm, com.pollex.pam.business.domain.User.class.getName() + ".authorities");
             // jhipster-needle-ehcache-add-entry
         };
     }
diff --git a/pamapi/src/main/java/com/pollex/pam/config/Constants.java b/pamapi/src/main/java/com/pollex/pam/config/Constants.java
deleted file mode 100644
index 87dd25b..0000000
--- a/pamapi/src/main/java/com/pollex/pam/config/Constants.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.pollex.pam.config;
-
-/**
- * Application constants.
- */
-public final class Constants {
-
-    // Regex for acceptable logins
-    public static final String LOGIN_REGEX = "^(?>[a-zA-Z0-9!$&*+=?^_`{|}~.-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*)|(?>[_.@A-Za-z0-9-]+)$";
-
-    public static final String SYSTEM = "system";
-    public static final String DEFAULT_LANGUAGE = "zh-tw";
-
-    /**
-     * �閰勗�mail�撱箇���(T)敺�憭抵�������
-     * �����摰2
-     */
-    public static final int APPOINTMENT_PENDING_PHONE_INTERVAL = 2;
-    public static final int APPOINTMENT_PENDING_EMAIL_INTERVAL = 2;
-
-    /**
-     * �閰勗�mail�撱箇���(T)敺�憭拇�◤閬������嚗憭拇甈⊥����策憿批��
-     * �敺�憭�(T+N+1)嚗停���甈∠策摰X�� 閰脤“���敹�瘜������閬���
-     */
-    public static final int APPOINTMENT_EXPIRING_PHONE_INTERVAL = APPOINTMENT_PENDING_PHONE_INTERVAL + 1;
-    public static final int APPOINTMENT_EXPIRING_EMAIL_INTERVAL = APPOINTMENT_PENDING_EMAIL_INTERVAL + 1;
-
-    /**
-     * �摰X��活���
-     */
-    public static final int SEND_EXPIRING_NOTIFY_LIMIT = 1;
-
-    public static final String SPRING_PROFILE_POLLEX_DEVELOPMENT = "pollex";
-
-    private Constants() {}
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/config/DatabaseConfiguration.java b/pamapi/src/main/java/com/pollex/pam/config/DatabaseConfiguration.java
index 02439f2..5746359 100644
--- a/pamapi/src/main/java/com/pollex/pam/config/DatabaseConfiguration.java
+++ b/pamapi/src/main/java/com/pollex/pam/config/DatabaseConfiguration.java
@@ -1,16 +1,12 @@
 package com.pollex.pam.config;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
-import tech.jhipster.config.JHipsterConstants;
 
 @Configuration
-@EnableJpaRepositories({ "com.pollex.pam.repository" })
+@EnableJpaRepositories({"com.pollex.pam.business.repository"})
 @EnableJpaAuditing(auditorAwareRef = "springSecurityAuditorAware")
 @EnableTransactionManagement
 public class DatabaseConfiguration {}
diff --git a/pamapi/src/main/java/com/pollex/pam/config/SecurityConfiguration.java b/pamapi/src/main/java/com/pollex/pam/config/SecurityConfiguration.java
index 0b995e0..a8ee0cf 100644
--- a/pamapi/src/main/java/com/pollex/pam/config/SecurityConfiguration.java
+++ b/pamapi/src/main/java/com/pollex/pam/config/SecurityConfiguration.java
@@ -1,6 +1,6 @@
 package com.pollex.pam.config;
 
-import com.pollex.pam.security.*;
+import com.pollex.pam.business.security.AuthoritiesConstants;
 import com.pollex.pam.security.jwt.*;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Import;
diff --git a/pamapi/src/main/java/com/pollex/pam/config/WebsocketConfiguration.java b/pamapi/src/main/java/com/pollex/pam/config/WebsocketConfiguration.java
index 45e29b6..871056d 100644
--- a/pamapi/src/main/java/com/pollex/pam/config/WebsocketConfiguration.java
+++ b/pamapi/src/main/java/com/pollex/pam/config/WebsocketConfiguration.java
@@ -1,6 +1,6 @@
 package com.pollex.pam.config;
 
-import com.pollex.pam.security.AuthoritiesConstants;
+import com.pollex.pam.business.security.AuthoritiesConstants;
 import java.security.Principal;
 import java.util.*;
 import org.springframework.context.annotation.Bean;
diff --git a/pamapi/src/main/java/com/pollex/pam/config/WebsocketSecurityConfiguration.java b/pamapi/src/main/java/com/pollex/pam/config/WebsocketSecurityConfiguration.java
index 30afbb2..0ccc2f4 100644
--- a/pamapi/src/main/java/com/pollex/pam/config/WebsocketSecurityConfiguration.java
+++ b/pamapi/src/main/java/com/pollex/pam/config/WebsocketSecurityConfiguration.java
@@ -1,6 +1,6 @@
 package com.pollex.pam.config;
 
-import com.pollex.pam.security.AuthoritiesConstants;
+import com.pollex.pam.business.security.AuthoritiesConstants;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.messaging.simp.SimpMessageType;
 import org.springframework.security.config.annotation.web.messaging.MessageSecurityMetadataSourceRegistry;
diff --git a/pamapi/src/main/java/com/pollex/pam/consts/SeniorityQueryConst.java b/pamapi/src/main/java/com/pollex/pam/consts/SeniorityQueryConst.java
deleted file mode 100644
index fc57ae7..0000000
--- a/pamapi/src/main/java/com/pollex/pam/consts/SeniorityQueryConst.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.pollex.pam.consts;
-
-public class SeniorityQueryConst {
-    public static final String SENIOR = "SENIOR";
-    public static final String YOUNG = "YOUNG";
-    public static final String UNLIMITED = "UNLIMITED";
-
-    private SeniorityQueryConst() {}
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/AbstractAuditingEntity.java b/pamapi/src/main/java/com/pollex/pam/domain/AbstractAuditingEntity.java
deleted file mode 100644
index c89d1d2..0000000
--- a/pamapi/src/main/java/com/pollex/pam/domain/AbstractAuditingEntity.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.pollex.pam.domain;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import java.io.Serializable;
-import java.time.Instant;
-import javax.persistence.Column;
-import javax.persistence.EntityListeners;
-import javax.persistence.MappedSuperclass;
-import org.springframework.data.annotation.CreatedBy;
-import org.springframework.data.annotation.CreatedDate;
-import org.springframework.data.annotation.LastModifiedBy;
-import org.springframework.data.annotation.LastModifiedDate;
-import org.springframework.data.jpa.domain.support.AuditingEntityListener;
-
-/**
- * Base abstract class for entities which will hold definitions for created, last modified, created by,
- * last modified by attributes.
- */
-@MappedSuperclass
-@EntityListeners(AuditingEntityListener.class)
-public abstract class AbstractAuditingEntity implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @CreatedBy
-    @Column(name = "created_by", nullable = false, length = 50, updatable = false)
-    @JsonIgnore
-    private String createdBy;
-
-    @CreatedDate
-    @Column(name = "created_date", updatable = false)
-    @JsonIgnore
-    private Instant createdDate = Instant.now();
-
-    @LastModifiedBy
-    @Column(name = "last_modified_by", length = 50)
-    @JsonIgnore
-    private String lastModifiedBy;
-
-    @LastModifiedDate
-    @Column(name = "last_modified_date")
-    @JsonIgnore
-    private Instant lastModifiedDate = Instant.now();
-
-    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;
-    }
-
-    public String getLastModifiedBy() {
-        return lastModifiedBy;
-    }
-
-    public void setLastModifiedBy(String lastModifiedBy) {
-        this.lastModifiedBy = lastModifiedBy;
-    }
-
-    public Instant getLastModifiedDate() {
-        return lastModifiedDate;
-    }
-
-    public void setLastModifiedDate(Instant lastModifiedDate) {
-        this.lastModifiedDate = lastModifiedDate;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/Appointment.java b/pamapi/src/main/java/com/pollex/pam/domain/Appointment.java
deleted file mode 100644
index 76d30ca..0000000
--- a/pamapi/src/main/java/com/pollex/pam/domain/Appointment.java
+++ /dev/null
@@ -1,285 +0,0 @@
-package com.pollex.pam.domain;
-
-import java.io.Serializable;
-import java.time.Instant;
-import java.util.List;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EntityListeners;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.OneToMany;
-import javax.persistence.OneToOne;
-import javax.persistence.Table;
-
-import org.springframework.data.annotation.CreatedDate;
-import org.springframework.data.annotation.LastModifiedDate;
-import org.springframework.data.jpa.domain.support.AuditingEntityListener;
-
-import com.pollex.pam.enums.AppointmentStatusEnum;
-import com.pollex.pam.enums.ContactStatusEnum;
-
-@EntityListeners(AuditingEntityListener.class)
-@Entity
-@Table(name = "appointment")
-public class Appointment implements Serializable {
-
-	/**
-	 *
-	 */
-	private static final long serialVersionUID = 1L;
-
-	@Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-
-	@Column(name = "phone")
-    private String phone;
-
-	@Column(name = "email")
-    private String email;
-
-	@Column(name = "contact_type")
-    private String contactType;
-
-	@Column(name = "gender")
-    private String gender;
-
-	@Column(name = "age")
-    private String age;
-
-	@Column(name = "job")
-    private String job;
-
-	@Column(name = "requirement")
-    private String requirement;
-
-	@Enumerated(EnumType.STRING)
-	@Column(name = "communicate_status")
-    private ContactStatusEnum communicateStatus;
-
-	@Column(name = "hope_contact_time")
-    private String hopeContactTime;
-
-	@Column(name = "other_requirement")
-    private String otherRequirement;
-
-    @CreatedDate
-	@Column(name = "appointment_date", updatable = false)
-    private Instant appointmentDate = Instant.now();
-
-    @Column(name = "last_modified_date")
-    @LastModifiedDate
-    private Instant lastModifiedDate = Instant.now();
-
-	@Column(name = "agent_no")
-    private String agentNo;
-
-	@Column(name = "customer_id")
-    private Long customerId;
-
-    @Column(name = "consultant_view_time")
-    private Instant consultantViewTime;
-
-    @Column(name = "consultant_read_time")
-    private Instant consultantReadTime;
-
-    @Column(name = "contact_time")
-    private Instant contactTime;
-
-    @Enumerated(value = EnumType.STRING)
-    @Column(name = "status")
-    private AppointmentStatusEnum status;
-    
-    @JoinColumn(name = "appointment_id")
-    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
-    private List<AppointmentMemo> appointmentMemoList;
-    
-//    @OneToOne(cascade = CascadeType.REMOVE,fetch=FetchType.EAGER)
-////    @JoinColumn(name = "form_authority_id", referencedColumnName = "id")
-//    @JoinColumn(name = "appointment_id", referencedColumnName = "id")
-//    private AppointmentClosedInfo closedInfo;
-    
-//    @OneToOne(cascade = CascadeType.REMOVE
-//    		, mappedBy = "appointment", fetch=FetchType.LAZY)
-//    private AppointmentClosedInfo closedInfo;
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getPhone() {
-		return phone;
-	}
-
-	public void setPhone(String phone) {
-		this.phone = phone;
-	}
-
-	public String getEmail() {
-		return email;
-	}
-
-	public void setEmail(String email) {
-		this.email = email;
-	}
-
-	public String getContactType() {
-		return contactType;
-	}
-
-	public void setContactType(String contactType) {
-		this.contactType = contactType;
-	}
-
-	public String getGender() {
-		return gender;
-	}
-
-	public void setGender(String gender) {
-		this.gender = gender;
-	}
-
-	public String getAge() {
-		return age;
-	}
-
-	public void setAge(String age) {
-		this.age = age;
-	}
-
-	public String getJob() {
-		return job;
-	}
-
-	public void setJob(String job) {
-		this.job = job;
-	}
-
-	public String getRequirement() {
-		return requirement;
-	}
-
-	public void setRequirement(String requirement) {
-		this.requirement = requirement;
-	}
-
-	public String getHopeContactTime() {
-		return hopeContactTime;
-	}
-
-	public void setHopeContactTime(String hopeContactTime) {
-		this.hopeContactTime = hopeContactTime;
-	}
-
-	public String getOtherRequirement() {
-		return otherRequirement;
-	}
-
-	public void setOtherRequirement(String otherRequirement) {
-		this.otherRequirement = otherRequirement;
-	}
-
-	public Instant getAppointmentDate() {
-		return appointmentDate;
-	}
-
-	public void setAppointmentDate(Instant appointmentDate) {
-		this.appointmentDate = appointmentDate;
-	}
-
-	public String getAgentNo() {
-		return agentNo;
-	}
-
-	public void setAgentNo(String agentNo) {
-		this.agentNo = agentNo;
-	}
-
-	public ContactStatusEnum getCommunicateStatus() {
-		return communicateStatus;
-	}
-
-	public void setCommunicateStatus(ContactStatusEnum communicateStatus) {
-		this.communicateStatus = communicateStatus;
-	}
-
-	public Long getCustomerId() {
-		return customerId;
-	}
-
-	public void setCustomerId(Long customerId) {
-		this.customerId = customerId;
-	}
-
-    public Instant getConsultantViewTime() {
-        return consultantViewTime;
-    }
-
-    public void setConsultantViewTime(Instant consultantViewTime) {
-        this.consultantViewTime = consultantViewTime;
-    }
-
-    public Instant getConsultantReadTime() {
-        return consultantReadTime;
-    }
-
-    public void setConsultantReadTime(Instant consultantReadTime) {
-        this.consultantReadTime = consultantReadTime;
-    }
-
-    public Instant getContactTime() {
-        return contactTime;
-    }
-
-    public void setContactTime(Instant markCommunicateTime) {
-        this.contactTime = markCommunicateTime;
-    }
-
-    public AppointmentStatusEnum getStatus() {
-        return status;
-    }
-
-    public void setStatus(AppointmentStatusEnum status) {
-        this.status = status;
-    }
-
-    public Instant getLastModifiedDate() {
-        return lastModifiedDate;
-    }
-
-    public void setLastModifiedDate(Instant lastModifiedDate) {
-        this.lastModifiedDate = lastModifiedDate;
-    }
-
-	public List<AppointmentMemo> getAppointmentMemoList() {
-		return appointmentMemoList;
-	}
-
-	public void setAppointmentMemoList(List<AppointmentMemo> appointmentMemoList) {
-		this.appointmentMemoList = appointmentMemoList;
-	}
-
-//	public AppointmentClosedInfo getClosedInfo() {
-//		return closedInfo;
-//	}
-//
-//	public void setClosedInfo(AppointmentClosedInfo closedInfo) {
-//		this.closedInfo = closedInfo;
-//	}
-    
-    
-    
-    
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/AppointmentClosedInfo.java b/pamapi/src/main/java/com/pollex/pam/domain/AppointmentClosedInfo.java
deleted file mode 100644
index bc16a7a..0000000
--- a/pamapi/src/main/java/com/pollex/pam/domain/AppointmentClosedInfo.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package com.pollex.pam.domain;
-
-import java.io.Serializable;
-import java.util.Date;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-@Entity
-@Table(name = "appointment_closed_info")
-public class AppointmentClosedInfo implements Serializable {
-	
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	@Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-	
-	@Column(name = "policyholder_identity_id")
-    private String policyholderIdentityId;
-    
-    @Column(name = "plan_code")
-	private String planCode;
-    
-    @Column(name = "policy_entry_date")
-	private Date policyEntryDate;
-    
-    @Column(name = "remark")
-	private String remark;
-    
-    @Column(name = "closed_reason")
-	private String closedReason;
-    
-    @Column(name = "closed_other_reason")
-	private String closedOtherReason;
-    
-    @Column(name = "appointment_id")
-	private Long appointmentId;
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getPolicyholderIdentityId() {
-		return policyholderIdentityId;
-	}
-
-	public void setPolicyholderIdentityId(String policyholderIdentityId) {
-		this.policyholderIdentityId = policyholderIdentityId;
-	}
-
-	public String getPlanCode() {
-		return planCode;
-	}
-
-	public void setPlanCode(String planCode) {
-		this.planCode = planCode;
-	}
-
-	public Date getPolicyEntryDate() {
-		return policyEntryDate;
-	}
-
-	public void setPolicyEntryDate(Date policyEntryDate) {
-		this.policyEntryDate = policyEntryDate;
-	}
-
-	public String getRemark() {
-		return remark;
-	}
-
-	public void setRemark(String remark) {
-		this.remark = remark;
-	}
-
-	public String getClosedReason() {
-		return closedReason;
-	}
-
-	public void setClosedReason(String closedReason) {
-		this.closedReason = closedReason;
-	}
-
-	public String getClosedOtherReason() {
-		return closedOtherReason;
-	}
-
-	public void setClosedOtherReason(String closedOtherReason) {
-		this.closedOtherReason = closedOtherReason;
-	}
-
-	public Long getAppointmentId() {
-		return appointmentId;
-	}
-
-	public void setAppointmentId(Long appointmentId) {
-		this.appointmentId = appointmentId;
-	}
-    
-    
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/AppointmentCustomerView.java b/pamapi/src/main/java/com/pollex/pam/domain/AppointmentCustomerView.java
deleted file mode 100644
index bb2a477..0000000
--- a/pamapi/src/main/java/com/pollex/pam/domain/AppointmentCustomerView.java
+++ /dev/null
@@ -1,265 +0,0 @@
-package com.pollex.pam.domain;
-
-import java.io.Serializable;
-import java.time.Instant;
-import java.util.List;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.OneToMany;
-import javax.persistence.Table;
-
-import com.pollex.pam.enums.AppointmentStatusEnum;
-import com.pollex.pam.enums.ContactStatusEnum;
-
-@Entity
-@Table(name = "appointment_customer_view")
-public class AppointmentCustomerView implements Serializable {
-
-	/**
-	 *
-	 */
-	private static final long serialVersionUID = 1L;
-
-	@Column(name = "appointment_id")
-	@Id
-	private Long id;
-
-	@Column(name = "phone")
-    private String phone;
-
-	@Column(name = "email")
-    private String email;
-
-	@Column(name = "contact_type")
-    private String contactType;
-
-	@Column(name = "gender")
-    private String gender;
-
-	@Column(name = "age")
-    private String age;
-
-	@Column(name = "job")
-    private String job;
-
-	@Column(name = "requirement")
-    private String requirement;
-
-	@Enumerated(EnumType.STRING)
-	@Column(name = "communicate_status")
-    private ContactStatusEnum communicateStatus;
-
-	@Column(name = "hope_contact_time")
-    private String hopeContactTime;
-
-	@Column(name = "other_requirement")
-    private String otherRequirement;
-
-	@Column(name = "appointment_date")
-    private Instant appointmentDate;
-
-	@Column(name = "agent_no")
-    private String agentNo;
-
-	@Column(name = "customer_id")
-    private Long customerId;
-
-    @Column(name = "consultant_view_time")
-    private Instant consultantViewTime;
-
-    @Column(name = "consultant_read_time")
-    private Instant consultantReadTime;
-
-    @Column(name = "contact_time")
-    private Instant contactTime;
-
-    @Column(name = "last_modified_date")
-    private Instant lastModifiedDate;
-
-    @Column(name = "name")
-    private String name;
-
-    @Enumerated(value = EnumType.STRING)
-    @Column(name = "status")
-    private AppointmentStatusEnum status;
-    
-    @JoinColumn(name = "appointment_id")
-    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)
-    private List<AppointmentMemo> appointmentMemoList;
-
-    public Long getId() {
-        return id;
-    }
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getPhone() {
-		return phone;
-	}
-
-	public void setPhone(String phone) {
-		this.phone = phone;
-	}
-
-	public String getEmail() {
-		return email;
-	}
-
-	public void setEmail(String email) {
-		this.email = email;
-	}
-
-	public String getContactType() {
-		return contactType;
-	}
-
-	public void setContactType(String contactType) {
-		this.contactType = contactType;
-	}
-
-	public String getGender() {
-		return gender;
-	}
-
-	public void setGender(String gender) {
-		this.gender = gender;
-	}
-
-	public String getAge() {
-		return age;
-	}
-
-	public void setAge(String age) {
-		this.age = age;
-	}
-
-	public String getJob() {
-		return job;
-	}
-
-	public void setJob(String job) {
-		this.job = job;
-	}
-
-	public String getRequirement() {
-		return requirement;
-	}
-
-	public void setRequirement(String requirement) {
-		this.requirement = requirement;
-	}
-
-	public ContactStatusEnum getCommunicateStatus() {
-		return communicateStatus;
-	}
-
-	public void setCommunicateStatus(ContactStatusEnum communicateStatus) {
-		this.communicateStatus = communicateStatus;
-	}
-
-	public String getHopeContactTime() {
-		return hopeContactTime;
-	}
-
-	public void setHopeContactTime(String hopeContactTime) {
-		this.hopeContactTime = hopeContactTime;
-	}
-
-	public String getOtherRequirement() {
-		return otherRequirement;
-	}
-
-	public void setOtherRequirement(String otherRequirement) {
-		this.otherRequirement = otherRequirement;
-	}
-
-	public Instant getAppointmentDate() {
-		return appointmentDate;
-	}
-
-	public void setAppointmentDate(Instant appointmentDate) {
-		this.appointmentDate = appointmentDate;
-	}
-
-	public String getAgentNo() {
-		return agentNo;
-	}
-
-	public void setAgentNo(String agentNo) {
-		this.agentNo = agentNo;
-	}
-
-	public Long getCustomerId() {
-		return customerId;
-	}
-
-	public void setCustomerId(Long customerId) {
-		this.customerId = customerId;
-	}
-
-    public Instant getConsultantViewTime() {
-        return consultantViewTime;
-    }
-
-    public void setConsultantViewTime(Instant consultantViewTime) {
-        this.consultantViewTime = consultantViewTime;
-    }
-
-    public Instant getConsultantReadTime() {
-        return consultantReadTime;
-    }
-
-    public void setConsultantReadTime(Instant consultantReadTime) {
-        this.consultantReadTime = consultantReadTime;
-    }
-
-    public Instant getLastModifiedDate() {
-        return lastModifiedDate;
-    }
-
-    public void setLastModifiedDate(Instant lastModifiedDate) {
-        this.lastModifiedDate = lastModifiedDate;
-    }
-
-    public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-    public Instant getContactTime() {
-        return contactTime;
-    }
-
-    public void setContactTime(Instant markCommunicateTime) {
-        this.contactTime = markCommunicateTime;
-    }
-    public AppointmentStatusEnum getStatus() {
-        return status;
-    }
-
-    public void setStatus(AppointmentStatusEnum status) {
-        this.status = status;
-    }
-
-	public List<AppointmentMemo> getAppointmentMemoList() {
-		return appointmentMemoList;
-	}
-
-	public void setAppointmentMemoList(List<AppointmentMemo> appointmentMemoList) {
-		this.appointmentMemoList = appointmentMemoList;
-	}
-    
-    
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/AppointmentExpiringNotifyRecord.java b/pamapi/src/main/java/com/pollex/pam/domain/AppointmentExpiringNotifyRecord.java
deleted file mode 100644
index 5f2f8f6..0000000
--- a/pamapi/src/main/java/com/pollex/pam/domain/AppointmentExpiringNotifyRecord.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.pollex.pam.domain;
-
-import javax.persistence.*;
-import java.io.Serializable;
-import java.time.Instant;
-
-@Entity
-@Table(name = "appointment_expiring_notify_record")
-public class AppointmentExpiringNotifyRecord implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-
-    @Column(name = "appointment_id")
-    private Long appointmentId;
-
-    @Column(name = "send_time")
-    private Instant sendTime;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Long getAppointmentId() {
-        return appointmentId;
-    }
-
-    public void setAppointmentId(Long appointmentId) {
-        this.appointmentId = appointmentId;
-    }
-
-    public Instant getSendTime() {
-        return sendTime;
-    }
-
-    public void setSendTime(Instant sendTime) {
-        this.sendTime = sendTime;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/AppointmentMemo.java b/pamapi/src/main/java/com/pollex/pam/domain/AppointmentMemo.java
deleted file mode 100644
index 1b6299a..0000000
--- a/pamapi/src/main/java/com/pollex/pam/domain/AppointmentMemo.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.pollex.pam.domain;
-
-import java.io.Serializable;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-@Entity
-@Table(name = "appointment_memo")
-public class AppointmentMemo extends AbstractAuditingEntity implements Serializable {
-	
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	
-	@Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-	
-	@Column(name = "content")
-    private String content;
-	
-	@Column(name = "appointment_id")
-    private Long appointmentId;
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getContent() {
-		return content;
-	}
-
-	public void setContent(String content) {
-		this.content = content;
-	}
-
-	public Long getAppointmentId() {
-		return appointmentId;
-	}
-
-	public void setAppointmentId(Long appointmentId) {
-		this.appointmentId = appointmentId;
-	}
-	
-	
-
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/AppointmentNoticeLog.java b/pamapi/src/main/java/com/pollex/pam/domain/AppointmentNoticeLog.java
deleted file mode 100644
index 10c6173..0000000
--- a/pamapi/src/main/java/com/pollex/pam/domain/AppointmentNoticeLog.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package com.pollex.pam.domain;
-
-import java.io.Serializable;
-import java.time.Instant;
-import java.util.Date;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-import org.springframework.data.annotation.CreatedBy;
-import org.springframework.data.annotation.CreatedDate;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-
-@Entity
-@Table(name = "appointment_notice_log")
-public class AppointmentNoticeLog implements Serializable {
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	
-	@Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-
-	@Column(name = "phone")
-    private String phone;
-
-	@Column(name = "email")
-    private String email;
-	
-	@Column(name = "appointment_id")
-    private Long appointmentId;
-	
-//	@Column(name = "type")
-//    private String type;
-	
-	@Column(name = "content")
-    private String content;
-	
-//	@CreatedBy
-//    @Column(name = "created_by", nullable = false, length = 50, updatable = false)
-//    @JsonIgnore
-//    private String createdBy;
-
-    @CreatedDate
-    @Column(name = "created_date", updatable = false)
-    private Instant createdDate = Instant.now();
-    
-    @Column(name = "interview_date")
-    private Date interviewDate;
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getPhone() {
-		return phone;
-	}
-
-	public void setPhone(String phone) {
-		this.phone = phone;
-	}
-
-	public String getEmail() {
-		return email;
-	}
-
-	public void setEmail(String email) {
-		this.email = email;
-	}
-
-	public Long getAppointmentId() {
-		return appointmentId;
-	}
-
-	public void setAppointmentId(Long appointmentId) {
-		this.appointmentId = appointmentId;
-	}
-
-//	public String getType() {
-//		return type;
-//	}
-//
-//	public void setType(String type) {
-//		this.type = type;
-//	}
-
-	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;
-	}
-
-	public Date getInterviewDate() {
-		return interviewDate;
-	}
-
-	public void setInterviewDate(Date interviewDate) {
-		this.interviewDate = interviewDate;
-	}
-	
-    
-    
-    
-    
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/Authority.java b/pamapi/src/main/java/com/pollex/pam/domain/Authority.java
deleted file mode 100644
index c393e2b..0000000
--- a/pamapi/src/main/java/com/pollex/pam/domain/Authority.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.pollex.pam.domain;
-
-import java.io.Serializable;
-import java.util.Objects;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
-import org.hibernate.annotations.Cache;
-import org.hibernate.annotations.CacheConcurrencyStrategy;
-
-/**
- * An authority (a security role) used by Spring Security.
- */
-@Entity
-@Table(name = "jhi_authority")
-@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
-public class Authority implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @NotNull
-    @Size(max = 50)
-    @Id
-    @Column(length = 50)
-    private String name;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) {
-            return true;
-        }
-        if (!(o instanceof Authority)) {
-            return false;
-        }
-        return Objects.equals(name, ((Authority) o).name);
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hashCode(name);
-    }
-
-    // prettier-ignore
-    @Override
-    public String toString() {
-        return "Authority{" +
-            "name='" + name + '\'' +
-            "}";
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/Consultant.java b/pamapi/src/main/java/com/pollex/pam/domain/Consultant.java
deleted file mode 100644
index 942a2e7..0000000
--- a/pamapi/src/main/java/com/pollex/pam/domain/Consultant.java
+++ /dev/null
@@ -1,269 +0,0 @@
-package com.pollex.pam.domain;
-
-import com.pollex.pam.enums.GenderEnum;
-
-import javax.persistence.*;
-import java.io.Serializable;
-
-@Entity
-@Table(name = "consultant")
-public class Consultant extends AbstractAuditingEntity implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
-    @SequenceGenerator(name = "sequenceGenerator")
-    private Long id;
-
-    @Column(name = "agent_no", unique = true)
-    private String agentNo;
-
-    @Column(name = "name")
-    private String name;
-
-    @Column(name = "photo_path")
-    private String photoPath;
-
-    @Column(name = "expertise")
-    private String expertise;
-
-    @Column(name = "avg_score")
-    private Float avgScore;
-
-    @Column(name = "title")
-    private String title;
-
-    @Column(name = "role")
-    private String role;
-
-    @Column(name = "serve_area")
-    private String serveArea;
-
-    @Enumerated(value = EnumType.STRING)
-    @Column(name = "gender")
-    private GenderEnum gender;
-
-    @Column(name = "phone_number")
-    private String phoneNumber;
-
-    @Column(name = "company_address")
-    private String companyAddress;
-
-    @Column(name = "seniority_year")
-    private Long seniorityYear;
-
-    @Column(name = "seniority_month")
-    private Long seniorityMonth;
-
-    @Column(name = "concept")
-    private String concept;
-
-    @Column(name = "experience")
-    private String experience;
-
-    @Column(name = "award")
-    private String award;
-
-    @Column(name = "recommend")
-    private Boolean recommend;
-
-    @Column(name = "communication_style")
-    private String communicationStyle;
-
-    @Column(name = "email")
-    private String email;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getAgentNo() {
-        return agentNo;
-    }
-
-    public void setAgentNo(String agentNo) {
-        this.agentNo = agentNo;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getPhotoPath() {
-        return photoPath;
-    }
-
-    public void setPhotoPath(String photoPath) {
-        this.photoPath = photoPath;
-    }
-
-    public String getExpertise() {
-        return expertise;
-    }
-
-    public void setExpertise(String expertise) {
-        this.expertise = expertise;
-    }
-
-    public Float getAvgScore() {
-        return avgScore;
-    }
-
-    public void setAvgScore(Float avgScore) {
-        this.avgScore = avgScore;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public String getRole() {
-        return role;
-    }
-
-    public void setRole(String role) {
-        this.role = role;
-    }
-
-    public String getServeArea() {
-        return serveArea;
-    }
-
-    public void setServeArea(String serveArea) {
-        this.serveArea = serveArea;
-    }
-
-    public GenderEnum getGender() {
-        return gender;
-    }
-
-    public void setGender(GenderEnum gender) {
-        this.gender = gender;
-    }
-
-    public String getPhoneNumber() {
-        return phoneNumber;
-    }
-
-    public void setPhoneNumber(String phoneNumber) {
-        this.phoneNumber = phoneNumber;
-    }
-
-    public String getCompanyAddress() {
-        return companyAddress;
-    }
-
-    public void setCompanyAddress(String companyAddress) {
-        this.companyAddress = companyAddress;
-    }
-
-    public Long getSeniorityYear() {
-        return seniorityYear;
-    }
-
-    public void setSeniorityYear(Long seniorityYear) {
-        this.seniorityYear = seniorityYear;
-    }
-
-    public Long getSeniorityMonth() {
-        return seniorityMonth;
-    }
-
-    public void setSeniorityMonth(Long seniorityMonth) {
-        this.seniorityMonth = seniorityMonth;
-    }
-
-    public String getSeniorityDTOString() {
-        final String seniorityYearString = this.seniorityYear != 0 ? this.seniorityYear + " 撟� " : "";
-        final String seniorityMonthString = this.seniorityMonth != 0 ? this.seniorityMonth + " ���" : "";
-
-        return seniorityYearString + seniorityMonthString;
-    }
-
-    public String getConcept() {
-        return concept;
-    }
-
-    public void setConcept(String concept) {
-        this.concept = concept;
-    }
-
-    public String getExperience() {
-        return experience;
-    }
-
-    public void setExperience(String experience) {
-        this.experience = experience;
-    }
-
-    public String getAward() {
-        return award;
-    }
-
-    public void setAward(String award) {
-        this.award = award;
-    }
-
-    public Boolean getRecommend() {
-        return recommend;
-    }
-
-    public void setRecommend(Boolean recommend) {
-        this.recommend = recommend;
-    }
-
-    public String getCommunicationStyle() {
-        return communicationStyle;
-    }
-
-    public void setCommunicationStyle(String communicationStyle) {
-        this.communicationStyle = communicationStyle;
-    }
-
-    public String getEmail() {
-        return email;
-    }
-
-    public void setEmail(String email) {
-        this.email = email;
-    }
-
-    @Override
-    public String toString() {
-        return "Consultant{" +
-            "id=" + id +
-            ", agentNo='" + agentNo + '\'' +
-            ", name='" + name + '\'' +
-            ", photoPath='" + photoPath + '\'' +
-            ", expertise='" + expertise + '\'' +
-            ", avgScore=" + avgScore +
-            ", title='" + title + '\'' +
-            ", role='" + role + '\'' +
-            ", serveArea='" + serveArea + '\'' +
-            ", gender=" + gender +
-            ", phoneNumber='" + phoneNumber + '\'' +
-            ", companyAddress='" + companyAddress + '\'' +
-            ", seniorityYear=" + seniorityYear +
-            ", seniorityMonth=" + seniorityMonth +
-            ", concept='" + concept + '\'' +
-            ", experience='" + experience + '\'' +
-            ", award='" + award + '\'' +
-            ", recommend=" + recommend +
-            ", communicationStyle='" + communicationStyle + '\'' +
-            ", email='" + email + '\'' +
-            '}';
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/Customer.java b/pamapi/src/main/java/com/pollex/pam/domain/Customer.java
deleted file mode 100644
index c3055cc..0000000
--- a/pamapi/src/main/java/com/pollex/pam/domain/Customer.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package com.pollex.pam.domain;
-
-import java.io.Serializable;
-import java.time.Instant;
-import java.util.Optional;
-
-import javax.persistence.*;
-
-import org.springframework.data.annotation.CreatedDate;
-import org.springframework.data.annotation.LastModifiedDate;
-import org.springframework.data.jpa.domain.support.AuditingEntityListener;
-import org.springframework.util.StringUtils;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.pollex.pam.enums.OtpLoginTypeEnum;
-
-@EntityListeners(AuditingEntityListener.class)
-@Entity
-@Table(name = "customer")
-public class Customer implements Serializable {
-
-	/**
-	 *
-	 */
-	private static final long serialVersionUID = 1L;
-
-	@Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-
-	@Column(name = "name")
-    private String name;
-
-	@Column(name = "phone")
-    private String phone;
-
-	@Column(name = "email")
-    private String email;
-
-	@Enumerated(value = EnumType.STRING)
-	@Column(name = "contact_type")
-    private OtpLoginTypeEnum contactType;
-
-	@CreatedDate
-    @Column(name = "created_date", updatable = false)
-    @JsonIgnore
-    private Instant createdDate = Instant.now();
-
-    @LastModifiedDate
-    @Column(name = "last_modified_date")
-    @JsonIgnore
-    private Instant lastModifiedDate = Instant.now();
-
-    @CreatedDate
-    @Column(name = "agree_personal_information_time", updatable = false)
-    @JsonIgnore
-    private Instant agreePersonalInformationTime;
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public String getPhone() {
-		return phone;
-	}
-
-	public void setPhone(String phone) {
-		this.phone = phone;
-	}
-
-	public String getEmail() {
-		return email;
-	}
-
-	public void setEmail(String email) {
-		this.email = email;
-	}
-
-	public Instant getCreatedDate() {
-		return createdDate;
-	}
-
-	public void setCreatedDate(Instant createdDate) {
-		this.createdDate = createdDate;
-	}
-
-	public Instant getLastModifiedDate() {
-		return lastModifiedDate;
-	}
-
-	public void setLastModifiedDate(Instant lastModifiedDate) {
-		this.lastModifiedDate = lastModifiedDate;
-	}
-
-	public OtpLoginTypeEnum getContactType() {
-		return contactType;
-	}
-
-	public void setContactType(OtpLoginTypeEnum contactType) {
-		this.contactType = contactType;
-	}
-
-    public Instant getAgreePersonalInformationTime() {
-        return agreePersonalInformationTime;
-    }
-
-    public void setAgreePersonalInformationTime(Instant agreePersonalInformationTime) {
-        this.agreePersonalInformationTime = agreePersonalInformationTime;
-    }
-
-    public String toAccountString() {
-    	return Optional.ofNullable(getPhone())
-				.filter(StringUtils::hasText)
-				.orElseGet(this::getEmail);
-    }
-
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/CustomerFavoriteConsultant.java b/pamapi/src/main/java/com/pollex/pam/domain/CustomerFavoriteConsultant.java
deleted file mode 100644
index ec68439..0000000
--- a/pamapi/src/main/java/com/pollex/pam/domain/CustomerFavoriteConsultant.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package com.pollex.pam.domain;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import org.springframework.data.annotation.CreatedBy;
-import org.springframework.data.annotation.CreatedDate;
-import org.springframework.data.annotation.LastModifiedBy;
-import org.springframework.data.annotation.LastModifiedDate;
-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 = "customer_favorite_consultant")
-public class CustomerFavoriteConsultant implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
-    @SequenceGenerator(name = "sequenceGenerator")
-    private Long id;
-
-    @ManyToOne
-    @JoinColumn(name = "consultant_id")
-    private Consultant consultant;
-
-    @Column(name = "customer_id")
-    private Long customerId;
-
-    @CreatedBy
-    @Column(name = "created_by", updatable = false)
-    @JsonIgnore
-    private String createdBy;
-
-    @CreatedDate
-    @Column(name = "created_date", updatable = false)
-    @JsonIgnore
-    private Instant createdDate = Instant.now();
-
-    @LastModifiedBy
-    @Column(name = "last_modified_by")
-    @JsonIgnore
-    private String lastModifiedBy;
-
-    @Column(name = "last_modified_date")
-    @JsonIgnore
-    private Instant lastModifiedDate = Instant.now();
-
-    @Column(name = "view_time")
-    private Instant viewTime;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Consultant getConsultant() {
-        return consultant;
-    }
-
-    public void setConsultant(Consultant consultant) {
-        this.consultant = consultant;
-    }
-
-    public Long getCustomerId() {
-        return customerId;
-    }
-
-    public void setCustomerId(Long customId) {
-        this.customerId = customId;
-    }
-
-    public Instant getViewTime() {
-        return viewTime;
-    }
-
-    public void setViewTime(Instant viewTime) {
-        this.viewTime = viewTime;
-    }
-
-    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;
-    }
-
-    public String getLastModifiedBy() {
-        return lastModifiedBy;
-    }
-
-    public void setLastModifiedBy(String lastModifiedBy) {
-        this.lastModifiedBy = lastModifiedBy;
-    }
-
-    public Instant getLastModifiedDate() {
-        return lastModifiedDate;
-    }
-
-    public void setLastModifiedDate(Instant lastModifiedDate) {
-        this.lastModifiedDate = lastModifiedDate;
-    }
-
-    @Override
-    public String toString() {
-        return "CustomerFavoriteConsultant{" +
-            "id=" + id +
-            ", consultant=" + consultant +
-            ", customerId=" + customerId +
-            ", createdBy='" + createdBy + '\'' +
-            ", createdDate=" + createdDate +
-            ", lastModifiedBy='" + lastModifiedBy + '\'' +
-            ", lastModifiedDate=" + lastModifiedDate +
-            ", viewTime=" + viewTime +
-            '}';
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/InterviewRecord.java b/pamapi/src/main/java/com/pollex/pam/domain/InterviewRecord.java
deleted file mode 100644
index c7f02d1..0000000
--- a/pamapi/src/main/java/com/pollex/pam/domain/InterviewRecord.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package com.pollex.pam.domain;
-
-import java.io.Serializable;
-import java.util.Date;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-import com.pollex.pam.enums.InterviewRecordStatusEnum;
-
-@Entity
-@Table(name = "interview_record")
-public class InterviewRecord extends AbstractAuditingEntity implements Serializable {
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	
-	@Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-	
-	@Column(name = "content")
-    private String content;
-	
-	@Column(name = "interview_date")
-    private Date interviewDate;
-	
-	@Column(name = "appointment_id")
-	private Long appointmentId;
-	
-	@Enumerated(EnumType.STRING)
-	@Column(name = "status")
-    private InterviewRecordStatusEnum status;
-	
-	
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getContent() {
-		return content;
-	}
-
-	public void setContent(String content) {
-		this.content = content;
-	}
-
-	public Date getInterviewDate() {
-		return interviewDate;
-	}
-
-	public void setInterviewDate(Date interviewDate) {
-		this.interviewDate = interviewDate;
-	}
-
-	public Long getAppointmentId() {
-		return appointmentId;
-	}
-
-	public void setAppointmentId(Long appointmentId) {
-		this.appointmentId = appointmentId;
-	}
-
-	public InterviewRecordStatusEnum getStatus() {
-		return status;
-	}
-
-	public void setStatus(InterviewRecordStatusEnum status) {
-		this.status = status;
-	}
-	
-	
-
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/LoginRecord.java b/pamapi/src/main/java/com/pollex/pam/domain/LoginRecord.java
deleted file mode 100644
index 42bce49..0000000
--- a/pamapi/src/main/java/com/pollex/pam/domain/LoginRecord.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.pollex.pam.domain;
-
-import com.pollex.pam.enums.LoginMethod;
-import com.pollex.pam.enums.LoginResult;
-
-import javax.persistence.*;
-import java.io.Serializable;
-import java.time.Instant;
-
-@Entity
-@Table(name = "login_record")
-public class LoginRecord implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-
-    @Column(name = "account")
-    private String account;
-
-    @Enumerated(EnumType.STRING)
-    @Column(name = "login_method")
-    private LoginMethod loginMethod;
-
-    @Column(name = "login_date", updatable = false)
-    private Instant loginDate = Instant.now();
-
-    @Enumerated(EnumType.STRING)
-    @Column(name = "result")
-    private LoginResult result;
-
-    @Column(name = "failed_reason")
-    private String failedReason;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getAccount() {
-        return account;
-    }
-
-    public void setAccount(String account) {
-        this.account = account;
-    }
-
-    public LoginMethod getLoginMethod() {
-        return loginMethod;
-    }
-
-    public void setLoginMethod(LoginMethod loginMethod) {
-        this.loginMethod = loginMethod;
-    }
-
-    public Instant getLoginDate() {
-        return loginDate;
-    }
-
-    public void setLoginDate(Instant createdDate) {
-        this.loginDate = createdDate;
-    }
-
-    public LoginResult getResult() {
-        return result;
-    }
-
-    public void setResult(LoginResult result) {
-        this.result = result;
-    }
-
-    public String getFailedReason() {
-        return failedReason;
-    }
-
-    public void setFailedReason(String failedReason) {
-        this.failedReason = failedReason;
-    }
-
-    @Override
-    public String toString() {
-        return "LoginRecord{" +
-            "id=" + id +
-            ", account='" + account + '\'' +
-            ", loginMethod=" + loginMethod +
-            ", createdDate=" + loginDate +
-            ", result=" + result +
-            ", failedReason='" + failedReason + '\'' +
-            '}';
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/OtpTmp.java b/pamapi/src/main/java/com/pollex/pam/domain/OtpTmp.java
deleted file mode 100644
index 4007d37..0000000
--- a/pamapi/src/main/java/com/pollex/pam/domain/OtpTmp.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package com.pollex.pam.domain;
-
-import java.io.Serializable;
-import java.time.Instant;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-import org.springframework.data.annotation.CreatedDate;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.pollex.pam.enums.OtpLoginTypeEnum;
-import com.pollex.pam.enums.OtpTmpStatusEnum;
-
-@Entity
-@Table(name = "otp_tmp")
-public class OtpTmp implements Serializable{
-	
-	
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	@Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-	
-	@Column(name = "account")
-    private String account;
-	
-	@Column(name = "index_key")
-    private String indexKey;
-	
-	@Enumerated(value = EnumType.STRING)
-	@Column(name = "status")
-    private OtpTmpStatusEnum status;
-	
-	@CreatedDate
-    @Column(name = "created_date", updatable = false)
-    @JsonIgnore
-    private Instant createdDate = Instant.now();
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getIndexKey() {
-		return indexKey;
-	}
-
-	public void setIndexKey(String indexKey) {
-		this.indexKey = indexKey;
-	}
-
-	public OtpTmpStatusEnum getStatus() {
-		return status;
-	}
-
-	public void setStatus(OtpTmpStatusEnum status) {
-		this.status = status;
-	}
-
-	public Instant getCreatedDate() {
-		return createdDate;
-	}
-
-	public void setCreatedDate(Instant createdDate) {
-		this.createdDate = createdDate;
-	}
-
-	public String getAccount() {
-		return account;
-	}
-
-	public void setAccount(String account) {
-		this.account = account;
-	}
-	
-	
-	
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/PersonalNotification.java b/pamapi/src/main/java/com/pollex/pam/domain/PersonalNotification.java
deleted file mode 100644
index 922994b..0000000
--- a/pamapi/src/main/java/com/pollex/pam/domain/PersonalNotification.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package com.pollex.pam.domain;
-
-import java.io.Serializable;
-import java.time.Instant;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-import org.springframework.data.annotation.CreatedDate;
-
-import com.pollex.pam.enums.NotificationTypeEnum;
-import com.pollex.pam.enums.PersonalNotificationRoleEnum;
-
-@Entity
-@Table(name = "personal_notification")
-public class PersonalNotification implements Serializable {
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	
-	@Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-	
-	@Column(name = "title")
-    private String title;
-	
-	@Column(name = "content")
-    private String content;
-	
-	@Enumerated(EnumType.STRING)
-	@Column(name = "notification_type")
-    private NotificationTypeEnum notificationType;
-	
-	@Enumerated(EnumType.STRING)
-	@Column(name = "owner_role")
-    private PersonalNotificationRoleEnum ownerRole;
-	
-	@Column(name = "owner_id")
-    private Long ownerId;
-	
-	@CreatedDate
-	@Column(name = "created_date", updatable = false)
-    private Instant createdDate = Instant.now();
-	
-	@Column(name = "read_date")
-    private Instant readDate;
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getTitle() {
-		return title;
-	}
-
-	public void setTitle(String title) {
-		this.title = title;
-	}
-
-	public String getContent() {
-		return content;
-	}
-
-	public void setContent(String content) {
-		this.content = content;
-	}
-
-	public NotificationTypeEnum getNotificationType() {
-		return notificationType;
-	}
-
-	public void setNotificationType(NotificationTypeEnum notificationType) {
-		this.notificationType = notificationType;
-	}
-
-	public PersonalNotificationRoleEnum getOwnerRole() {
-		return ownerRole;
-	}
-
-	public void setOwnerRole(PersonalNotificationRoleEnum ownerRole) {
-		this.ownerRole = ownerRole;
-	}
-
-	public Long getOwnerId() {
-		return ownerId;
-	}
-
-	public void setOwnerId(Long ownerId) {
-		this.ownerId = ownerId;
-	}
-
-	public Instant getCreatedDate() {
-		return createdDate;
-	}
-
-	public void setCreatedDate(Instant createdDate) {
-		this.createdDate = createdDate;
-	}
-
-	public Instant getReadDate() {
-		return readDate;
-	}
-
-	public void setReadDate(Instant readDate) {
-		this.readDate = readDate;
-	}
-	
-	
-
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/Satisfaction.java b/pamapi/src/main/java/com/pollex/pam/domain/Satisfaction.java
deleted file mode 100644
index 530bc06..0000000
--- a/pamapi/src/main/java/com/pollex/pam/domain/Satisfaction.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package com.pollex.pam.domain;
-
-import java.io.Serializable;
-import java.time.Instant;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-import com.pollex.pam.enums.PersonalNotificationRoleEnum;
-import com.pollex.pam.enums.SatisfactionTypeEnum;
-import org.springframework.data.annotation.CreatedDate;
-import org.springframework.data.annotation.LastModifiedDate;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.pollex.pam.enums.SatisfactionStatusEnum;
-
-@Entity
-@Table(name = "satisfaction")
-public class Satisfaction implements Serializable {
-
-	/**
-	 *
-	 */
-	private static final long serialVersionUID = 1L;
-
-	@Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-
-	@CreatedDate
-    @Column(name = "created_date", updatable = false)
-    @JsonIgnore
-    private Instant createdDate = Instant.now();
-
-    @LastModifiedDate
-    @Column(name = "last_modified_date")
-    @JsonIgnore
-    private Instant lastModifiedDate = Instant.now();
-
-    @Column(name = "customer_id")
-    private Long customerId;
-
-    @Column(name = "agent_no")
-    private String agentNo;
-
-    @Enumerated(EnumType.STRING)
-    @Column(name = "status")
-    private SatisfactionStatusEnum status;
-
-    @Column(name = "score")
-    private Float score;
-
-    @Column(name = "appointment_id")
-    private Long appointmentId;
-
-    @Enumerated(EnumType.STRING)
-    @Column(name = "type")
-    private SatisfactionTypeEnum type;
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public Instant getCreatedDate() {
-		return createdDate;
-	}
-
-	public void setCreatedDate(Instant createdDate) {
-		this.createdDate = createdDate;
-	}
-
-	public Instant getLastModifiedDate() {
-		return lastModifiedDate;
-	}
-
-	public void setLastModifiedDate(Instant lastModifiedDate) {
-		this.lastModifiedDate = lastModifiedDate;
-	}
-
-	public Long getCustomerId() {
-		return customerId;
-	}
-
-	public void setCustomerId(Long customerId) {
-		this.customerId = customerId;
-	}
-
-	public String getAgentNo() {
-		return agentNo;
-	}
-
-	public void setAgentNo(String agentNo) {
-		this.agentNo = agentNo;
-	}
-
-	public SatisfactionStatusEnum getStatus() {
-		return status;
-	}
-
-	public void setStatus(SatisfactionStatusEnum status) {
-		this.status = status;
-	}
-
-	public Float getScore() {
-		return score;
-	}
-
-	public void setScore(Float score) {
-		this.score = score;
-	}
-
-    public Long getAppointmentId() {
-        return appointmentId;
-    }
-
-    public void setAppointmentId(Long appointmentId) {
-        this.appointmentId = appointmentId;
-    }
-
-    public SatisfactionTypeEnum getType() {
-        return type;
-    }
-
-    public void setType(SatisfactionTypeEnum type) {
-        this.type = type;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/User.java b/pamapi/src/main/java/com/pollex/pam/domain/User.java
deleted file mode 100644
index 3be5c1d..0000000
--- a/pamapi/src/main/java/com/pollex/pam/domain/User.java
+++ /dev/null
@@ -1,232 +0,0 @@
-package com.pollex.pam.domain;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.pollex.pam.config.Constants;
-import java.io.Serializable;
-import java.time.Instant;
-import java.util.HashSet;
-import java.util.Locale;
-import java.util.Set;
-import javax.persistence.*;
-import javax.validation.constraints.Email;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Pattern;
-import javax.validation.constraints.Size;
-import org.apache.commons.lang3.StringUtils;
-import org.hibernate.annotations.BatchSize;
-import org.hibernate.annotations.Cache;
-import org.hibernate.annotations.CacheConcurrencyStrategy;
-
-/**
- * A user.
- */
-@Entity
-@Table(name = "jhi_user")
-@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
-public class User extends AbstractAuditingEntity implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
-    @SequenceGenerator(name = "sequenceGenerator")
-    private Long id;
-
-    @NotNull
-    @Pattern(regexp = Constants.LOGIN_REGEX)
-    @Size(min = 1, max = 50)
-    @Column(length = 50, unique = true, nullable = false)
-    private String login;
-
-    @JsonIgnore
-    @NotNull
-    @Size(min = 60, max = 60)
-    @Column(name = "password_hash", length = 60, nullable = false)
-    private String password;
-
-    @Size(max = 50)
-    @Column(name = "first_name", length = 50)
-    private String firstName;
-
-    @Size(max = 50)
-    @Column(name = "last_name", length = 50)
-    private String lastName;
-
-    @Email
-    @Size(min = 5, max = 254)
-    @Column(length = 254, unique = true)
-    private String email;
-
-    @NotNull
-    @Column(nullable = false)
-    private boolean activated = false;
-
-    @Size(min = 2, max = 10)
-    @Column(name = "lang_key", length = 10)
-    private String langKey;
-
-    @Size(max = 256)
-    @Column(name = "image_url", length = 256)
-    private String imageUrl;
-
-    @Size(max = 20)
-    @Column(name = "activation_key", length = 20)
-    @JsonIgnore
-    private String activationKey;
-
-    @Size(max = 20)
-    @Column(name = "reset_key", length = 20)
-    @JsonIgnore
-    private String resetKey;
-
-    @Column(name = "reset_date")
-    private Instant resetDate = null;
-
-    @JsonIgnore
-    @ManyToMany
-    @JoinTable(
-        name = "jhi_user_authority",
-        joinColumns = { @JoinColumn(name = "user_id", referencedColumnName = "id") },
-        inverseJoinColumns = { @JoinColumn(name = "authority_name", referencedColumnName = "name") }
-    )
-    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
-    @BatchSize(size = 20)
-    private Set<Authority> authorities = new HashSet<>();
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getLogin() {
-        return login;
-    }
-
-    // Lowercase the login before saving it in database
-    public void setLogin(String login) {
-        this.login = StringUtils.lowerCase(login, Locale.ENGLISH);
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    public String getFirstName() {
-        return firstName;
-    }
-
-    public void setFirstName(String firstName) {
-        this.firstName = firstName;
-    }
-
-    public String getLastName() {
-        return lastName;
-    }
-
-    public void setLastName(String lastName) {
-        this.lastName = lastName;
-    }
-
-    public String getEmail() {
-        return email;
-    }
-
-    public void setEmail(String email) {
-        this.email = email;
-    }
-
-    public String getImageUrl() {
-        return imageUrl;
-    }
-
-    public void setImageUrl(String imageUrl) {
-        this.imageUrl = imageUrl;
-    }
-
-    public boolean isActivated() {
-        return activated;
-    }
-
-    public void setActivated(boolean activated) {
-        this.activated = activated;
-    }
-
-    public String getActivationKey() {
-        return activationKey;
-    }
-
-    public void setActivationKey(String activationKey) {
-        this.activationKey = activationKey;
-    }
-
-    public String getResetKey() {
-        return resetKey;
-    }
-
-    public void setResetKey(String resetKey) {
-        this.resetKey = resetKey;
-    }
-
-    public Instant getResetDate() {
-        return resetDate;
-    }
-
-    public void setResetDate(Instant resetDate) {
-        this.resetDate = resetDate;
-    }
-
-    public String getLangKey() {
-        return langKey;
-    }
-
-    public void setLangKey(String langKey) {
-        this.langKey = langKey;
-    }
-
-    public Set<Authority> getAuthorities() {
-        return authorities;
-    }
-
-    public void setAuthorities(Set<Authority> authorities) {
-        this.authorities = authorities;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) {
-            return true;
-        }
-        if (!(o instanceof User)) {
-            return false;
-        }
-        return id != null && id.equals(((User) o).id);
-    }
-
-    @Override
-    public int hashCode() {
-        // see https://vladmihalcea.com/how-to-implement-equals-and-hashcode-using-the-jpa-entity-identifier/
-        return getClass().hashCode();
-    }
-
-    // prettier-ignore
-    @Override
-    public String toString() {
-        return "User{" +
-            "login='" + login + '\'' +
-            ", firstName='" + firstName + '\'' +
-            ", lastName='" + lastName + '\'' +
-            ", email='" + email + '\'' +
-            ", imageUrl='" + imageUrl + '\'' +
-            ", activated='" + activated + '\'' +
-            ", langKey='" + langKey + '\'' +
-            ", activationKey='" + activationKey + '\'' +
-            "}";
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/package-info.java b/pamapi/src/main/java/com/pollex/pam/domain/package-info.java
deleted file mode 100644
index bcfa3f9..0000000
--- a/pamapi/src/main/java/com/pollex/pam/domain/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * JPA domain objects.
- */
-package com.pollex.pam.domain;
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/AppointmentStatusEnum.java b/pamapi/src/main/java/com/pollex/pam/enums/AppointmentStatusEnum.java
deleted file mode 100644
index 55d674c..0000000
--- a/pamapi/src/main/java/com/pollex/pam/enums/AppointmentStatusEnum.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.pollex.pam.enums;
-
-public enum AppointmentStatusEnum {
-    AVAILABLE,
-    DELETED
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/ConsultantDetailEnum.java b/pamapi/src/main/java/com/pollex/pam/enums/ConsultantDetailEnum.java
deleted file mode 100644
index 331dd27..0000000
--- a/pamapi/src/main/java/com/pollex/pam/enums/ConsultantDetailEnum.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.pollex.pam.enums;
-
-public enum ConsultantDetailEnum {
-    ID("ConsultantId"),
-    NAME("ConsultantName"),
-    AGENT_NO("ConsultantAgentNo");
-
-    private final String value;
-
-    ConsultantDetailEnum(String value) {
-        this.value = value;
-    }
-
-    public String getValue() {
-        return value;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/ContactStatusEnum.java b/pamapi/src/main/java/com/pollex/pam/enums/ContactStatusEnum.java
deleted file mode 100644
index 934a167..0000000
--- a/pamapi/src/main/java/com/pollex/pam/enums/ContactStatusEnum.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.pollex.pam.enums;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public enum ContactStatusEnum {
-    @JsonProperty("picked")
-    PICKED,
-
-    @JsonProperty("reserved")
-    RESERVED,
-
-    @JsonProperty("contacted")
-    CONTACTED,
-    
-    @JsonProperty("done")
-    DONE,
-    
-    @JsonProperty("closed")
-    CLOSED,
-    
-    @JsonProperty("cancel")
-    CANCEL
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/CustomerDetailEnum.java b/pamapi/src/main/java/com/pollex/pam/enums/CustomerDetailEnum.java
deleted file mode 100644
index aa56703..0000000
--- a/pamapi/src/main/java/com/pollex/pam/enums/CustomerDetailEnum.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.pollex.pam.enums;
-
-public enum CustomerDetailEnum {
-    DB_ID("CustomerDBId");
-
-    private final String value;
-
-    CustomerDetailEnum(String value) {
-        this.value = value;
-    }
-
-    public String getValue() {
-        return value;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/GenderEnum.java b/pamapi/src/main/java/com/pollex/pam/enums/GenderEnum.java
deleted file mode 100644
index 0bcc63f..0000000
--- a/pamapi/src/main/java/com/pollex/pam/enums/GenderEnum.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.pollex.pam.enums;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public enum GenderEnum {
-
-    @JsonProperty("male")
-    MALE,
-
-    @JsonProperty("female")
-    FEMALE;
-
-    @JsonCreator
-    public static GenderEnum forName(String name) {
-        for(GenderEnum c: values()) {
-            if(c.name().equals(name.toUpperCase())) {
-                return c;
-            }
-        }
-
-        return null;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/InterviewRecordStatusEnum.java b/pamapi/src/main/java/com/pollex/pam/enums/InterviewRecordStatusEnum.java
deleted file mode 100644
index 9bc0ee8..0000000
--- a/pamapi/src/main/java/com/pollex/pam/enums/InterviewRecordStatusEnum.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.pollex.pam.enums;
-
-public enum InterviewRecordStatusEnum {
-	AVAILABLE,
-	DELETED
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/LoginMethod.java b/pamapi/src/main/java/com/pollex/pam/enums/LoginMethod.java
deleted file mode 100644
index 836e852..0000000
--- a/pamapi/src/main/java/com/pollex/pam/enums/LoginMethod.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.pollex.pam.enums;
-
-public enum LoginMethod {
-    OTP,
-    E_SERVICE
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/LoginResult.java b/pamapi/src/main/java/com/pollex/pam/enums/LoginResult.java
deleted file mode 100644
index 562700d..0000000
--- a/pamapi/src/main/java/com/pollex/pam/enums/LoginResult.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.pollex.pam.enums;
-
-public enum LoginResult {
-    SUCCESS,
-    FAIL
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/NotificationTypeEnum.java b/pamapi/src/main/java/com/pollex/pam/enums/NotificationTypeEnum.java
deleted file mode 100644
index a14a84d..0000000
--- a/pamapi/src/main/java/com/pollex/pam/enums/NotificationTypeEnum.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.pollex.pam.enums;
-
-public enum NotificationTypeEnum {
-	SYSTEM,
-	ACTIVITY
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/OtpLoginTypeEnum.java b/pamapi/src/main/java/com/pollex/pam/enums/OtpLoginTypeEnum.java
deleted file mode 100644
index 43635cd..0000000
--- a/pamapi/src/main/java/com/pollex/pam/enums/OtpLoginTypeEnum.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.pollex.pam.enums;
-
-public enum OtpLoginTypeEnum {
-    SMS,
-    EMAIL
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/OtpTmpStatusEnum.java b/pamapi/src/main/java/com/pollex/pam/enums/OtpTmpStatusEnum.java
deleted file mode 100644
index b48d88e..0000000
--- a/pamapi/src/main/java/com/pollex/pam/enums/OtpTmpStatusEnum.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.pollex.pam.enums;
-
-public enum OtpTmpStatusEnum {
-	UNVERIFIED,
-    VERRIFIED
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/PersonalNotificationRoleEnum.java b/pamapi/src/main/java/com/pollex/pam/enums/PersonalNotificationRoleEnum.java
deleted file mode 100644
index 0f063c2..0000000
--- a/pamapi/src/main/java/com/pollex/pam/enums/PersonalNotificationRoleEnum.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.pollex.pam.enums;
-
-public enum PersonalNotificationRoleEnum {
-	CUSTOMER,
-	CONSULTANT
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/SatisfactionStatusEnum.java b/pamapi/src/main/java/com/pollex/pam/enums/SatisfactionStatusEnum.java
deleted file mode 100644
index 0b708e6..0000000
--- a/pamapi/src/main/java/com/pollex/pam/enums/SatisfactionStatusEnum.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.pollex.pam.enums;
-
-public enum SatisfactionStatusEnum {
-	UNFILLED,
-	FILLED
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/SatisfactionTypeEnum.java b/pamapi/src/main/java/com/pollex/pam/enums/SatisfactionTypeEnum.java
deleted file mode 100644
index a15dfc0..0000000
--- a/pamapi/src/main/java/com/pollex/pam/enums/SatisfactionTypeEnum.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.pollex.pam.enums;
-
-public enum SatisfactionTypeEnum {
-    APPOINTMENT,        // 撠“�����遛��漲
-    SYSTEM              // 撠像���遛��漲
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/SendEmailMsgMethod.java b/pamapi/src/main/java/com/pollex/pam/enums/SendEmailMsgMethod.java
deleted file mode 100644
index 42a10ce..0000000
--- a/pamapi/src/main/java/com/pollex/pam/enums/SendEmailMsgMethod.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.pollex.pam.enums;
-
-public enum SendEmailMsgMethod {
-    PAM_EMAIL_SERVICE,
-    POLLEX_GMAIL
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentClosedInfoRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentClosedInfoRepository.java
deleted file mode 100644
index b5d23ad..0000000
--- a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentClosedInfoRepository.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.pollex.pam.repository;
-
-import java.util.Optional;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import com.pollex.pam.domain.AppointmentClosedInfo;
-
-@Repository
-public interface AppointmentClosedInfoRepository extends JpaRepository<AppointmentClosedInfo, Long>{
-
-	Optional<AppointmentClosedInfo> findByAppointmentId(Long apId);
-
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentCustomerViewRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentCustomerViewRepository.java
deleted file mode 100644
index 61b5a04..0000000
--- a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentCustomerViewRepository.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.pollex.pam.repository;
-
-import java.util.List;
-
-import com.pollex.pam.domain.Appointment;
-import com.pollex.pam.enums.AppointmentStatusEnum;
-import com.pollex.pam.enums.ContactStatusEnum;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import com.pollex.pam.domain.AppointmentCustomerView;
-
-@Repository
-public interface AppointmentCustomerViewRepository extends JpaRepository<AppointmentCustomerView, Long>{
-	List<AppointmentCustomerView> findByAgentNo(String agentNo);
-    List<AppointmentCustomerView> findByAgentNoAndCustomerId(String agentNo, Long customerId);
-    List<AppointmentCustomerView> findAllByCommunicateStatusAndStatus(ContactStatusEnum contactStatus, AppointmentStatusEnum status);
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentExpiringNotifyRecordRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentExpiringNotifyRecordRepository.java
deleted file mode 100644
index 61a559a..0000000
--- a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentExpiringNotifyRecordRepository.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.pollex.pam.repository;
-
-import com.pollex.pam.domain.AppointmentExpiringNotifyRecord;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-@Repository
-public interface AppointmentExpiringNotifyRecordRepository extends JpaRepository<AppointmentExpiringNotifyRecord, Long> {
-    List<AppointmentExpiringNotifyRecord> findAllByAppointmentId(Long appointmentId);
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentMemoRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentMemoRepository.java
deleted file mode 100644
index 1b14cc7..0000000
--- a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentMemoRepository.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.pollex.pam.repository;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import com.pollex.pam.domain.AppointmentMemo;
-
-@Repository
-public interface AppointmentMemoRepository extends JpaRepository<AppointmentMemo, Long>{
-
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentNoticeLogRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentNoticeLogRepository.java
deleted file mode 100644
index e939258..0000000
--- a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentNoticeLogRepository.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.pollex.pam.repository;
-
-import java.util.List;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import com.pollex.pam.domain.AppointmentNoticeLog;
-
-@Repository
-public interface AppointmentNoticeLogRepository extends JpaRepository<AppointmentNoticeLog, Long>{
-
-	List<AppointmentNoticeLog> findByAppointmentId(Long appointmentId);
-
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentRepository.java
deleted file mode 100644
index fe01955..0000000
--- a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentRepository.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.pollex.pam.repository;
-
-import java.util.List;
-import java.util.Optional;
-
-import com.pollex.pam.enums.AppointmentStatusEnum;
-import com.pollex.pam.enums.ContactStatusEnum;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import com.pollex.pam.domain.Appointment;
-
-@Repository
-public interface AppointmentRepository extends JpaRepository<Appointment, Long>{
-
-	List<Appointment> findByAgentNo(String agentNo);
-
-    List<Appointment> findByAgentNoAndCustomerId(String agentNo, Long customerId);
-
-    Optional<Appointment> findTopByAgentNoAndCustomerIdOrderByAppointmentDateDesc(String agentNo, Long customerId);
-
-    List<Appointment> findAllByCommunicateStatusAndStatus(ContactStatusEnum contactStatus, AppointmentStatusEnum status);
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/AuthorityRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/AuthorityRepository.java
deleted file mode 100644
index 111c063..0000000
--- a/pamapi/src/main/java/com/pollex/pam/repository/AuthorityRepository.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.pollex.pam.repository;
-
-import com.pollex.pam.domain.Authority;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-/**
- * Spring Data JPA repository for the {@link Authority} entity.
- */
-public interface AuthorityRepository extends JpaRepository<Authority, String> {}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/ConsultantRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/ConsultantRepository.java
deleted file mode 100644
index af244ab..0000000
--- a/pamapi/src/main/java/com/pollex/pam/repository/ConsultantRepository.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.pollex.pam.repository;
-
-import com.pollex.pam.domain.Consultant;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-import java.util.Optional;
-
-@Repository
-public interface ConsultantRepository extends JpaRepository<Consultant, Long>, JpaSpecificationExecutor<Consultant> {
-    Optional<Consultant> findOneByAgentNo(String agentNo);
-    List<Consultant> findAllByRecommendIsTrue();
-    List<Consultant> findAllByAgentNoIn(List<String> agentNoList);
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/CustomerFavoriteConsultantRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/CustomerFavoriteConsultantRepository.java
deleted file mode 100644
index e61c4df..0000000
--- a/pamapi/src/main/java/com/pollex/pam/repository/CustomerFavoriteConsultantRepository.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.pollex.pam.repository;
-
-import com.pollex.pam.domain.Consultant;
-import com.pollex.pam.domain.CustomerFavoriteConsultant;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-import java.util.Optional;
-
-@Repository
-public interface CustomerFavoriteConsultantRepository extends JpaRepository<CustomerFavoriteConsultant, Long> {
-    List<CustomerFavoriteConsultant> findAllByCustomerId(Long id);
-    Optional<CustomerFavoriteConsultant> findOneByCustomerIdAndConsultant(Long customerId, Consultant consultant);
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/CustomerRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/CustomerRepository.java
deleted file mode 100644
index e4ff8ee..0000000
--- a/pamapi/src/main/java/com/pollex/pam/repository/CustomerRepository.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.pollex.pam.repository;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import com.pollex.pam.domain.Customer;
-
-import java.util.List;
-import java.util.Optional;
-
-@Repository
-public interface CustomerRepository extends JpaRepository<Customer, Long>{
-	
-	default Optional<Customer> findOneByEmailEqualsOrPhoneEquals(String emailOrEmail) {
-		return this.findOneByEmailEqualsOrPhoneEquals(emailOrEmail, emailOrEmail);
-	}
-	
-    Optional<Customer> findOneByEmailEqualsOrPhoneEquals(String email, String phone);
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/InterviewRecordRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/InterviewRecordRepository.java
deleted file mode 100644
index 1b2f8d4..0000000
--- a/pamapi/src/main/java/com/pollex/pam/repository/InterviewRecordRepository.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.pollex.pam.repository;
-
-import java.util.List;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import com.pollex.pam.domain.InterviewRecord;
-import com.pollex.pam.enums.InterviewRecordStatusEnum;
-
-@Repository
-public interface InterviewRecordRepository extends JpaRepository<InterviewRecord, Long>{
-
-	List<InterviewRecord> findByAppointmentId(Long appointmentId);
-
-	List<InterviewRecord> findByAppointmentIdAndStatus(Long appointmentId, InterviewRecordStatusEnum status);
-
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/LoginRecordRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/LoginRecordRepository.java
deleted file mode 100644
index 6d8f3ab..0000000
--- a/pamapi/src/main/java/com/pollex/pam/repository/LoginRecordRepository.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.pollex.pam.repository;
-
-import com.pollex.pam.domain.LoginRecord;
-import com.pollex.pam.enums.LoginResult;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import java.util.Optional;
-
-@Repository
-public interface LoginRecordRepository extends JpaRepository<LoginRecord, Long> {
-    Optional<LoginRecord> findTopByAccountAndResultOrderByLoginDateDesc(String account, LoginResult loginResult);
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/OtpTmpRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/OtpTmpRepository.java
deleted file mode 100644
index 7b49c10..0000000
--- a/pamapi/src/main/java/com/pollex/pam/repository/OtpTmpRepository.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.pollex.pam.repository;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import com.pollex.pam.domain.OtpTmp;
-
-@Repository
-public interface OtpTmpRepository extends JpaRepository<OtpTmp, Long>{
-
-	OtpTmp findByAccountAndIndexKey(String account, String indexKey);
-
-	OtpTmp findByAccount(String account);
-
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/PersonalNotificationRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/PersonalNotificationRepository.java
deleted file mode 100644
index e6e4027..0000000
--- a/pamapi/src/main/java/com/pollex/pam/repository/PersonalNotificationRepository.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.pollex.pam.repository;
-
-import java.util.List;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import com.pollex.pam.domain.PersonalNotification;
-import com.pollex.pam.enums.PersonalNotificationRoleEnum;
-
-@Repository
-public interface PersonalNotificationRepository extends JpaRepository<PersonalNotification, Long>{
-
-	List<PersonalNotification> findAllByOwnerRoleAndOwnerId(PersonalNotificationRoleEnum role, Long ownerId);
-
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/SatisfactionRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/SatisfactionRepository.java
deleted file mode 100644
index fa37237..0000000
--- a/pamapi/src/main/java/com/pollex/pam/repository/SatisfactionRepository.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.pollex.pam.repository;
-
-import java.util.List;
-import java.util.Optional;
-
-import com.pollex.pam.enums.SatisfactionStatusEnum;
-import com.pollex.pam.enums.SatisfactionTypeEnum;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-import org.springframework.stereotype.Repository;
-
-import com.pollex.pam.domain.Satisfaction;
-
-@Repository
-public interface SatisfactionRepository extends JpaRepository<Satisfaction, Long>{
-
-	List<Satisfaction> findByAgentNoAndType(String agentNo, SatisfactionTypeEnum type);
-
-	List<Satisfaction> findByCustomerId(Long customerId);
-
-	Optional<Satisfaction> findOneByAppointmentIdAndType(Long appointmentId, SatisfactionTypeEnum type);
-
-    List<Satisfaction> findAllByStatusAndType(SatisfactionStatusEnum status, SatisfactionTypeEnum type);
-
-	@Query(value = "SELECT avg(score) FROM satisfaction where type='APPOINTMENT'"
-            + " and agent_no=:agent_no"
-			+ " and score is not null"
-			, nativeQuery = true)
-	Optional<Float> getAgentScoreAvg(@Param("agent_no") String agentNo);
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/UserRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/UserRepository.java
deleted file mode 100644
index f4407cf..0000000
--- a/pamapi/src/main/java/com/pollex/pam/repository/UserRepository.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.pollex.pam.repository;
-
-import com.pollex.pam.domain.User;
-import java.time.Instant;
-import java.util.List;
-import java.util.Optional;
-import org.springframework.cache.annotation.Cacheable;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.repository.EntityGraph;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-/**
- * Spring Data JPA repository for the {@link User} entity.
- */
-@Repository
-public interface UserRepository extends JpaRepository<User, Long> {
-    String USERS_BY_LOGIN_CACHE = "usersByLogin";
-
-    String USERS_BY_EMAIL_CACHE = "usersByEmail";
-
-    Optional<User> findOneByActivationKey(String activationKey);
-
-    List<User> findAllByActivatedIsFalseAndActivationKeyIsNotNullAndCreatedDateBefore(Instant dateTime);
-
-    Optional<User> findOneByResetKey(String resetKey);
-
-    Optional<User> findOneByEmailIgnoreCase(String email);
-
-    Optional<User> findOneByLogin(String login);
-
-    @EntityGraph(attributePaths = "authorities")
-    @Cacheable(cacheNames = USERS_BY_LOGIN_CACHE)
-    Optional<User> findOneWithAuthoritiesByLogin(String login);
-
-    @EntityGraph(attributePaths = "authorities")
-    @Cacheable(cacheNames = USERS_BY_EMAIL_CACHE)
-    Optional<User> findOneWithAuthoritiesByEmailIgnoreCase(String email);
-
-    Page<User> findAllByIdNotNullAndActivatedIsTrue(Pageable pageable);
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/package-info.java b/pamapi/src/main/java/com/pollex/pam/repository/package-info.java
deleted file mode 100644
index 44ecf27..0000000
--- a/pamapi/src/main/java/com/pollex/pam/repository/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * Spring Data JPA repositories.
- */
-package com.pollex.pam.repository;
diff --git a/pamapi/src/main/java/com/pollex/pam/security/AuthoritiesConstants.java b/pamapi/src/main/java/com/pollex/pam/security/AuthoritiesConstants.java
deleted file mode 100644
index b67d92d..0000000
--- a/pamapi/src/main/java/com/pollex/pam/security/AuthoritiesConstants.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.pollex.pam.security;
-
-/**
- * Constants for Spring Security authorities.
- */
-public final class AuthoritiesConstants {
-
-    public static final String ADMIN = "ROLE_ADMIN";
-
-    public static final String USER = "ROLE_USER";
-
-    public static final String ANONYMOUS = "ROLE_ANONYMOUS";
-
-    private AuthoritiesConstants() {}
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/security/DomainUserDetailsService.java b/pamapi/src/main/java/com/pollex/pam/security/DomainUserDetailsService.java
index e8a35fa..91b4da8 100644
--- a/pamapi/src/main/java/com/pollex/pam/security/DomainUserDetailsService.java
+++ b/pamapi/src/main/java/com/pollex/pam/security/DomainUserDetailsService.java
@@ -1,7 +1,7 @@
 package com.pollex.pam.security;
 
-import com.pollex.pam.domain.User;
-import com.pollex.pam.repository.UserRepository;
+import com.pollex.pam.business.domain.User;
+import com.pollex.pam.business.repository.UserRepository;
 import java.util.*;
 import java.util.stream.Collectors;
 import org.hibernate.validator.internal.constraintvalidators.hv.EmailValidator;
diff --git a/pamapi/src/main/java/com/pollex/pam/security/SecurityUtils.java b/pamapi/src/main/java/com/pollex/pam/security/SecurityUtils.java
deleted file mode 100644
index 787c1f3..0000000
--- a/pamapi/src/main/java/com/pollex/pam/security/SecurityUtils.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package com.pollex.pam.security;
-
-import java.util.Arrays;
-import java.util.Map;
-import java.util.Optional;
-import java.util.stream.Stream;
-
-import com.pollex.pam.enums.ConsultantDetailEnum;
-import com.pollex.pam.enums.CustomerDetailEnum;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.context.SecurityContext;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.core.userdetails.UserDetails;
-
-/**
- * Utility class for Spring Security.
- */
-public final class SecurityUtils {
-
-    private SecurityUtils() {}
-
-    /**
-     * Get the login of the current user.
-     *
-     * @return the login of the current user.
-     */
-    public static Optional<String> getCurrentUserLogin() {
-        SecurityContext securityContext = SecurityContextHolder.getContext();
-        return Optional.ofNullable(extractPrincipal(securityContext.getAuthentication()));
-    }
-
-    private static String extractPrincipal(Authentication authentication) {
-        if (authentication == null) {
-            return null;
-        } else if (authentication.getPrincipal() instanceof UserDetails) {
-            UserDetails springSecurityUser = (UserDetails) authentication.getPrincipal();
-            return springSecurityUser.getUsername();
-        } else if (authentication.getPrincipal() instanceof String) {
-            return (String) authentication.getPrincipal();
-        }
-        return null;
-    }
-
-    /**
-     * Get the JWT of the current user.
-     *
-     * @return the JWT of the current user.
-     */
-    public static Optional<String> getCurrentUserJWT() {
-        SecurityContext securityContext = SecurityContextHolder.getContext();
-        return Optional
-            .ofNullable(securityContext.getAuthentication())
-            .filter(authentication -> authentication.getCredentials() instanceof String)
-            .map(authentication -> (String) authentication.getCredentials());
-    }
-
-    /**
-     * Check if a user is authenticated.
-     *
-     * @return true if the user is authenticated, false otherwise.
-     */
-    public static boolean isAuthenticated() {
-        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
-        return authentication != null && getAuthorities(authentication).noneMatch(AuthoritiesConstants.ANONYMOUS::equals);
-    }
-
-    /**
-     * Checks if the current user has any of the authorities.
-     *
-     * @param authorities the authorities to check.
-     * @return true if the current user has any of the authorities, false otherwise.
-     */
-    public static boolean hasCurrentUserAnyOfAuthorities(String... authorities) {
-        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
-        return (
-            authentication != null && getAuthorities(authentication).anyMatch(authority -> Arrays.asList(authorities).contains(authority))
-        );
-    }
-
-    /**
-     * Checks if the current user has none of the authorities.
-     *
-     * @param authorities the authorities to check.
-     * @return true if the current user has none of the authorities, false otherwise.
-     */
-    public static boolean hasCurrentUserNoneOfAuthorities(String... authorities) {
-        return !hasCurrentUserAnyOfAuthorities(authorities);
-    }
-
-    /**
-     * Checks if the current user has a specific authority.
-     *
-     * @param authority the authority to check.
-     * @return true if the current user has the authority, false otherwise.
-     */
-    public static boolean hasCurrentUserThisAuthority(String authority) {
-        return hasCurrentUserAnyOfAuthorities(authority);
-    }
-
-    private static Stream<String> getAuthorities(Authentication authentication) {
-        return authentication.getAuthorities().stream().map(GrantedAuthority::getAuthority);
-    }
-
-    public static String getAgentNo() {
-        Map<String, String> userDetails = getCurrentUserDetails();
-        return userDetails.get(ConsultantDetailEnum.AGENT_NO.getValue());
-    }
-
-    public static Long getCustomerDBId() {
-    	Map<String, String> userDetails = getCurrentUserDetails();
-    	return Long.parseLong(userDetails.get(CustomerDetailEnum.DB_ID.getValue()));
-    }
-
-    public static Map<String, String> getCurrentUserDetails() {
-   	 SecurityContext securityContext = SecurityContextHolder.getContext();
-   	 if(securityContext.getAuthentication()==null ||
-   			 securityContext.getAuthentication().getDetails() ==null) {
-   		 return null;
-   	 }
-   	 return (Map<String, String>) securityContext.getAuthentication().getDetails();
-   }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/security/SpringSecurityAuditorAware.java b/pamapi/src/main/java/com/pollex/pam/security/SpringSecurityAuditorAware.java
index bd4efb7..66c8c8b 100644
--- a/pamapi/src/main/java/com/pollex/pam/security/SpringSecurityAuditorAware.java
+++ b/pamapi/src/main/java/com/pollex/pam/security/SpringSecurityAuditorAware.java
@@ -1,7 +1,9 @@
 package com.pollex.pam.security;
 
-import com.pollex.pam.config.Constants;
+import com.pollex.pam.business.config.Constants;
 import java.util.Optional;
+
+import com.pollex.pam.business.security.SecurityUtils;
 import org.springframework.data.domain.AuditorAware;
 import org.springframework.stereotype.Component;
 
diff --git a/pamapi/src/main/java/com/pollex/pam/security/provider/CustomAuthenticationProvider.java b/pamapi/src/main/java/com/pollex/pam/security/provider/CustomAuthenticationProvider.java
index 079a473..d4cea92 100644
--- a/pamapi/src/main/java/com/pollex/pam/security/provider/CustomAuthenticationProvider.java
+++ b/pamapi/src/main/java/com/pollex/pam/security/provider/CustomAuthenticationProvider.java
@@ -1,7 +1,8 @@
 package com.pollex.pam.security.provider;
 
+import com.pollex.pam.business.security.provider.EServiceAuthenticationProvider;
 import com.pollex.pam.config.ApplicationProperties;
-import com.pollex.pam.security.token.EServiceAuthenticationToken;
+import com.pollex.pam.business.security.token.EServiceAuthenticationToken;
 import com.pollex.pam.security.token.OtpAuthenticationToken;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.AbstractAuthenticationToken;
diff --git a/pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java b/pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java
deleted file mode 100644
index 54391f0..0000000
--- a/pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java
+++ /dev/null
@@ -1,149 +0,0 @@
-package com.pollex.pam.security.provider;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.pollex.pam.config.ApplicationProperties;
-import com.pollex.pam.domain.Consultant;
-import com.pollex.pam.enums.ConsultantDetailEnum;
-import com.pollex.pam.repository.ConsultantRepository;
-import com.pollex.pam.security.token.EServiceAuthenticationToken;
-import com.pollex.pam.service.LoginRecordService;
-import com.pollex.pam.service.dto.EServiceResponse;
-import com.pollex.pam.web.rest.errors.EServiceErrorException;
-import org.apache.http.conn.ssl.NoopHostnameVerifier;
-import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.ssl.SSLContexts;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.*;
-import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
-import org.springframework.http.converter.HttpMessageConverter;
-import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.AuthenticationException;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.authority.SimpleGrantedAuthority;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
-import org.springframework.stereotype.Component;
-import org.springframework.web.client.RestTemplate;
-import org.springframework.web.util.UriComponentsBuilder;
-
-import javax.net.ssl.SSLContext;
-import java.security.GeneralSecurityException;
-import java.security.KeyManagementException;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.X509Certificate;
-import java.util.*;
-
-@Component
-public class EServiceAuthenticationProvider {
-
-    private static final String E_SERVICE_LOGIN_SUCCESS_CODE = "true";
-    private static final Logger log = LoggerFactory.getLogger(EServiceAuthenticationProvider.class);
-
-    @Autowired
-    ApplicationProperties applicationProperty;
-
-    @Autowired
-    ConsultantRepository consultantRepository;
-
-    @Autowired
-    LoginRecordService loginRecordService;
-
-    public Authentication authenticate(EServiceAuthenticationToken authenticationToken) throws AuthenticationException {
-        String account = authenticationToken.getPrincipal();
-        String credentials = authenticationToken.getCredentials();
-
-        if(applicationProperty.isMockLogin()){
-            loginRecordService.saveEServiceLoginSuccessRecord(account);
-            return getConsultantToken(account, credentials);
-        }
-
-        try {
-            ResponseEntity<EServiceResponse> responseEntity = loginByEService(account, credentials);
-            if(HttpStatus.OK.equals(responseEntity.getStatusCode())) {
-                EServiceResponse eServiceResponse = responseEntity.getBody();
-                log.debug("eService response = {}", eServiceResponse);
-
-                if(E_SERVICE_LOGIN_SUCCESS_CODE.equals(eServiceResponse.getIssuccess())){
-                    loginRecordService.saveEServiceLoginSuccessRecord(account);
-                    return getConsultantToken(account, credentials);
-                }
-                else {
-                    loginRecordService.saveEServiceLoginFailRecord(account, eServiceResponse.getMsg());
-                    throw new EServiceErrorException(eServiceResponse.getMsg());
-                }
-            }
-
-            throw new RuntimeException("eService http error!, response http status code = " + responseEntity.getStatusCode());
-        } catch (JsonProcessingException e) {
-            throw new RuntimeException("convert to json processing error!");
-        } catch (GeneralSecurityException e) {
-            throw new RuntimeException("General Security SSL error!");
-        }
-    }
-
-    private UsernamePasswordAuthenticationToken getConsultantToken(String account, String credential) {
-        Consultant consultant = consultantRepository.findOneByAgentNo(account).orElseThrow(() -> new UsernameNotFoundException("閰脤“����蒂銝��慦�像�蝟餌絞銝�"));
-
-        List<GrantedAuthority> grantedAuths = Arrays.asList(new SimpleGrantedAuthority("ROLE_USER"));
-        UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(account, credential, grantedAuths);
-
-        Map<String, String> details = new HashMap<>();
-        details.put(ConsultantDetailEnum.ID.getValue(), consultant.getId().toString());
-        details.put(ConsultantDetailEnum.NAME.getValue(), consultant.getName());
-        details.put(ConsultantDetailEnum.AGENT_NO.getValue(), account);
-        authenticationToken.setDetails(details);
-
-        return authenticationToken;
-    }
-
-    private ResponseEntity<EServiceResponse> loginByEService(String account, String paxxword) throws JsonProcessingException, GeneralSecurityException {
-        RestTemplate restTemplate = getTrustAllRestTemplate();
-        settingMessageConvertersToSpecifyType(restTemplate, MediaType.ALL);
-
-        String urlTemplate = UriComponentsBuilder.fromHttpUrl(applicationProperty.geteServiceLoginUrl())
-            .queryParam("func", applicationProperty.geteServiceLoginFunc())
-            .queryParam("id", account)
-            .queryParam("pin", paxxword)
-            .queryParam("pwd", paxxword)
-            .queryParam("sys", applicationProperty.geteServiceLoginSys())
-            .queryParam("transactionId", UUID.randomUUID().toString())
-            .encode().toUriString();
-
-        log.debug("http get loginByEService, url = {}", urlTemplate);
-
-        HttpHeaders headers = new HttpHeaders();
-        headers.setContentType(MediaType.APPLICATION_JSON);
-
-        HttpEntity<String> entity = new HttpEntity<>(headers);
-        return restTemplate.exchange(urlTemplate, HttpMethod.GET, entity, EServiceResponse.class);
-    }
-
-    private RestTemplate getTrustAllRestTemplate() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
-        SSLContext sslContext = SSLContexts.custom()
-            .loadTrustMaterial(null, (X509Certificate[] x509Certs, String s) -> true)
-            .build();
-        SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier());
-        CloseableHttpClient httpClient = HttpClients.custom()
-            .setSSLSocketFactory(csf)
-            .build();
-        HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
-        requestFactory.setHttpClient(httpClient);
-        requestFactory.setConnectTimeout(300000);
-        requestFactory.setReadTimeout(300000);
-        return new RestTemplate(requestFactory);
-    }
-
-    private void settingMessageConvertersToSpecifyType(RestTemplate restTemplate, MediaType mediaType) {
-        List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
-        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
-        converter.setSupportedMediaTypes(Collections.singletonList(mediaType));
-        messageConverters.add(converter);
-        restTemplate.setMessageConverters(messageConverters);
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/security/provider/OtpAuthenticationProvider.java b/pamapi/src/main/java/com/pollex/pam/security/provider/OtpAuthenticationProvider.java
index 3802087..c76937e 100644
--- a/pamapi/src/main/java/com/pollex/pam/security/provider/OtpAuthenticationProvider.java
+++ b/pamapi/src/main/java/com/pollex/pam/security/provider/OtpAuthenticationProvider.java
@@ -1,6 +1,7 @@
 package com.pollex.pam.security.provider;
 
-import com.pollex.pam.web.rest.errors.CustomerNotRegisteredException;
+import com.pollex.pam.business.web.errors.CustomerNotRegisteredException;
+import com.pollex.pam.security.token.OtpAuthenticationToken;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -8,13 +9,12 @@
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.stereotype.Component;
 
-import com.pollex.pam.domain.Customer;
-import com.pollex.pam.repository.CustomerRepository;
-import com.pollex.pam.security.token.OtpAuthenticationToken;
+import com.pollex.pam.business.domain.Customer;
+import com.pollex.pam.business.repository.CustomerRepository;
 import com.pollex.pam.service.CustomerAuthService;
-import com.pollex.pam.service.OtpTmpService;
+import com.pollex.pam.business.service.OtpTmpService;
 import com.pollex.pam.service.OtpUtilService;
-import com.pollex.pam.web.rest.vm.OtpAccount;
+import com.pollex.pam.business.web.vm.OtpAccount;
 
 @Component
 public class OtpAuthenticationProvider {
diff --git a/pamapi/src/main/java/com/pollex/pam/security/token/EServiceAuthenticationToken.java b/pamapi/src/main/java/com/pollex/pam/security/token/EServiceAuthenticationToken.java
deleted file mode 100644
index 6bc8410..0000000
--- a/pamapi/src/main/java/com/pollex/pam/security/token/EServiceAuthenticationToken.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.pollex.pam.security.token;
-
-import org.springframework.security.authentication.AbstractAuthenticationToken;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.SpringSecurityCoreVersion;
-import org.springframework.util.Assert;
-
-import java.util.Collection;
-
-public class EServiceAuthenticationToken extends AbstractAuthenticationToken {
-
-    private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;
-
-    private final String principle;
-    private String credentials;
-
-    public EServiceAuthenticationToken(String principle, String credentials) {
-        super(null);
-        this.principle = principle;
-        this.credentials = credentials;
-        setAuthenticated(false);
-    }
-
-    public EServiceAuthenticationToken(String principle, String credentials, Collection<? extends GrantedAuthority> authorities) {
-        super(authorities);
-        this.principle = principle;
-        this.credentials = credentials;
-        setAuthenticated(true);
-    }
-
-    @Override
-    public String getCredentials() {
-        return credentials;
-    }
-
-    @Override
-    public String getPrincipal() {
-        return principle;
-    }
-
-    @Override
-    public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {
-        Assert.isTrue(!isAuthenticated,
-            "Cannot set this token to trusted - use constructor which takes a GrantedAuthority list instead");
-        super.setAuthenticated(false);
-    }
-
-    @Override
-    public void eraseCredentials() {
-        super.eraseCredentials();
-        this.credentials = null;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/security/token/OtpAuthenticationToken.java b/pamapi/src/main/java/com/pollex/pam/security/token/OtpAuthenticationToken.java
index 9652e9c..a4c450c 100644
--- a/pamapi/src/main/java/com/pollex/pam/security/token/OtpAuthenticationToken.java
+++ b/pamapi/src/main/java/com/pollex/pam/security/token/OtpAuthenticationToken.java
@@ -1,12 +1,9 @@
 package com.pollex.pam.security.token;
 
-import com.pollex.pam.web.rest.vm.OtpAccount;
+import com.pollex.pam.business.web.vm.OtpAccount;
 import org.springframework.security.authentication.AbstractAuthenticationToken;
-import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.SpringSecurityCoreVersion;
 import org.springframework.util.Assert;
-
-import java.util.Collection;
 
 public class OtpAuthenticationToken extends AbstractAuthenticationToken {
 
diff --git a/pamapi/src/main/java/com/pollex/pam/service/AppointmentClosedInfoService.java b/pamapi/src/main/java/com/pollex/pam/service/AppointmentClosedInfoService.java
deleted file mode 100644
index 9931a44..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/AppointmentClosedInfoService.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.pollex.pam.service;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.pollex.pam.domain.AppointmentClosedInfo;
-import com.pollex.pam.repository.AppointmentClosedInfoRepository;
-import com.pollex.pam.web.rest.errors.AppointmentClosedInfoNotFoundException;
-
-@Service
-@Transactional
-public class AppointmentClosedInfoService {
-	
-	@Autowired
-	AppointmentClosedInfoRepository appointmentClosedInfoRepository;
-	
-	public AppointmentClosedInfo findByAppointmentId(Long apId) {
-		return appointmentClosedInfoRepository.findByAppointmentId(apId)
-				.orElseThrow(AppointmentClosedInfoNotFoundException::new);
-	}
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/AppointmentMemoService.java b/pamapi/src/main/java/com/pollex/pam/service/AppointmentMemoService.java
deleted file mode 100644
index 6fdd613..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/AppointmentMemoService.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.pollex.pam.service;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.pollex.pam.domain.Appointment;
-import com.pollex.pam.domain.AppointmentMemo;
-import com.pollex.pam.repository.AppointmentMemoRepository;
-import com.pollex.pam.repository.AppointmentRepository;
-import com.pollex.pam.security.SecurityUtils;
-import com.pollex.pam.service.dto.AppointmentMemoCreateDTO;
-import com.pollex.pam.service.dto.AppointmentMemoUpdateDTO;
-import com.pollex.pam.service.mapper.AppointmentMemoMapper;
-import com.pollex.pam.web.rest.errors.AppointmentMemoNotFoundException;
-import com.pollex.pam.web.rest.errors.AppointmentNotFoundException;
-
-@Service
-@Transactional
-public class AppointmentMemoService {
-	
-	@Autowired
-	AppointmentMemoRepository appointmentMemoRepository;
-	
-	@Autowired
-	AppointmentMemoMapper appointmentMemoMapper;
-	
-	@Autowired
-	AppointmentRepository appointmentRepository;
-
-	public AppointmentMemo create(AppointmentMemoCreateDTO memoDTO) {
-		AppointmentMemo memo = appointmentMemoMapper.toAppointmentMemo(memoDTO);
-		return appointmentMemoRepository.save(memo);
-	}
-
-	public void checkPermission(Long appointmentId) {
-		Appointment appointment = appointmentRepository.findById(appointmentId)
-				.orElseThrow(AppointmentNotFoundException::new);
-		if(!appointment.getAgentNo().equals(SecurityUtils.getAgentNo())) {
-			throw new IllegalAccessError("not have permission");
-		}
-	}
-
-	public AppointmentMemo update(AppointmentMemoUpdateDTO memoDTO) {
-		AppointmentMemo memo = appointmentMemoRepository
-				.findById(memoDTO.getId())
-				.orElseThrow(AppointmentMemoNotFoundException::new);
-		checkPermission(memo.getAppointmentId());
-		appointmentMemoMapper.copyToAppointmentMemo(memoDTO, memo);
-		return appointmentMemoRepository.save(memo);
-	}
-
-	public void delete(Long memoId) {
-		AppointmentMemo memo = appointmentMemoRepository
-				.findById(memoId)
-				.orElseThrow(AppointmentMemoNotFoundException::new);
-		checkPermission(memo.getAppointmentId());
-		appointmentMemoRepository.delete(memo);
-	}
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/AppointmentNoticeLogService.java b/pamapi/src/main/java/com/pollex/pam/service/AppointmentNoticeLogService.java
deleted file mode 100644
index bfb0134..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/AppointmentNoticeLogService.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.pollex.pam.service;
-
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.pollex.pam.domain.AppointmentNoticeLog;
-import com.pollex.pam.repository.AppointmentNoticeLogRepository;
-import com.pollex.pam.service.dto.AppointmentNoticeSendDTO;
-import com.pollex.pam.service.mapper.AppointmentNoticeSendMapper;
-
-@Service
-@Transactional
-public class AppointmentNoticeLogService {
-	
-	@Autowired
-	AppointmentNoticeLogRepository appointmentNoticeLogRepository;
-	
-	@Autowired
-	AppointmentNoticeSendMapper appointmentNoticeSendMapper;
-
-	public AppointmentNoticeLog create(AppointmentNoticeSendDTO noticeSendDTO) {
-		AppointmentNoticeLog appointmentNoticeLog = 
-				appointmentNoticeSendMapper.toAppointmentNoticeLog(noticeSendDTO);
-		return appointmentNoticeLogRepository.save(appointmentNoticeLog);
-	}
-	
-	public List<AppointmentNoticeLog> findByAppointmentId(Long appointmentId){
-		return appointmentNoticeLogRepository.findByAppointmentId(appointmentId);
-	}
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java b/pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java
deleted file mode 100644
index fe55f38..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java
+++ /dev/null
@@ -1,319 +0,0 @@
-package com.pollex.pam.service;
-
-import java.time.Instant;
-import java.time.LocalDate;
-import java.time.ZoneId;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.stream.Collectors;
-
-import com.pollex.pam.appointment.process.AppointmentProcess;
-import com.pollex.pam.config.ApplicationProperties;
-import com.pollex.pam.config.Constants;
-import com.pollex.pam.enums.SatisfactionTypeEnum;
-import com.pollex.pam.service.dto.*;
-import com.pollex.pam.web.rest.errors.SendEmailFailException;
-import com.pollex.pam.web.rest.errors.SendSMSFailException;
-import io.jsonwebtoken.lang.Assert;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.pollex.pam.domain.Appointment;
-import com.pollex.pam.domain.AppointmentCustomerView;
-import com.pollex.pam.enums.ContactStatusEnum;
-import com.pollex.pam.enums.InterviewRecordStatusEnum;
-import com.pollex.pam.repository.AppointmentCustomerViewRepository;
-import com.pollex.pam.repository.AppointmentRepository;
-import com.pollex.pam.security.SecurityUtils;
-import com.pollex.pam.service.mapper.AppointmentCustomerViewMapper;
-import com.pollex.pam.service.mapper.AppointmentDTOMapper;
-import com.pollex.pam.web.rest.errors.AppointmentNotFoundException;
-import org.springframework.util.StringUtils;
-import org.thymeleaf.context.Context;
-import org.thymeleaf.spring5.SpringTemplateEngine;
-
-import static com.pollex.pam.enums.AppointmentStatusEnum.AVAILABLE;
-import static com.pollex.pam.enums.AppointmentStatusEnum.DELETED;
-
-@Service
-@Transactional
-public class AppointmentService {
-
-    private static final Logger log = LoggerFactory.getLogger(AppointmentService.class);
-
-    private static final String NOTIFY_EMAIL_SUBJECT = "靽���像�蝟餌絞�嚗���";
-
-    @Autowired
-	AppointmentRepository appointmentRepository;
-
-	@Autowired
-	AppointmentDTOMapper appointmentDTOMapper;
-
-	@Autowired
-	ConsultantService consultantService;
-
-	@Autowired
-	AppointmentCustomerViewMapper appointmentCustomerViewMapper;
-
-	@Autowired
-	AppointmentCustomerViewRepository appointmentCustomerViewRepository;
-
-	@Autowired
-	SatisfactionService satisfactionService;
-
-    @Autowired
-    SendMsgService sendMsgService;
-
-    @Autowired
-    ApplicationProperties applicationProperties;
-
-    @Autowired
-    SpringTemplateEngine springTemplateEngine;
-
-    @Autowired
-    InterviewRecordService interviewRecordService;
-
-    @Autowired
-    AppointmentProcess abstractAppointmentProcess;
-
-    @Autowired
-    PersonalNotificationService personalNotificationService;
-
-	public Appointment customerCreateAppointment(AppointmentCreateDTO appointmentCreateDTO) {
-		Appointment appointment = appointmentDTOMapper.toAppointment(appointmentCreateDTO);
-        appointment.setStatus(AVAILABLE);
-		appointment.setCustomerId(SecurityUtils.getCustomerDBId());
-		appointment.setCommunicateStatus(ContactStatusEnum.RESERVED);
-		return appointmentRepository.save(appointment);
-	}
-
-    public Appointment updateAppointment(AppointmentUpdateDTO updateAppointmentDTO) {
-        Appointment appointment = appointmentRepository.findById(updateAppointmentDTO.getId()).get();
-        BeanUtils.copyProperties(updateAppointmentDTO, appointment);
-        appointment.setPhone(updateAppointmentDTO.getPhone());
-        appointment.setEmail(updateAppointmentDTO.getEmail());
-        appointment.setContactType(updateAppointmentDTO.getContactType());
-        appointment.setGender(updateAppointmentDTO.getGender());
-        appointment.setAge(updateAppointmentDTO.getAge());
-        appointment.setJob(updateAppointmentDTO.getJob());
-        appointment.setRequirement(updateAppointmentDTO.getRequirement());
-        appointment.setHopeContactTime(updateAppointmentDTO.getHopeContactTime());
-        appointment.setOtherRequirement(updateAppointmentDTO.getOtherRequirement());
-        appointment.setLastModifiedDate(Instant.now());
-
-        return appointmentRepository.save(appointment);
-    }
-
-    public void markAppointmentDeleted(Long appointmentId) {
-        Appointment appointment = appointmentRepository.findById(appointmentId).get();
-        appointment.setStatus(DELETED);
-        appointment.setLastModifiedDate(Instant.now());
-        appointment.setCommunicateStatus(ContactStatusEnum.CANCEL);
-        appointmentRepository.save(appointment);
-        personalNotificationService.createMarkAppointmentDeletedToConsultant(appointment);
-
-    }
-
-	public List<Appointment> findByAgentNo(String agentNo) {
-		return appointmentRepository.findByAgentNo(agentNo);
-	}
-
-	public Appointment markAsContacted(Long appointmentId) {
-		Appointment appointment = appointmentRepository.findById(appointmentId).get();
-		appointment.setCommunicateStatus(ContactStatusEnum.CONTACTED);
-        appointment.setContactTime(Instant.now());
-        appointment.setLastModifiedDate(Instant.now());
-        return appointmentRepository.save(appointment);
-	}
-
-	public AppointmentCustomerViewDTO getAppointmentDetail(Long appointmentId) {
-		AppointmentCustomerView appointment = appointmentCustomerViewRepository.findById(appointmentId)
-				.orElseThrow(AppointmentNotFoundException::new);
-
-        AppointmentCustomerViewDTO dto = appointmentCustomerViewMapper.toAppointmentCustomerViewDTO(appointment);
-        setSatisfactionScore(dto, appointmentId);
-//        setInterviewRecordDTO(dto);
-		return dto;
-	}
-
-    public void setInterviewRecordDTO(AppointmentCustomerViewDTO dto) {
-    	List<InterviewRecordDTO> interviewRecords = interviewRecordService.findByAppointmentIdAndStatus(dto.getId(), InterviewRecordStatusEnum.AVAILABLE);
-    	dto.setInterviewRecordDTOs(interviewRecords);
-    }
-
-	public List<AppointmentCustomerViewDTO> getConsultantAvailableAppointments(String agentNo) {
-        return appointmentCustomerViewRepository.findByAgentNo(agentNo).stream()
-            .filter(appointment -> appointment.getStatus() == AVAILABLE)
-            .map(appointmentCustomerView -> {
-                AppointmentCustomerViewDTO dto = appointmentCustomerViewMapper.toAppointmentCustomerViewDTO(appointmentCustomerView);
-                setSatisfactionScore(dto, appointmentCustomerView.getId());
-                return dto;
-            })
-            .collect(Collectors.toList());
-    }
-
-    public void setSatisfactionScore(AppointmentCustomerViewDTO dto, Long appointmentId) {
-        satisfactionService.getByAppointmentIdAndType(appointmentId, SatisfactionTypeEnum.APPOINTMENT).ifPresent(satisfaction -> {
-            dto.setSatisfactionScore(satisfaction.getScore());
-        });
-    }
-
-    public List<AppointmentCustomerView> findAvailableByAgentNoAndCustomerId(String agentNo, Long customerId) {
-        return appointmentCustomerViewRepository.findByAgentNoAndCustomerId(agentNo, customerId)
-            .stream()
-            .filter(appointmentCustomerView -> appointmentCustomerView.getStatus() == AVAILABLE)
-            .collect(Collectors.toList());
-    }
-
-    public Optional<Appointment> findLatestAppointmentByAgentNoAndCustomerId(String agentNo, Long customerId) {
-        return appointmentRepository.findTopByAgentNoAndCustomerIdOrderByAppointmentDateDesc(agentNo, customerId);
-    }
-
-    public void recordConsultantReadTime(Long appointmentId) {
-        Appointment appointment = appointmentRepository.findById(appointmentId).get();
-
-        if(appointment.getConsultantReadTime() == null) {
-            appointment.setConsultantReadTime(Instant.now());
-            appointmentRepository.save(appointment);
-        }
-        else {
-            log.debug("this appointment was read, read time = {}", appointment.getConsultantReadTime());
-        }
-    }
-
-    public void recordAllAppointmentsView(String agentNo) {
-        List<Appointment> consultantNotViewAppointments = findByAgentNo(agentNo)
-            .stream()
-            .filter(appointment -> Objects.isNull(appointment.getConsultantViewTime()))
-            .collect(Collectors.toList());
-
-        consultantNotViewAppointments.forEach(appointment -> appointment.setConsultantViewTime(Instant.now()));
-        appointmentRepository.saveAll(consultantNotViewAppointments);
-    }
-
-    public void sendAppointmentNotify(Appointment appointment) {
-        Assert.notNull(appointment, "appointment entity cannot be null");
-
-        log.debug("is need send appointment notify msg? sms = {}, email = {}",
-            applicationProperties.getSms().isSendNotifyMsg(), applicationProperties.getEmail().isSendNotifyMsg());
-
-        log.debug("sending appointment notify, appointmentId = {}", appointment.getId());
-        sendAppointmentNotifyBySMS(appointment);
-        sendAppointmentNotifyByHtmlEmail(appointment);
-    }
-
-    private void sendAppointmentNotifyBySMS(Appointment appointment) {
-        String msg = getAppointmentNotifyWording(appointment);
-        String consultantMobile = consultantService.findByAgentNo(appointment.getAgentNo()).getPhoneNumber();
-
-        try {
-            if(!StringUtils.hasText(consultantMobile)) {
-                throw new SendSMSFailException("the consultant does not have mobile!");
-            }
-
-            sendMsgService.sendMsgBySMS(consultantMobile, msg);
-        } catch (SendSMSFailException e) {
-            log.warn("send appointment notify by sms was fail, appointment Id = {}", appointment.getId(), e);
-        }
-    }
-
-    private String getAppointmentNotifyWording(Appointment appointment) {
-        String normalContent;
-        if(StringUtils.hasText(appointment.getPhone())) {
-            normalContent = "閬芣��“��憟踝����蝑�靽�犖憯賢��像��������恥�����Ⅳ�" + appointment.getPhone();
-        }
-        else {
-            normalContent = "閬芣��“��憟踝����蝑�靽�犖憯賢��像������";
-        }
-
-        String urlContent = "嚗���雯��嚗�" + getAppointmentDetailUrl(appointment.getId()) + "����蒂摰�蝯∟赤隢�����";
-        return normalContent + urlContent;
-    }
-
-    private void sendAppointmentNotifyByHtmlEmail(Appointment appointment) {
-       String consultantEmail = consultantService.findByAgentNo(appointment.getAgentNo()).getEmail();
-        String customerMobile = appointment.getPhone();
-        String normalContent;
-
-        if(StringUtils.hasText(customerMobile)) {
-            normalContent = "閬芣��“��憟踝����蝑�靽�犖憯賢��像��������恥�����Ⅳ�" + customerMobile + "嚗�";
-        }
-        else {
-            normalContent = "閬芣��“��憟踝����蝑�靽�犖憯賢��像�������";
-        }
-
-        Context context = new Context();
-        context.setVariable("content", normalContent);
-        context.setVariable("urlHint", getAppointmentDetailUrl(appointment.getId()));
-        String content = springTemplateEngine.process("mail/appointmentNotifyEmail", context);
-
-        try {
-            if(!StringUtils.hasText(consultantEmail)) {
-                throw new SendEmailFailException("the consultant does not have email!");
-            }
-
-            sendMsgService.sendMsgByEmail(consultantEmail, NOTIFY_EMAIL_SUBJECT, content, true);
-        } catch (SendEmailFailException e) {
-            log.warn("send appointment notify by email was fail, appointment Id = {}", appointment.getId(), e);
-        }
-    }
-
-    public String getAppointmentDetailUrl(Long appointmentId) {
-        return applicationProperties.getFrontEndDomain() + "/myAppointmentList/contactedList?appointmentId=" + appointmentId;
-    }
-
-    public Appointment findById(Long id) {
-    	return appointmentRepository.findById(id)
-    			.orElseThrow(AppointmentNotFoundException::new);
-    }
-
-	public void closeAppointment(AppointmentCloseDTO closeDTO) {
-		if(closeDTO.getContactStatus() == ContactStatusEnum.DONE) {
-			DoneProcessDTO dto = new DoneProcessDTO();
-			BeanUtils.copyProperties(closeDTO, dto);
-			abstractAppointmentProcess.process(dto);
-		}else if(closeDTO.getContactStatus() == ContactStatusEnum.CLOSED){
-			ClosedProcessDTO dto = new ClosedProcessDTO();
-			BeanUtils.copyProperties(closeDTO, dto);
-			abstractAppointmentProcess.process(dto);
-		}
-	}
-
-    public Long getConsultantPendingAppointmentSum(String agentNo) {
-        return appointmentCustomerViewRepository.findAllByCommunicateStatusAndStatus(ContactStatusEnum.RESERVED, AVAILABLE)
-                .stream()
-                .filter(appointment -> agentNo.equals(appointment.getAgentNo()))
-                .filter(appointment -> isAppointmentDateNotInIntervalFromNow(appointment, Constants.APPOINTMENT_PENDING_PHONE_INTERVAL, Constants.APPOINTMENT_PENDING_EMAIL_INTERVAL))
-                .count();
-    }
-
-    public AppointmentCustomerViewDTO getCustomerNewestExpiringAppointment(Long customerId) {
-        return appointmentCustomerViewRepository.findAllByCommunicateStatusAndStatus(ContactStatusEnum.RESERVED, AVAILABLE)
-                .stream()
-                .filter(appointment -> customerId.equals(appointment.getCustomerId()))
-                .filter(appointment -> isAppointmentDateNotInIntervalFromNow(appointment, Constants.APPOINTMENT_EXPIRING_PHONE_INTERVAL, Constants.APPOINTMENT_EXPIRING_EMAIL_INTERVAL))
-                .max(Comparator.comparing(AppointmentCustomerView::getAppointmentDate))
-                .map(appointmentCustomerView -> appointmentCustomerViewMapper.toAppointmentCustomerViewDTO(appointmentCustomerView))
-                .orElse(null);
-    }
-
-    public boolean isAppointmentDateNotInIntervalFromNow(AppointmentCustomerView appointment, int phoneInterval, int emailInterval) {
-        final boolean isHavePhone = StringUtils.hasText(appointment.getPhone());
-        final boolean isHaveEmail = StringUtils.hasText(appointment.getEmail());
-
-        LocalDate appointmentDate = appointment.getAppointmentDate().atZone(ZoneId.systemDefault()).toLocalDate();
-        LocalDate nowDate = Instant.now().atZone(ZoneId.systemDefault()).toLocalDate();
-        long intervalDays = nowDate.toEpochDay() - appointmentDate.toEpochDay();
-
-        final boolean isAppointmentExpiringByPhone = isHavePhone && intervalDays >= phoneInterval;
-        final boolean isAppointmentExpiringByEmail = isHaveEmail && intervalDays >= emailInterval;
-
-        return isAppointmentExpiringByPhone || isAppointmentExpiringByEmail;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/ConsultantQuerySpec.java b/pamapi/src/main/java/com/pollex/pam/service/ConsultantQuerySpec.java
deleted file mode 100644
index 8e14d66..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/ConsultantQuerySpec.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.pollex.pam.service;
-
-import com.pollex.pam.domain.Consultant;
-import com.pollex.pam.service.dto.FastQueryConsultantParam;
-import com.pollex.pam.service.dto.StrictQueryConsultantParam;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.data.jpa.domain.Specification;
-
-import javax.persistence.criteria.*;
-import java.util.*;
-
-import static com.pollex.pam.consts.SeniorityQueryConst.*;
-
-public class ConsultantQuerySpec {
-    private ConsultantQuerySpec() {
-    }
-
-    public static Specification<Consultant> getFastQuerySpec(FastQueryConsultantParam param) {
-        return new Specification<Consultant>() {
-            @SuppressWarnings("FieldNameHidesFieldInSuperclass")
-            private static final long serialVersionUID = 6644524130903161741L;
-
-            @Override
-            public Predicate toPredicate(Root<Consultant> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
-                Set<Predicate> set = new HashSet<>();
-
-                param.getCommunicationStyles().forEach((communicationStyle) -> {
-                    set.add(criteriaBuilder.like(root.get("communicationStyle"), "%" + communicationStyle + "%"));
-                });
-
-                if(Objects.nonNull(param.getGender())) {
-                    set.add(criteriaBuilder.equal(root.get("gender"), param.getGender()));
-                }
-
-                if(Objects.nonNull(param.getAvgScore()) && param.getAvgScore().intValue() != 0) {
-                    set.add(criteriaBuilder.greaterThanOrEqualTo(root.get("avgScore"), param.getAvgScore().intValue()));
-                }
-
-                if(StringUtils.isNotEmpty(param.getSeniority()) && !StringUtils.equals(UNLIMITED, param.getSeniority())) {
-                    if(YOUNG.equals(param.getSeniority())) {
-                        set.add(criteriaBuilder.lessThanOrEqualTo(root.get("seniorityYear"), 5));
-                    }
-                    else if(SENIOR.equals(param.getSeniority())) {
-                        set.add(criteriaBuilder.greaterThan(root.get("seniorityYear"), 5));
-                    }
-                }
-
-                Predicate[] predicates = new Predicate[set.size()];
-                predicates = set.toArray(predicates);
-                return criteriaBuilder.and(predicates);
-            }
-        };
-    }
-
-    public static Specification<Consultant> getStrictQuerySpec(StrictQueryConsultantParam param) {
-        return new Specification<Consultant>() {
-            @SuppressWarnings("FieldNameHidesFieldInSuperclass")
-            private static final long serialVersionUID = 664452413090316174L;
-
-            @Override
-            public Predicate toPredicate(Root<Consultant> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
-                Set<Predicate> set = new HashSet<>();
-
-                if(Objects.nonNull(param.getGender())) {
-                    set.add(criteriaBuilder.equal(root.get("gender"), param.getGender()));
-                }
-
-                if(StringUtils.isNotEmpty(param.getArea())) {
-                    set.add(criteriaBuilder.like(root.get("serveArea"), "%" + param.getArea() + "%"));
-                }
-
-                Predicate[] predicates = new Predicate[set.size()];
-                predicates = set.toArray(predicates);
-                return criteriaBuilder.and(predicates);
-            }
-        };
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java b/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java
deleted file mode 100644
index 58c96d9..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java
+++ /dev/null
@@ -1,376 +0,0 @@
-package com.pollex.pam.service;
-
-import com.pollex.pam.config.ApplicationProperties;
-import com.pollex.pam.domain.Appointment;
-import com.pollex.pam.domain.AppointmentCustomerView;
-import com.pollex.pam.domain.Consultant;
-import com.pollex.pam.domain.CustomerFavoriteConsultant;
-import com.pollex.pam.domain.Satisfaction;
-import com.pollex.pam.enums.ContactStatusEnum;
-import com.pollex.pam.enums.LoginResult;
-import com.pollex.pam.repository.ConsultantRepository;
-import com.pollex.pam.repository.CustomerFavoriteConsultantRepository;
-import com.pollex.pam.repository.SatisfactionRepository;
-import com.pollex.pam.security.SecurityUtils;
-import com.pollex.pam.service.dto.*;
-import com.pollex.pam.service.mapper.AppointmentCustomerViewMapper;
-import com.pollex.pam.service.mapper.ConsultantDTOMapper;
-import com.pollex.pam.service.mapper.ConsultantMapper;
-import com.pollex.pam.service.util.FileUtil;
-import com.pollex.pam.web.rest.errors.ConsultantNotFoundException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.StringUtils;
-import org.thymeleaf.context.Context;
-import org.thymeleaf.spring5.SpringTemplateEngine;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.math.BigDecimal;
-import java.time.Instant;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.stream.Collectors;
-
-import static com.pollex.pam.consts.SeniorityQueryConst.*;
-import static com.pollex.pam.enums.ContactStatusEnum.*;
-
-@Service
-@Transactional
-public class ConsultantService {
-
-    private static final Logger log = LoggerFactory.getLogger(ConsultantService.class);
-
-    @Autowired
-    ConsultantRepository consultantRepository;
-
-    @Autowired
-    CustomerFavoriteConsultantRepository customerFavoriteConsultantRepository;
-
-    @Autowired
-    ConsultantMapper consultantMapper;
-
-    @Autowired
-    AppointmentService appointmentService;
-
-    @Autowired
-    LoginRecordService loginRecordService;
-
-    @Autowired
-    AppointmentCustomerViewMapper appointmentCustomerViewMapper;
-
-    @Autowired
-    SatisfactionService satisfactionService;
-
-    @Autowired
-    ConsultantDTOMapper consultantDTOMapper;
-
-    @Autowired
-    ApplicationProperties applicationProperty;
-
-    @Autowired
-	SendMsgService sendMsgService;
-
-    @Autowired
-    SpringTemplateEngine springTemplateEngine;
-
-    @Autowired
-    ApplicationProperties applicationProperties;
-
-    @Autowired
-    ConsultantService consultantService;
-
-    @Autowired
-    SatisfactionRepository satisfactionRepository;
-
-    @Autowired
-    PersonalNotificationService personalNotificationService;
-
-    public List<CustomerFavoriteConsultantDTO> getMyConsultantList() {
-        Long customerId = SecurityUtils.getCustomerDBId();
-
-        return customerFavoriteConsultantRepository.findAllByCustomerId(customerId)
-            .stream()
-            .map(relation -> {
-                Consultant consultant = relation.getConsultant();
-                CustomerFavoriteConsultantDTO dto = consultantMapper.toCustomerFavoriteConsultantDto(consultant);
-                dto.setCreateTime(relation.getCreatedDate());
-                dto.setUpdateTime(relation.getCreatedDate());
-                dto.setCustomerViewTime(relation.getViewTime());
-
-                setInfoByAvailableAppointment(
-                    dto,
-                    appointmentService.findAvailableByAgentNoAndCustomerId(consultant.getAgentNo(), customerId)
-                );
-
-                setFavoriteConsultantUpdatedTime(relation, dto);
-
-                return dto;
-
-            }).collect(Collectors.toList());
-    }
-
-	public void setFavoriteConsultantUpdatedTime(CustomerFavoriteConsultant relation,
-			CustomerFavoriteConsultantDTO dto) {
-		Consultant consultant = relation.getConsultant();
-		appointmentService.findLatestAppointmentByAgentNoAndCustomerId(consultant.getAgentNo(), relation.getCustomerId())
-		    .ifPresent(latestAppointment -> {
-		        dto.setUpdateTime(latestAppointment.getLastModifiedDate());
-		    });
-
-		if(dto.getUpdateTime().isBefore(relation.getCreatedDate())) {
-		    dto.setUpdateTime(relation.getCreatedDate());
-		}
-	}
-
-    private void setInfoByAvailableAppointment(CustomerFavoriteConsultantDTO customerFavoriteConsultantDTO, List<AppointmentCustomerView> appointmentList) {
-        List<AppointmentCustomerView> appointments = appointmentList.stream()
-            .sorted(Comparator.comparing(AppointmentCustomerView::getAppointmentDate).reversed())
-            .collect(Collectors.toList());
-
-        List<AppointmentCustomerViewDTO> appointmentCustomerViewDTOS = appointmentCustomerViewMapper.toAppointmentCustomerViewDTO(appointments);
-        customerFavoriteConsultantDTO.setAppointments(appointmentCustomerViewDTOS);
-
-        if (!appointments.isEmpty()) {
-            AppointmentCustomerView latestAvailableAppointment = appointments.get(0);
-            ContactStatusEnum latestStatus = latestAvailableAppointment.getCommunicateStatus();
-            if(latestStatus != ContactStatusEnum.DONE && latestStatus != ContactStatusEnum.CLOSED)
-                customerFavoriteConsultantDTO.setContactStatus(latestStatus);
-            else
-                customerFavoriteConsultantDTO.setContactStatus(PICKED);
-        }else {
-        	customerFavoriteConsultantDTO.setContactStatus(PICKED);
-        }
-    }
-
-    public List<ConsultantDTO> getRecommendConsultantList() {
-        return consultantRepository.findAllByRecommendIsTrue()
-            .stream()
-            .map(consultantMapper::toDto)
-            .collect(Collectors.toList());
-    }
-
-    public List<ConsultantDTO> strictQueryConsultant(StrictQueryConsultantParam param) {
-        return consultantRepository.findAll(ConsultantQuerySpec.getStrictQuerySpec(param))
-            .stream()
-            .map(consultant -> {
-                int suitabilityScore = getStrictQuerySuitabilityScore(param, consultant);
-
-                ConsultantDTO dto = consultantMapper.toDto(consultant);
-                dto.setSuitability(suitabilityScore);
-
-                return dto;
-            })
-            .collect(Collectors.toList());
-    }
-
-    private int getStrictQuerySuitabilityScore(StrictQueryConsultantParam param, Consultant consultant) {
-        Float queryAvgScore = param.getAvgScore();
-        String querySeniority = param.getSeniority();
-        List<String> queryRequirements = param.getRequirements();
-
-        int score = 0;
-        if(isConsultantGreaterThanScore(queryAvgScore, consultant.getAvgScore())) {
-            score += 30;
-        }
-
-        if(isConsultantInSeniority(querySeniority, consultant.getSeniorityYear())) {
-            score += 20;
-        }
-
-        if(isAllRequirementsIncludeConsultant(queryRequirements, consultant.getExpertise())) {
-            score += 50;
-        }
-
-        return score;
-    }
-
-    private boolean isAllRequirementsIncludeConsultant(List<String> queryRequirements, String consultantExpertise) {
-        return queryRequirements
-            .stream()
-            .allMatch(queryRequirement -> consultantExpertise.matches(".*"+queryRequirement+".*"));
-    }
-
-    private boolean isConsultantInSeniority(String querySeniority, Long consultantSeniorityYear) {
-        switch (querySeniority == null ? "" : querySeniority) {
-            case YOUNG:
-                return consultantSeniorityYear < 5;
-            case SENIOR:
-                return consultantSeniorityYear > 5;
-            case UNLIMITED:
-            case "":
-                return true;
-            default:
-                return false;
-        }
-    }
-
-    private boolean isConsultantGreaterThanScore(Float queryAvgScore, Float consultantAvgScore) {
-        return Objects.isNull(queryAvgScore) || queryAvgScore < consultantAvgScore;
-    }
-
-    public List<ConsultantDTO> fastQueryConsultant(FastQueryConsultantParam param) {
-        return consultantRepository.findAll(ConsultantQuerySpec.getFastQuerySpec(param))
-            .stream()
-            .map(consultantMapper::toDto)
-            .collect(Collectors.toList());
-    }
-
-    public ConsultantDetailDTO getConsultantDetail(String agentNo) {
-        Consultant consultant = consultantRepository.findOneByAgentNo(agentNo).orElseThrow(ConsultantNotFoundException::new);
-        ConsultantDetailDTO consultantDetailDTO = consultantMapper.toDetailDto(consultant);
-
-        loginRecordService.findLatestLoginRecord(agentNo, LoginResult.SUCCESS)
-                .ifPresent(loginRecord -> consultantDetailDTO.setLatestLoginTime(loginRecord.getLoginDate()));
-
-        return consultantDetailDTO;
-    }
-
-    @Transactional
-    public void addConsultantToCustomList(AddConsultantParam param) {
-        List<String> agentNoList = param.getAgentNoList();
-        List<Consultant> consultants = consultantRepository.findAllByAgentNoIn(agentNoList);
-        Long userId = SecurityUtils.getCustomerDBId();
-
-        consultants.forEach(consultant -> {
-            boolean isConsultantInList = customerFavoriteConsultantRepository.findOneByCustomerIdAndConsultant(userId, consultant).isPresent();
-
-            if(!isConsultantInList) {
-                CustomerFavoriteConsultant customerFavoriteConsultant = new CustomerFavoriteConsultant();
-                customerFavoriteConsultant.setConsultant(consultant);
-                customerFavoriteConsultant.setCustomerId(userId);
-
-                customerFavoriteConsultantRepository.save(customerFavoriteConsultant);
-            }
-            else {
-                log.info("The consultant is in customer favorite list! customId = {}, consultant AgentNo = {}", userId, consultant.getAgentNo());
-            }
-        });
-
-    }
-
-	public List<AppointmentCustomerViewDTO> getMyAppointment() {
-		String agentNo = SecurityUtils.getAgentNo();
-		return appointmentService.getConsultantAvailableAppointments(agentNo);
-	}
-
-    public void removeConsultantFromCustomList(String agentNo) {
-        Long customId = SecurityUtils.getCustomerDBId();
-        Consultant consultant = consultantRepository.findOneByAgentNo(agentNo).orElseThrow(ConsultantNotFoundException::new);
-        CustomerFavoriteConsultant target = customerFavoriteConsultantRepository.findOneByCustomerIdAndConsultant(customId, consultant).orElse(null);
-
-        if(target != null) {
-            customerFavoriteConsultantRepository.delete(target);
-        }
-        else {
-            log.info("this consultant is not in customer list! agentNo = {}, customId = {}", agentNo, customId);
-        }
-    }
-
-    public void recordAllAppointmentsView() {
-        String agentNo = SecurityUtils.getAgentNo();
-        appointmentService.recordAllAppointmentsView(agentNo);
-    }
-
-    public void recordMyConsultantListView() {
-        Long customerId = SecurityUtils.getCustomerDBId();
-        List<CustomerFavoriteConsultant> notViewRelation = customerFavoriteConsultantRepository
-            .findAllByCustomerId(customerId)
-            .stream()
-            .filter(relation -> Objects.isNull(relation.getViewTime()))
-            .collect(Collectors.toList());
-
-        notViewRelation.forEach(relation -> {
-            relation.setViewTime(Instant.now());
-        });
-
-        customerFavoriteConsultantRepository.saveAll(notViewRelation);
-    }
-
-    public Consultant findByAgentNo(String agentNo) {
-        return consultantRepository.findOneByAgentNo(agentNo).get();
-    }
-
-	public Consultant editConsultant(ConsultantEditDTO editDTO) {
-		Consultant consultant = consultantRepository.findOneByAgentNo(editDTO.getAgentNo())
-				.orElseThrow(ConsultantNotFoundException::new);
-		consultantDTOMapper.copyToConsultant(editDTO, consultant);
-		FileUtil.base64ToFile(editDTO.getPhotoBase64(), editDTO.getPhotoFileName(), applicationProperty.getFileFolderPath());
-		consultantRepository.save(consultant);
-		personalNotificationService.createEditConsultantToConsultant(consultant);
-		return consultant;
-	}
-
-	public InputStream getAvatarImage(String agentNo) {
-		Consultant consultant = consultantRepository.findOneByAgentNo(agentNo)
-				.orElseThrow(ConsultantNotFoundException::new);
-		File file = new File(consultant.getPhotoPath());
-		try {
-			InputStream in = new FileInputStream(file);
-			return in;
-		} catch (FileNotFoundException e) {
-			log.error("agent photo not found , agentNo:"+agentNo,e);
-			return null;
-		}
-	}
-
-	public void sendSatisfactionToClient(Appointment appointment) {
-		String subject = "皛踵�漲憛怠神�";
-
-		if(StringUtils.hasText(appointment.getEmail())) {
-			String content = genSendSatisfactionEmailContent(appointment);
-			sendMsgService.sendMsgByEmail(appointment.getEmail(), subject, content, true);
-
-		}if(StringUtils.hasText(appointment.getPhone())) {
-			String content = genSendSatisfactionSMSContent(appointment);
-			sendMsgService.sendMsgBySMS(appointment.getPhone(), content);
-		}
-
-		personalNotificationService.createSendSatisfactionToClientToCustomer(appointment);
-	}
-
-	private String genSendSatisfactionSMSContent(Appointment appointment) {
-		String agentNo = appointment.getAgentNo();
-		Consultant consultant = consultantService.findByAgentNo(agentNo);
-		String contsultantName = consultant.getName();
-		String content = contsultantName+"憿批��憛怠神靽���像���遛��漲閰��"+getSendSatisfactionToClientUrl(appointment.getId());
-		return content;
-	}
-
-	private String genSendSatisfactionEmailContent(Appointment appointment) {
-		String agentNo = appointment.getAgentNo();
-		Consultant consultant = consultantService.findByAgentNo(agentNo);
-		Context context = new Context();
-        context.setVariable("consultantName", consultant.getName());
-        context.setVariable("appointmentUrl", getSendSatisfactionToClientUrl(appointment.getId()));
-        String content = springTemplateEngine.process("mail/writeSatisfactionNotice", context);
-		return content;
-	}
-
-	public String getSendSatisfactionToClientUrl(Long appointmentId) {
-        return applicationProperties.getFrontEndDomain() + "/?appointmentId=" + appointmentId;
-    }
-
-	public void setConsultantAvgScore(Satisfaction satisfaction) {
-		Optional<Float> avgScore = getAgentAvgScore(satisfaction.getAgentNo());
-
-        if(avgScore.isPresent()) {
-            BigDecimal bigDecimal = BigDecimal.valueOf(avgScore.get());
-
-            Consultant consultant = consultantRepository.findOneByAgentNo(satisfaction.getAgentNo()).get();
-            consultant.setAvgScore(bigDecimal.setScale(1, BigDecimal.ROUND_HALF_UP).floatValue());
-            consultantRepository.save(consultant);
-        }
-	}
-
-	public Optional<Float> getAgentAvgScore(String agentNo) {
-		return satisfactionRepository.getAgentScoreAvg(agentNo);
-	}
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/CustomerAuthService.java b/pamapi/src/main/java/com/pollex/pam/service/CustomerAuthService.java
index 427e102..e7d394c 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/CustomerAuthService.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/CustomerAuthService.java
@@ -15,12 +15,12 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.pollex.pam.domain.Customer;
-import com.pollex.pam.enums.CustomerDetailEnum;
-import com.pollex.pam.repository.CustomerRepository;
+import com.pollex.pam.business.domain.Customer;
+import com.pollex.pam.business.enums.CustomerDetailEnum;
+import com.pollex.pam.business.repository.CustomerRepository;
 import com.pollex.pam.security.jwt.TokenProvider;
 import com.pollex.pam.security.token.OtpAuthenticationToken;
-import com.pollex.pam.web.rest.vm.OtpAccount;
+import com.pollex.pam.business.web.vm.OtpAccount;
 
 @Service
 @Transactional
diff --git a/pamapi/src/main/java/com/pollex/pam/service/CustomerService.java b/pamapi/src/main/java/com/pollex/pam/service/CustomerService.java
index 79a086d..3f1b6c4 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/CustomerService.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/CustomerService.java
@@ -2,21 +2,23 @@
 
 import java.util.Optional;
 
-import com.pollex.pam.security.SecurityUtils;
-import com.pollex.pam.service.dto.CustomerDTO;
-import com.pollex.pam.service.mapper.CustomerMapper;
+import com.pollex.pam.business.security.SecurityUtils;
+import com.pollex.pam.business.service.OtpTmpService;
+import com.pollex.pam.business.service.UsernameAlreadyUsedException;
+import com.pollex.pam.business.service.dto.CustomerDTO;
+import com.pollex.pam.business.service.mapper.CustomerMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.pollex.pam.domain.Customer;
-import com.pollex.pam.domain.OtpTmp;
-import com.pollex.pam.enums.OtpLoginTypeEnum;
-import com.pollex.pam.enums.OtpTmpStatusEnum;
-import com.pollex.pam.repository.CustomerRepository;
-import com.pollex.pam.service.dto.CustomerRegisterDTO;
-import com.pollex.pam.service.mapper.CustomerDTOMapper;
+import com.pollex.pam.business.domain.Customer;
+import com.pollex.pam.business.domain.OtpTmp;
+import com.pollex.pam.business.enums.OtpLoginTypeEnum;
+import com.pollex.pam.business.enums.OtpTmpStatusEnum;
+import com.pollex.pam.business.repository.CustomerRepository;
+import com.pollex.pam.business.service.dto.CustomerRegisterDTO;
+import com.pollex.pam.business.service.mapper.CustomerDTOMapper;
 
 @Service
 @Transactional
diff --git a/pamapi/src/main/java/com/pollex/pam/service/EmailAlreadyUsedException.java b/pamapi/src/main/java/com/pollex/pam/service/EmailAlreadyUsedException.java
deleted file mode 100644
index 427dc68..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/EmailAlreadyUsedException.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.pollex.pam.service;
-
-public class EmailAlreadyUsedException extends RuntimeException {
-
-    private static final long serialVersionUID = 1L;
-
-    public EmailAlreadyUsedException() {
-        super("Email is already in use!");
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/InterviewRecordService.java b/pamapi/src/main/java/com/pollex/pam/service/InterviewRecordService.java
deleted file mode 100644
index 40197b4..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/InterviewRecordService.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package com.pollex.pam.service;
-
-import java.util.List;
-
-import org.hibernate.boot.model.naming.IllegalIdentifierException;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.pollex.pam.domain.Appointment;
-import com.pollex.pam.domain.InterviewRecord;
-import com.pollex.pam.enums.InterviewRecordStatusEnum;
-import com.pollex.pam.repository.InterviewRecordRepository;
-import com.pollex.pam.security.SecurityUtils;
-import com.pollex.pam.service.dto.InterviewRecordDTO;
-import com.pollex.pam.service.mapper.InterviewRecordMapper;
-import com.pollex.pam.web.rest.errors.InterviewRecordNotFoundException;
-
-@Service
-@Transactional
-public class InterviewRecordService {
-	
-	@Autowired
-	InterviewRecordRepository interviewRecordRepository;
-	
-	@Autowired
-	InterviewRecordMapper interviewRecordMapper;
-	
-	@Autowired
-	AppointmentService appointmentService;
-	
-	public InterviewRecord create(InterviewRecordDTO dto) {
-		if(dto.getId()!=null) {
-			throw new IllegalArgumentException();
-		}
-		
-		InterviewRecord record = interviewRecordMapper.toInterviewRecord(dto);
-		checkAuth(record);
-		record.setStatus(InterviewRecordStatusEnum.AVAILABLE);
-		interviewRecordRepository.save(record);
-		return record;
-	}
-	
-	public InterviewRecord update(InterviewRecordDTO dto) {
-		if(dto.getId()==null) {
-			throw new IllegalArgumentException();
-		}
-		
-		InterviewRecord record = findById(dto.getId());
-		checkAuth(record);
-		interviewRecordMapper.copyToInterviewRecord(dto, record);
-		interviewRecordRepository.save(record);
-		return record;
-	}
-	
-	public void checkAuth(InterviewRecord record) {
-		Appointment appointment = appointmentService.findById(record.getAppointmentId());
-		if(!appointment.getAgentNo().equals(SecurityUtils.getAgentNo())) {
-			throw new IllegalAccessError("The account can not edit the appointment");
-		}
-	}
-
-	public void delete(Long interviewRecordId) {
-		InterviewRecord record = findById(interviewRecordId);
-		record.setStatus(InterviewRecordStatusEnum.DELETED);
-		interviewRecordRepository.save(record);
-	}
-	
-	public InterviewRecord findById(Long id) {
-		return interviewRecordRepository.findById(id)
-		.orElseThrow(InterviewRecordNotFoundException::new);
-	}
-
-	public List<InterviewRecordDTO> findByAppointmentId(Long appointmentId) {
-		List<InterviewRecord> records = interviewRecordRepository.findByAppointmentId(appointmentId);
-		return interviewRecordMapper.toInterviewRecordDTO(records);
-	}
-
-	public List<InterviewRecordDTO> findByAppointmentIdAndStatus(Long appointmentId, InterviewRecordStatusEnum status) {
-		List<InterviewRecord> records = interviewRecordRepository.findByAppointmentIdAndStatus(appointmentId, status);
-		return interviewRecordMapper.toInterviewRecordDTO(records);
-	}
-	
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/InvalidPasswordException.java b/pamapi/src/main/java/com/pollex/pam/service/InvalidPasswordException.java
deleted file mode 100644
index 24b28e5..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/InvalidPasswordException.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.pollex.pam.service;
-
-public class InvalidPasswordException extends RuntimeException {
-
-    private static final long serialVersionUID = 1L;
-
-    public InvalidPasswordException() {
-        super("Incorrect password");
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/LoginRecordService.java b/pamapi/src/main/java/com/pollex/pam/service/LoginRecordService.java
deleted file mode 100644
index 8c0b8c4..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/LoginRecordService.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.pollex.pam.service;
-
-import com.pollex.pam.domain.LoginRecord;
-import com.pollex.pam.enums.LoginResult;
-import com.pollex.pam.repository.LoginRecordRepository;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.Optional;
-
-import static com.pollex.pam.enums.LoginMethod.E_SERVICE;
-import static com.pollex.pam.enums.LoginMethod.OTP;
-import static com.pollex.pam.enums.LoginResult.FAIL;
-import static com.pollex.pam.enums.LoginResult.SUCCESS;
-
-
-@Service
-@Transactional
-public class LoginRecordService {
-
-    @Autowired
-    LoginRecordRepository loginRecordRepository;
-
-    public Optional<LoginRecord> findLatestLoginRecord(String account, LoginResult loginResult) {
-        return loginRecordRepository.findTopByAccountAndResultOrderByLoginDateDesc(account, loginResult);
-    }
-
-    public void saveOTPLoginSuccessRecord(String account) {
-        LoginRecord loginRecord = new LoginRecord();
-        loginRecord.setAccount(account);
-        loginRecord.setLoginMethod(OTP);
-        loginRecord.setResult(SUCCESS);
-
-        loginRecordRepository.save(loginRecord);
-    }
-
-    public void saveOTPLoginFailRecord(String account, String failReason) {
-        LoginRecord loginRecord = new LoginRecord();
-        loginRecord.setAccount(account);
-        loginRecord.setLoginMethod(OTP);
-        loginRecord.setResult(FAIL);
-        loginRecord.setFailedReason(failReason);
-
-        loginRecordRepository.save(loginRecord);
-    }
-
-    public void saveEServiceLoginSuccessRecord(String account) {
-        LoginRecord loginRecord = new LoginRecord();
-        loginRecord.setAccount(account);
-        loginRecord.setLoginMethod(E_SERVICE);
-        loginRecord.setResult(SUCCESS);
-
-        loginRecordRepository.save(loginRecord);
-    }
-
-    public void saveEServiceLoginFailRecord(String account, String failReason) {
-        LoginRecord loginRecord = new LoginRecord();
-        loginRecord.setAccount(account);
-        loginRecord.setLoginMethod(E_SERVICE);
-        loginRecord.setResult(FAIL);
-        loginRecord.setFailedReason(failReason);
-
-        loginRecordRepository.save(loginRecord);
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/MailService.java b/pamapi/src/main/java/com/pollex/pam/service/MailService.java
deleted file mode 100644
index 555edd5..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/MailService.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package com.pollex.pam.service;
-
-import com.pollex.pam.domain.User;
-import java.nio.charset.StandardCharsets;
-import java.util.Locale;
-import javax.mail.MessagingException;
-import javax.mail.internet.MimeMessage;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.context.MessageSource;
-import org.springframework.mail.MailException;
-import org.springframework.mail.javamail.JavaMailSender;
-import org.springframework.mail.javamail.MimeMessageHelper;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Service;
-import org.thymeleaf.context.Context;
-import org.thymeleaf.spring5.SpringTemplateEngine;
-import tech.jhipster.config.JHipsterProperties;
-
-/**
- * Service for sending emails.
- * <p>
- * We use the {@link Async} annotation to send emails asynchronously.
- */
-@Service
-public class MailService {
-
-    private final Logger log = LoggerFactory.getLogger(MailService.class);
-
-    private static final String USER = "user";
-
-    private static final String BASE_URL = "baseUrl";
-
-    private final JHipsterProperties jHipsterProperties;
-
-    private final JavaMailSender javaMailSender;
-
-    private final MessageSource messageSource;
-
-    private final SpringTemplateEngine templateEngine;
-
-    public MailService(
-        JHipsterProperties jHipsterProperties,
-        JavaMailSender javaMailSender,
-        MessageSource messageSource,
-        SpringTemplateEngine templateEngine
-    ) {
-        this.jHipsterProperties = jHipsterProperties;
-        this.javaMailSender = javaMailSender;
-        this.messageSource = messageSource;
-        this.templateEngine = templateEngine;
-    }
-
-    @Async
-    public void sendEmail(String to, String subject, String content, boolean isMultipart, boolean isHtml) {
-        log.debug(
-            "Send email[multipart '{}' and html '{}'] to '{}' with subject '{}' and content={}",
-            isMultipart,
-            isHtml,
-            to,
-            subject,
-            content
-        );
-
-        // Prepare message using a Spring helper
-        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
-        try {
-            MimeMessageHelper message = new MimeMessageHelper(mimeMessage, isMultipart, StandardCharsets.UTF_8.name());
-            message.setTo(to);
-            message.setFrom(jHipsterProperties.getMail().getFrom());
-            message.setSubject(subject);
-            message.setText(content, isHtml);
-            javaMailSender.send(mimeMessage);
-            log.debug("Sent email to User '{}'", to);
-        } catch (MailException | MessagingException e) {
-            log.warn("Email could not be sent to user '{}'", to, e);
-        }
-    }
-
-    @Async
-    public void sendEmailFromTemplate(User user, String templateName, String titleKey) {
-        if (user.getEmail() == null) {
-            log.debug("Email doesn't exist for user '{}'", user.getLogin());
-            return;
-        }
-        Locale locale = Locale.forLanguageTag(user.getLangKey());
-        Context context = new Context(locale);
-        context.setVariable(USER, user);
-        context.setVariable(BASE_URL, jHipsterProperties.getMail().getBaseUrl());
-        String content = templateEngine.process(templateName, context);
-        String subject = messageSource.getMessage(titleKey, null, locale);
-        sendEmail(user.getEmail(), subject, content, false, true);
-    }
-
-    @Async
-    public void sendActivationEmail(User user) {
-        log.debug("Sending activation email to '{}'", user.getEmail());
-        sendEmailFromTemplate(user, "mail/activationEmail", "email.activation.title");
-    }
-
-    @Async
-    public void sendCreationEmail(User user) {
-        log.debug("Sending creation email to '{}'", user.getEmail());
-        sendEmailFromTemplate(user, "mail/creationEmail", "email.activation.title");
-    }
-
-    @Async
-    public void sendPasswordResetMail(User user) {
-        log.debug("Sending password reset email to '{}'", user.getEmail());
-        sendEmailFromTemplate(user, "mail/passwordResetEmail", "email.reset.title");
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/NoticeService.java b/pamapi/src/main/java/com/pollex/pam/service/NoticeService.java
deleted file mode 100644
index 5d9a908..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/NoticeService.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.pollex.pam.service;
-
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.StringUtils;
-
-import com.pollex.pam.domain.Appointment;
-import com.pollex.pam.domain.AppointmentNoticeLog;
-import com.pollex.pam.enums.ContactStatusEnum;
-import com.pollex.pam.repository.AppointmentRepository;
-import com.pollex.pam.service.dto.AppointmentNoticeSendDTO;
-
-@Service
-@Transactional
-public class NoticeService {
-	
-	@Autowired
-	AppointmentService appointmentService;
-	
-	@Autowired
-	SendMsgService sendMsgService;
-	
-	@Autowired
-	AppointmentNoticeLogService appointmentNoticeLogService;
-	
-	@Autowired
-	AppointmentRepository appointmentRepository;
-	
-	@Autowired
-    PersonalNotificationService personalNotificationService;
-	
-
-	public void sendNotice(AppointmentNoticeSendDTO dto) {
-		String subject = "靽���像�蝟餌絞�嚗���";
-		
-		if(StringUtils.hasText(dto.getEmail())) {
-			sendMsgService.sendMsgByEmail(dto.getEmail(), subject, dto.getMessage(), true);
-		}if(StringUtils.hasText(dto.getPhone())) {
-			sendMsgService.sendMsgBySMS(dto.getPhone(), dto.getMessage());
-		}
-		
-		List<AppointmentNoticeLog> noticeLogs = 
-				appointmentNoticeLogService.findByAppointmentId(dto.getAppointmentId());
-		if(noticeLogs.size()==0) {
-			Appointment appointment = appointmentService.findById(dto.getAppointmentId());
-			appointment.setCommunicateStatus(ContactStatusEnum.CONTACTED);
-			appointmentRepository.save(appointment);
-		}
-		
-		appointmentNoticeLogService.create(dto);
-		personalNotificationService.createSendNoticeToCustomer(dto.getAppointmentId());
-	}
-
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/OtpTmpService.java b/pamapi/src/main/java/com/pollex/pam/service/OtpTmpService.java
deleted file mode 100644
index df66731..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/OtpTmpService.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.pollex.pam.service;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.pollex.pam.domain.OtpTmp;
-import com.pollex.pam.enums.OtpLoginTypeEnum;
-import com.pollex.pam.enums.OtpTmpStatusEnum;
-import com.pollex.pam.repository.OtpTmpRepository;
-
-@Service
-@Transactional
-public class OtpTmpService {
-	
-	@Autowired
-	OtpTmpRepository otpTmpRepository;
-	
-	public OtpTmp createOtpTmp(String account, String indexKey) {
-		OtpTmp oldTmp = otpTmpRepository.findByAccount(account);
-		if(oldTmp==null) {
-			OtpTmp otpTmp = new OtpTmp();
-	    	otpTmp.setIndexKey(indexKey);
-	    	otpTmp.setAccount(account);
-	    	otpTmp.setStatus(OtpTmpStatusEnum.UNVERIFIED);
-	    	return otpTmpRepository.save(otpTmp);
-		}else {
-			oldTmp.setIndexKey(indexKey);
-			oldTmp.setStatus(OtpTmpStatusEnum.UNVERIFIED);
-			return otpTmpRepository.save(oldTmp);
-		}
-	}
-
-	public OtpTmp findByAccountAndIndexKey(String account, String indexKey) {
-		return otpTmpRepository.findByAccountAndIndexKey(account, indexKey);
-	}
-
-	public OtpTmp save(OtpTmp otpTmp) {
-		return otpTmpRepository.save(otpTmp);
-	}
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java b/pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java
index 868901a..ff21125 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java
@@ -1,17 +1,17 @@
 package com.pollex.pam.service;
 
-import com.pollex.pam.domain.OtpTmp;
-import com.pollex.pam.enums.OtpTmpStatusEnum;
-import com.pollex.pam.web.rest.errors.OtpLoginFailException;
-import com.pollex.pam.web.rest.vm.VerifyOtpVM;
+import com.pollex.pam.business.domain.OtpTmp;
+import com.pollex.pam.business.enums.OtpTmpStatusEnum;
+import com.pollex.pam.business.service.OtpTmpService;
+import com.pollex.pam.business.web.errors.OtpLoginFailException;
+import com.pollex.pam.business.web.vm.VerifyOtpVM;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.authentication.AuthenticationCredentialsNotFoundException;
 import org.springframework.stereotype.Service;
 
 import com.pollex.pam.config.ApplicationProperties;
-import com.pollex.pam.service.dto.OtpResponseDTO;
+import com.pollex.pam.business.service.dto.OtpResponseDTO;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
@@ -27,9 +27,6 @@
 
     @Autowired
     OtpTmpService otpTmpService;
-
-    @Autowired
-    LoginRecordService loginRecordService;
 
     @Transactional
     public void verifyOtp(VerifyOtpVM verifyOtpParam) {
@@ -47,11 +44,9 @@
             }
             else {
                 log.info("otp login fail... , account = {}, error code = {}, failReason = {}", account, otpResponseDTO.getFailCode(), otpResponseDTO.getFailReason());
-                loginRecordService.saveOTPLoginFailRecord(account, otpResponseDTO.getFailReason());
                 throw new OtpLoginFailException(otpResponseDTO.getFailCode());
             }
         }
-        loginRecordService.saveOTPLoginSuccessRecord(account);
         setVerrifiedOtpTmp(account, indexKey);
     }
 
diff --git a/pamapi/src/main/java/com/pollex/pam/service/OtpWebService.java b/pamapi/src/main/java/com/pollex/pam/service/OtpWebService.java
index b61ef34..cdbfb83 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/OtpWebService.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/OtpWebService.java
@@ -1,7 +1,7 @@
 package com.pollex.pam.service;
 
 import com.pollex.pam.config.ApplicationProperties;
-import com.pollex.pam.service.dto.OtpResponseDTO;
+import com.pollex.pam.business.service.dto.OtpResponseDTO;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/pamapi/src/main/java/com/pollex/pam/service/PersonalNotificationService.java b/pamapi/src/main/java/com/pollex/pam/service/PersonalNotificationService.java
deleted file mode 100644
index 3fa7b67..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/PersonalNotificationService.java
+++ /dev/null
@@ -1,159 +0,0 @@
-package com.pollex.pam.service;
-
-import java.time.Instant;
-import java.util.List;
-
-import javax.management.Notification;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.StringUtils;
-
-import com.pollex.pam.domain.Appointment;
-import com.pollex.pam.domain.Consultant;
-import com.pollex.pam.domain.Customer;
-import com.pollex.pam.domain.PersonalNotification;
-import com.pollex.pam.domain.Satisfaction;
-import com.pollex.pam.enums.NotificationTypeEnum;
-import com.pollex.pam.enums.PersonalNotificationRoleEnum;
-import com.pollex.pam.repository.CustomerRepository;
-import com.pollex.pam.repository.PersonalNotificationRepository;
-import com.pollex.pam.security.SecurityUtils;
-import com.pollex.pam.service.dto.AppointmentUpdateDTO;
-
-@Service
-@Transactional
-public class PersonalNotificationService {
-
-	@Autowired
-	PersonalNotificationRepository personalNotificationRepository;
-
-	@Autowired
-	ConsultantService consultantService;
-
-	@Autowired
-	AppointmentService appointmentService;
-
-	@Autowired
-	CustomerService customerService;
-
-	@Autowired
-	CustomerRepository customerRepository;
-
-	@Autowired
-	SatisfactionService satisfactionService;
-
-	public List<PersonalNotification> getMyPersonalNotification(Long ownerId, PersonalNotificationRoleEnum role) {
-		return personalNotificationRepository.findAllByOwnerRoleAndOwnerId(role, ownerId);
-	}
-
-	public void createSendSatisfactionToClientToCustomer(Appointment appointment) {
-		PersonalNotification entity = new PersonalNotification();
-		Consultant consultant = consultantService.findByAgentNo(appointment.getAgentNo());
-		String content = consultant.getName()+"憿批��憛怠神皛踵�漲閰��";
-		entity.setContent(content);
-		entity.setNotificationType(NotificationTypeEnum.ACTIVITY);
-		entity.setOwnerId(appointment.getCustomerId());
-		entity.setOwnerRole(PersonalNotificationRoleEnum.CUSTOMER);
-		entity.setTitle("憛怠神皛踵�漲");
-		personalNotificationRepository.save(entity);
-	}
-
-	public void createSendNoticeToCustomer(Long appointmentId) {
-		Appointment appointment = appointmentService.findById(appointmentId);
-		PersonalNotification entity = new PersonalNotification();
-		Consultant consultant = consultantService.findByAgentNo(appointment.getAgentNo());
-		String content = "���� "+consultant.getName()+"憿批���赤�";
-		entity.setContent(content);
-		entity.setNotificationType(NotificationTypeEnum.ACTIVITY);
-		entity.setOwnerId(appointment.getCustomerId());
-		entity.setOwnerRole(PersonalNotificationRoleEnum.CUSTOMER);
-		entity.setTitle("憿批��赤�");
-		personalNotificationRepository.save(entity);
-	}
-
-    public void createNotFillAppointmentSatisfactionNumberToCustomer(Long customerId, int notFillSatisfactionSum) {
-        PersonalNotification entity = new PersonalNotification();
-
-        String content = "���� "+notFillSatisfactionSum+" 蝑“���遛��漲��閬‵撖�";
-        entity.setContent(content);
-        entity.setNotificationType(NotificationTypeEnum.ACTIVITY);
-        entity.setOwnerId(customerId);
-        entity.setOwnerRole(PersonalNotificationRoleEnum.CUSTOMER);
-        entity.setTitle("摰X皛踵�漲");
-        personalNotificationRepository.save(entity);
-    }
-
-	public void createEditConsultantToConsultant(Consultant consultant) {
-		PersonalNotification entity = new PersonalNotification();
-		String content = "����犖撣唾�身摰歇�脰��";
-		entity.setContent(content);
-		entity.setNotificationType(NotificationTypeEnum.ACTIVITY);
-		entity.setOwnerId(consultant.getId());
-		entity.setOwnerRole(PersonalNotificationRoleEnum.CONSULTANT);
-		entity.setTitle("霈撣唾����");
-		personalNotificationRepository.save(entity);
-	}
-
-	public void createMarkAppointmentDeletedToConsultant(Appointment appointment) {
-		PersonalNotification entity = new PersonalNotification();
-		Customer customer = customerRepository.findById(appointment.getCustomerId()).get();
-		Consultant consultant = consultantService.findByAgentNo(appointment.getAgentNo());
-		String content = customer.getName()+"摰X撌脣�������";
-		entity.setContent(content);
-		entity.setNotificationType(NotificationTypeEnum.ACTIVITY);
-		entity.setOwnerId(consultant.getId());
-		entity.setOwnerRole(PersonalNotificationRoleEnum.CONSULTANT);
-		entity.setTitle("��������");
-		personalNotificationRepository.save(entity);
-	}
-
-	public void createUpdateAppointmentToConsultant(Appointment appointment) {
-		PersonalNotification entity = new PersonalNotification();
-		Customer customer = customerRepository.findById(appointment.getCustomerId()).get();
-		Consultant consultant = consultantService.findByAgentNo(appointment.getAgentNo());
-		String content = customer.getName()+"摰X撌脫���������";
-		entity.setContent(content);
-		entity.setNotificationType(NotificationTypeEnum.ACTIVITY);
-		entity.setOwnerId(consultant.getId());
-		entity.setOwnerRole(PersonalNotificationRoleEnum.CONSULTANT);
-		entity.setTitle("��������");
-		personalNotificationRepository.save(entity);
-	}
-
-	public void createScorefactionToConsultant(Satisfaction satisfaction) {
-		PersonalNotification entity = new PersonalNotification();
-		Appointment appointment = appointmentService.findById(satisfaction.getAppointmentId());
-		Customer customer = customerRepository.findById(appointment.getCustomerId()).get();
-		Consultant consultant = consultantService.findByAgentNo(appointment.getAgentNo());
-		String content = customer.getName()+"摰X撌脣��脰�遛��漲閰��";
-		entity.setContent(content);
-		entity.setNotificationType(NotificationTypeEnum.ACTIVITY);
-		entity.setOwnerId(consultant.getId());
-		entity.setOwnerRole(PersonalNotificationRoleEnum.CONSULTANT);
-		entity.setTitle("摰X皛踵�漲");
-		personalNotificationRepository.save(entity);
-	}
-
-	public void readAllMyNotification() {
-		if(StringUtils.hasText(SecurityUtils.getAgentNo())) {
-			Long consultantId = consultantService.findByAgentNo(SecurityUtils.getAgentNo()).getId();
-			readAllNotification(PersonalNotificationRoleEnum.CONSULTANT, consultantId);
-		}else if(SecurityUtils.getCustomerDBId()!=null){
-			readAllNotification(PersonalNotificationRoleEnum.CUSTOMER, SecurityUtils.getCustomerDBId());
-		}
-	}
-
-	public void readAllNotification(PersonalNotificationRoleEnum ownerRole
-			, Long ownerId) {
-		List<PersonalNotification> allNotification = personalNotificationRepository.findAllByOwnerRoleAndOwnerId(ownerRole, ownerId);
-		Instant today = Instant.now();
-		allNotification.stream()
-		.filter(notification ->  notification.getReadDate()==null)
-		.forEach(notification ->{
-			notification.setReadDate(today);
-			personalNotificationRepository.saveAll(allNotification);
-		});
-	}
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/SatisfactionService.java b/pamapi/src/main/java/com/pollex/pam/service/SatisfactionService.java
deleted file mode 100644
index 1bf3c20..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/SatisfactionService.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package com.pollex.pam.service;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Optional;
-
-import com.pollex.pam.enums.SatisfactionTypeEnum;
-import com.pollex.pam.security.SecurityUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.pollex.pam.domain.Appointment;
-import com.pollex.pam.domain.Satisfaction;
-import com.pollex.pam.enums.SatisfactionStatusEnum;
-import com.pollex.pam.repository.ConsultantRepository;
-import com.pollex.pam.repository.CustomerRepository;
-import com.pollex.pam.repository.SatisfactionRepository;
-import com.pollex.pam.service.dto.SatisfactionCustomerScoreDTO;
-import com.pollex.pam.service.dto.SatisfactionDTO;
-import com.pollex.pam.service.mapper.AppointmentMapper;
-import com.pollex.pam.service.mapper.SatisfactionDTOMapper;
-import com.pollex.pam.service.mapper.SatisfactionMapper;
-import com.pollex.pam.web.rest.errors.SatisfactionAlreadyExistException;
-import com.pollex.pam.web.rest.errors.SatisfactionNotFoundException;
-import org.springframework.util.Assert;
-
-@Service
-@Transactional
-public class SatisfactionService {
-
-    private static final Logger log = LoggerFactory.getLogger(SatisfactionService.class);
-
-	@Autowired
-	SatisfactionRepository satisfactionRepository;
-
-	@Autowired
-	AppointmentMapper appointmentMapper;
-
-	@Autowired
-	SatisfactionDTOMapper satisfactionDTOMapper;
-
-	@Autowired
-	SatisfactionMapper satisfactionMapper;
-
-	@Autowired
-	CustomerRepository customerRepository;
-
-	@Autowired
-	ConsultantRepository consultantRepository;
-
-	@Autowired
-	ConsultantService consultantService;
-
-	@Autowired
-	PersonalNotificationService personalNotificationService;
-
-	public Satisfaction save(Satisfaction satisfaction) {
-		satisfaction = satisfactionRepository.save(satisfaction);
-        if(satisfaction.getType() == SatisfactionTypeEnum.APPOINTMENT) {
-            consultantService.setConsultantAvgScore(satisfaction);
-        }
-		return satisfaction;
-	}
-
-	public Satisfaction scorefaction(SatisfactionCustomerScoreDTO scoreDTO) {
-		Optional<Satisfaction> satisfactionOP = satisfactionRepository.findOneByAppointmentIdAndType(scoreDTO.getAppointmentId(), scoreDTO.getType());
-		Satisfaction satisfaction = satisfactionOP.orElseThrow(SatisfactionNotFoundException::new);
-
-        boolean isSameCustomer = satisfaction.getCustomerId().equals(SecurityUtils.getCustomerDBId());
-        Assert.isTrue(isSameCustomer, "The currently logged in customer has a different ID than the customer on Satisfaction");
-
-		satisfaction.setScore(scoreDTO.getScore());
-		satisfaction.setStatus(SatisfactionStatusEnum.FILLED);
-		save(satisfaction);
-
-        if(satisfaction.getType() == SatisfactionTypeEnum.APPOINTMENT) {
-            personalNotificationService.createScorefactionToConsultant(satisfaction);
-        }
-        return satisfaction;
-	}
-
-	public Satisfaction createAppointmentSatisfaction(Appointment appointment) {
-		boolean isexist = getByAppointmentIdAndType(appointment.getId(), SatisfactionTypeEnum.APPOINTMENT).isPresent();
-		if(isexist) {
-			throw new SatisfactionAlreadyExistException();
-		}
-		Satisfaction satisfaction = appointmentMapper.toAppointmentSatisfaction(appointment);
-		return save(satisfaction);
-	}
-//
-//	public Satisfaction createSatisfaction(SatisfactionCustomerScoreDTO createDTO) {
-//		Satisfaction satisfaction = satisfactionDTOMapper.toSatisfaction(createDTO);
-//		return save(satisfaction);
-//	}
-
-	public List<SatisfactionDTO> getByAgentNoAndType(String agentNo, SatisfactionTypeEnum type) {
-		List<Satisfaction> satisfactionList = satisfactionRepository.findByAgentNoAndType(agentNo, type);
-		return satisfactionMapper.toDTO(satisfactionList);
-	}
-
-	public List<SatisfactionDTO> getByCustomerId(Long customerDBId) {
-		List<Satisfaction> satisfactionList = satisfactionRepository.findByCustomerId(customerDBId);
-		return satisfactionMapper.toDTO(satisfactionList);
-	}
-
-    public Optional<Satisfaction> getByAppointmentIdAndType(Long appointmentId, SatisfactionTypeEnum type) {
-        return satisfactionRepository.findOneByAppointmentIdAndType(appointmentId, type);
-    }
-
-    public List<Satisfaction> getByStatusAndType(SatisfactionStatusEnum status, SatisfactionTypeEnum type) {
-        return satisfactionRepository.findAllByStatusAndType(status, type);
-    }
-
-	public List<Satisfaction> scoreAllfaction(List<SatisfactionCustomerScoreDTO> scoreDTO) {
-		List<Satisfaction> satisfactionList = new ArrayList<>();
-		scoreDTO.stream().forEach(dto ->{
-			satisfactionList.add(scorefaction(dto));
-		});
-		return satisfactionList;
-	}
-
-    public void createUnfilledSystemSatisfaction(Appointment appointment) {
-        Satisfaction satisfaction = new Satisfaction();
-        satisfaction.setAppointmentId(appointment.getId());
-        satisfaction.setCustomerId(SecurityUtils.getCustomerDBId());
-        satisfaction.setStatus(SatisfactionStatusEnum.UNFILLED);
-        satisfaction.setType(SatisfactionTypeEnum.SYSTEM);
-
-        satisfactionRepository.save(satisfaction);
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/ScheduleTaskService.java b/pamapi/src/main/java/com/pollex/pam/service/ScheduleTaskService.java
deleted file mode 100644
index 627aeb4..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/ScheduleTaskService.java
+++ /dev/null
@@ -1,165 +0,0 @@
-package com.pollex.pam.service;
-
-import com.pollex.pam.config.ApplicationProperties;
-import com.pollex.pam.config.Constants;
-import com.pollex.pam.domain.*;
-import com.pollex.pam.enums.AppointmentStatusEnum;
-import com.pollex.pam.enums.ContactStatusEnum;
-import com.pollex.pam.enums.SatisfactionStatusEnum;
-import com.pollex.pam.enums.SatisfactionTypeEnum;
-import com.pollex.pam.repository.AppointmentCustomerViewRepository;
-import com.pollex.pam.repository.AppointmentExpiringNotifyRecordRepository;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.StringUtils;
-import org.thymeleaf.context.Context;
-import org.thymeleaf.spring5.SpringTemplateEngine;
-
-import java.time.Instant;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.stream.Collectors;
-
-@Service
-@Transactional
-public class ScheduleTaskService {
-
-    private static final String NOT_CONTACTED_NOTIFY_SUBJECT = "�����脰�蝜恍�";
-    private static final Logger log = LoggerFactory.getLogger(ScheduleTaskService.class);
-
-    @Autowired
-    ConsultantService consultantService;
-
-    @Autowired
-    AppointmentService appointmentService;
-
-    @Autowired
-    AppointmentCustomerViewRepository appointmentCustomerViewRepository;
-
-    @Autowired
-    SendMsgService sendMsgService;
-
-    @Autowired
-    SpringTemplateEngine springTemplateEngine;
-
-    @Autowired
-    ApplicationProperties applicationProperties;
-
-    @Autowired
-    AppointmentExpiringNotifyRecordRepository appointmentExpiringNotifyRecordRepository;
-
-    @Autowired
-    SatisfactionService satisfactionService;
-
-    @Autowired
-    PersonalNotificationService personalNotificationService;
-
-    @Scheduled(cron = "0 30 8 * * *")
-    public void sendAppointmentPendingNotifyToConsultant() {
-        log.info("Starting send appointment pending notify to consultant");
-
-        Map<String, List<AppointmentCustomerView>> consultantWithPendingAppointments =
-            appointmentCustomerViewRepository.findAllByCommunicateStatusAndStatus(ContactStatusEnum.RESERVED, AppointmentStatusEnum.AVAILABLE)
-                .stream()
-                .filter(appointment ->
-                    appointmentService.isAppointmentDateNotInIntervalFromNow(appointment, Constants.APPOINTMENT_PENDING_PHONE_INTERVAL, Constants.APPOINTMENT_PENDING_EMAIL_INTERVAL)
-                )
-                .collect(Collectors.groupingBy(AppointmentCustomerView::getAgentNo));
-
-        consultantWithPendingAppointments.forEach((agentNo, pendingAppointments) -> {
-            int pendingAppointmentsSum = pendingAppointments.size();
-            Consultant consultant = consultantService.findByAgentNo(agentNo);
-            Optional<String> optionalPhone = Optional.ofNullable(consultant.getPhoneNumber()).filter(StringUtils::hasText);
-            Optional<String> optionalEmail = Optional.ofNullable(consultant.getEmail()).filter(StringUtils::hasText);
-
-            String emailContent = getAppointmentPendingNotifyEmailContent(pendingAppointmentsSum);
-
-            optionalPhone.ifPresent(phone -> {
-                sendMsgService.sendMsgBySMS(phone, String.format("����%s������脰�蝜恬������", pendingAppointmentsSum));
-            });
-            optionalEmail.ifPresent(email -> {
-                sendMsgService.sendMsgByEmail(email, NOT_CONTACTED_NOTIFY_SUBJECT, emailContent, true);
-            });
-        });
-
-        log.info("Sending appointment pending notify to consultant finish");
-    }
-
-    @Scheduled(cron = "0 30 8 * * *")
-    public void sendAppointmentExpiringNotifyToCustomer() {
-        log.info("Starting send appointment expiring notify to customer");
-
-        List<AppointmentCustomerView> allByCommunicateStatus =
-            appointmentCustomerViewRepository.findAllByCommunicateStatusAndStatus(ContactStatusEnum.RESERVED, AppointmentStatusEnum.AVAILABLE)
-                .stream()
-                .filter(appointment ->
-                    appointmentService.isAppointmentDateNotInIntervalFromNow(appointment, Constants.APPOINTMENT_EXPIRING_PHONE_INTERVAL, Constants.APPOINTMENT_EXPIRING_EMAIL_INTERVAL)
-                )
-                .filter(this::isAppointmentExpiringNotifyNotOnLimit)
-                .collect(Collectors.toList());
-
-        allByCommunicateStatus.forEach(appointment -> {
-            Consultant consultant = consultantService.findByAgentNo(appointment.getAgentNo());
-            Optional<String> optionalPhone = Optional.ofNullable(appointment.getPhone()).filter(StringUtils::hasText);
-            Optional<String> optionalEmail = Optional.ofNullable(appointment.getEmail()).filter(StringUtils::hasText);
-
-            optionalPhone.ifPresent(phone ->
-                sendMsgService.sendMsgBySMS(phone, String.format("敺甇�����%s憿批�迤敹�葉嚗������蒂���隞“������雯��嚗�%s"
-                    , consultant.getName(), getAppointmentExpiringNotifyUrl(appointment.getId())))
-            );
-            optionalEmail.ifPresent(email ->
-                sendMsgService.sendMsgByEmail(email, NOT_CONTACTED_NOTIFY_SUBJECT, getAppointmentExpiringNotifyEmail(consultant.getName(), getAppointmentExpiringNotifyUrl(appointment.getId())), true)
-            );
-
-            AppointmentExpiringNotifyRecord record = new AppointmentExpiringNotifyRecord();
-            record.setAppointmentId(appointment.getId());
-            record.setSendTime(Instant.now());
-
-            appointmentExpiringNotifyRecordRepository.save(record);
-        });
-
-        log.info("Sending appointment expiring notify to customer finish");
-    }
-
-    // todo ��蝣箄�府����, otis todo=134497
-    @Scheduled(cron = "0 30 8 * * *")
-    public void sendNotFillAppointmentSatisfactionToPersonalNotification() {
-        Map<Long, List<Satisfaction>> customerNotFillSatisfactions =
-            satisfactionService.getByStatusAndType(SatisfactionStatusEnum.UNFILLED, SatisfactionTypeEnum.APPOINTMENT)
-                .stream()
-                .collect(Collectors.groupingBy(Satisfaction::getCustomerId));
-
-        customerNotFillSatisfactions.forEach((customerId, notFillSatisfactions) ->
-            personalNotificationService.createNotFillAppointmentSatisfactionNumberToCustomer(customerId, notFillSatisfactions.size())
-        );
-    }
-
-    private boolean isAppointmentExpiringNotifyNotOnLimit(AppointmentCustomerView appointment) {
-        int sendNotifyToCustomerRecordSum =
-            appointmentExpiringNotifyRecordRepository.findAllByAppointmentId(appointment.getId()).size();
-
-        return sendNotifyToCustomerRecordSum < Constants.SEND_EXPIRING_NOTIFY_LIMIT;
-    }
-
-    private String getAppointmentExpiringNotifyUrl(Long appointmentId) {
-        return applicationProperties.getFrontEndDomain() + "?notContactAppointmentId=" + appointmentId;
-    }
-
-    private String getAppointmentPendingNotifyEmailContent(int sum) {
-        Context context = new Context();
-        context.setVariable("pendingAppointmentSum", sum);
-        return springTemplateEngine.process("mail/appointmentPendingNotifyEmail", context);
-    }
-
-    private String getAppointmentExpiringNotifyEmail(String consultantName, String notifyUrl) {
-        Context context = new Context();
-        context.setVariable("consultantName", consultantName);
-        context.setVariable("notifyUrl", notifyUrl);
-        return springTemplateEngine.process("mail/appointmentExpiringNotifyEmail", context);
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java b/pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java
deleted file mode 100644
index a5be71e..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java
+++ /dev/null
@@ -1,172 +0,0 @@
-package com.pollex.pam.service;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.pollex.pam.config.ApplicationProperties;
-import com.pollex.pam.config.ApplicationProperties.Email;
-import com.pollex.pam.config.ApplicationProperties.SMS;
-import com.pollex.pam.config.Constants;
-import com.pollex.pam.enums.SendEmailMsgMethod;
-import com.pollex.pam.repository.ConsultantRepository;
-import com.pollex.pam.service.dto.*;
-import com.pollex.pam.service.util.HttpRequestUtil;
-import com.pollex.pam.web.rest.errors.SendEmailFailException;
-import com.pollex.pam.web.rest.errors.SendSMSFailException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.env.Environment;
-import org.springframework.core.env.Profiles;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Service;
-import org.thymeleaf.spring5.SpringTemplateEngine;
-import tech.jhipster.config.JHipsterConstants;
-
-import java.nio.charset.StandardCharsets;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.*;
-import java.util.Base64.Encoder;
-
-@Service
-public class SendMsgService {
-
-    private static final Logger log = LoggerFactory.getLogger(SendMsgService.class);
-    private final Encoder encoder = Base64.getEncoder();
-
-    private static final String SEND_SMS_SUCCESS_CODE = "1";
-
-    @Autowired
-    ApplicationProperties applicationProperties;
-
-    @Autowired
-    ConsultantRepository consultantRepository;
-
-    @Autowired
-    SpringTemplateEngine springTemplateEngine;
-
-    @Autowired
-    Environment environment;
-
-    @Autowired
-    MailService mailService;
-
-    public SendSMSResponse sendMsgBySMS(String toMobile, String content) throws SendSMSFailException {
-
-        SMS smsProperties = applicationProperties.getSms();
-        if(!smsProperties.isSendNotifyMsg()) {
-//    		return getMockSMSResponse();
-            return null;
-        }
-
-        SendSMSRequest sendSMSRequest = new SendSMSRequest();
-        sendSMSRequest.setpKey(UUID.randomUUID().toString());
-        sendSMSRequest.setSourceCode(smsProperties.getSourceCode());
-        sendSMSRequest.setSender(smsProperties.getSender());
-        sendSMSRequest.setMsgTypeSet(smsProperties.getSmsType());
-        sendSMSRequest.setSendTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:00")));
-        sendSMSRequest.setSubject(encoder.encodeToString(smsProperties.getSubject().getBytes(StandardCharsets.UTF_8)));
-        sendSMSRequest.setActivityId("");
-
-        SMSDetail smsDetail = new SMSDetail();
-        smsDetail.setMobile(toMobile);
-        smsDetail.setContent(encoder.encodeToString(content.getBytes(StandardCharsets.UTF_8)));
-
-        sendSMSRequest.setDetail(Collections.singletonList(smsDetail));
-
-        try {
-            ResponseEntity<SendSMSResponse> responseEntity = HttpRequestUtil.postWithJson(smsProperties.getUrl(), sendSMSRequest, SendSMSResponse.class);
-            SendSMSResponse response = responseEntity.getBody();
-
-            log.debug("response status code = {}", responseEntity.getStatusCode());
-            log.debug("smsResponse = {}", responseEntity.getBody());
-
-            if(!SEND_SMS_SUCCESS_CODE.equals(response.getReturnCode())) {
-                throw new SendSMSFailException("sms service return code = " + response.getReturnCode() + ", error_msg = " + response.getErrorMsg());
-            }
-
-            return responseEntity.getBody();
-        } catch (SendSMSFailException e) {
-            throw e;
-        } catch (Exception e) {
-            log.warn("send sms fail by other reason!", e);
-            throw new SendSMSFailException("send sms fail by other reason!");
-        }
-    }
-
-//    private SendSMSResponse getMockSMSResponse() {
-//    	SendSMSResponse mock = new SendSMSResponse();
-//    	mock.set
-//		return null;
-//	}
-
-	public String sendMsgByEmail(String to, String subject, String content, boolean htmlFormat) throws SendEmailFailException{
-        return sendMsgByEmail(to, subject, content, htmlFormat, Collections.emptyList(), Collections.emptyList());
-    }
-
-    public String sendMsgByEmail(String toAddress, String subject, String content, boolean htmlFormat, List<String> toCCAddress,
-        List<String> attachments) throws SendEmailFailException {
-    	String fromAddress = applicationProperties.getEmail().getSenderEmail();
-
-        SendMailRequest sendMailRequest = new SendMailRequest();
-        sendMailRequest.setSendMailAddresses(Collections.singletonList(toAddress));
-        sendMailRequest.setFrom(fromAddress);
-        sendMailRequest.setContent(content);
-        sendMailRequest.setSubject(subject);
-        sendMailRequest.setSendCCMailAddresses(toCCAddress);
-        sendMailRequest.setAttachments(attachments);
-        sendMailRequest.setHtmlFormat(htmlFormat);
-        sendMailRequest.setFunctionId(applicationProperties.getEmail().getFunctionId());
-
-        return sendMsgByEmail(sendMailRequest);
-    }
-
-    public String sendMsgByEmail(SendMailRequest sendMailRequest) throws SendEmailFailException{
-        final Email emailProperties = applicationProperties.getEmail();
-
-        if(!emailProperties.isSendNotifyMsg()) {
-            return null;
-        }
-
-        if(emailProperties.getMethod() == SendEmailMsgMethod.POLLEX_GMAIL) {
-            return sendMsgByPollexGmail(sendMailRequest);
-        }
-        else if(emailProperties.getMethod() == SendEmailMsgMethod.PAM_EMAIL_SERVICE) {
-            return sendMsgByPamEmailService(sendMailRequest);
-        }
-
-        return null;
-    }
-
-    private String sendMsgByPollexGmail(SendMailRequest sendMailRequest) {
-        String subject = sendMailRequest.getSubject();
-        String content = sendMailRequest.getContent();
-        boolean isHtml = sendMailRequest.isHtmlFormat();
-        sendMailRequest.getSendMailAddresses().forEach(receiver -> mailService.sendEmail(receiver, subject, content, false, isHtml));
-
-        return null;
-    }
-
-    private String sendMsgByPamEmailService(SendMailRequest sendMailRequest) {
-        final Email emailProperties = applicationProperties.getEmail();
-        try {
-            ResponseEntity<String> responseEntity =
-                HttpRequestUtil.postWithJson(emailProperties.getUrl(), sendMailRequest, String.class);
-            log.debug("responseEntity = {}", responseEntity);
-
-            String rawResponseString = responseEntity.getBody();
-            SendMailResponse sendMailResponse = new ObjectMapper().readValue(rawResponseString, SendMailResponse.class);
-            log.debug("sendMailResponse = {}", sendMailResponse);
-
-            if (sendMailResponse == null || sendMailResponse.getData() == null || !"ADDED".equalsIgnoreCase(sendMailResponse.getData().getMessageStatus())) {
-                throw new SendEmailFailException("send email service return error msg! raw response string= " + rawResponseString);
-            }
-
-            return responseEntity.getBody();
-        } catch (SendEmailFailException e) {
-            throw e;
-        } catch (Exception e) {
-            log.warn("send email fail by other reason", e);
-            throw new SendEmailFailException("send email failed!");
-        }
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/UserService.java b/pamapi/src/main/java/com/pollex/pam/service/UserService.java
deleted file mode 100644
index 3bfa0ad..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/UserService.java
+++ /dev/null
@@ -1,333 +0,0 @@
-package com.pollex.pam.service;
-
-import java.time.Instant;
-import java.time.temporal.ChronoUnit;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.cache.CacheManager;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.security.crypto.password.PasswordEncoder;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.pollex.pam.config.Constants;
-import com.pollex.pam.domain.Authority;
-import com.pollex.pam.domain.User;
-import com.pollex.pam.repository.AuthorityRepository;
-import com.pollex.pam.repository.UserRepository;
-import com.pollex.pam.security.SecurityUtils;
-import com.pollex.pam.service.dto.AdminUserDTO;
-import com.pollex.pam.service.dto.UserDTO;
-
-import tech.jhipster.security.RandomUtil;
-
-/**
- * Service class for managing users.
- */
-@Service
-@Transactional
-public class UserService {
-
-    private final Logger log = LoggerFactory.getLogger(UserService.class);
-
-    private final UserRepository userRepository;
-
-    private final PasswordEncoder passwordEncoder;
-
-    private final AuthorityRepository authorityRepository;
-
-    private final CacheManager cacheManager;
-    
-
-    public UserService(
-        UserRepository userRepository,
-        PasswordEncoder passwordEncoder,
-        AuthorityRepository authorityRepository,
-        CacheManager cacheManager
-    ) {
-        this.userRepository = userRepository;
-        this.passwordEncoder = passwordEncoder;
-        this.authorityRepository = authorityRepository;
-        this.cacheManager = cacheManager;
-    }
-
-    public Optional<User> activateRegistration(String key) {
-        log.debug("Activating user for activation key {}", key);
-        return userRepository
-            .findOneByActivationKey(key)
-            .map(user -> {
-                // activate given user for the registration key.
-                user.setActivated(true);
-                user.setActivationKey(null);
-                this.clearUserCaches(user);
-                log.debug("Activated user: {}", user);
-                return user;
-            });
-    }
-
-    public Optional<User> completePasswordReset(String newPassword, String key) {
-        log.debug("Reset user password for reset key {}", key);
-        return userRepository
-            .findOneByResetKey(key)
-            .filter(user -> user.getResetDate().isAfter(Instant.now().minus(1, ChronoUnit.DAYS)))
-            .map(user -> {
-                user.setPassword(passwordEncoder.encode(newPassword));
-                user.setResetKey(null);
-                user.setResetDate(null);
-                this.clearUserCaches(user);
-                return user;
-            });
-    }
-
-    public Optional<User> requestPasswordReset(String mail) {
-        return userRepository
-            .findOneByEmailIgnoreCase(mail)
-            .filter(User::isActivated)
-            .map(user -> {
-                user.setResetKey(RandomUtil.generateResetKey());
-                user.setResetDate(Instant.now());
-                this.clearUserCaches(user);
-                return user;
-            });
-    }
-
-//    public User registerUser(AdminUserDTO userDTO, String password) {
-//        userRepository
-//            .findOneByLogin(userDTO.getLogin().toLowerCase())
-//            .ifPresent(existingUser -> {
-//                boolean removed = removeNonActivatedUser(existingUser);
-//                if (!removed) {
-//                    throw new UsernameAlreadyUsedException();
-//                }
-//            });
-//        userRepository
-//            .findOneByEmailIgnoreCase(userDTO.getEmail())
-//            .ifPresent(existingUser -> {
-//                boolean removed = removeNonActivatedUser(existingUser);
-//                if (!removed) {
-//                    throw new EmailAlreadyUsedException();
-//                }
-//            });
-//        User newUser = new User();
-//        String encryptedPassword = passwordEncoder.encode(password);
-//        newUser.setLogin(userDTO.getLogin().toLowerCase());
-//        // new user gets initially a generated password
-//        newUser.setPassword(encryptedPassword);
-//        newUser.setFirstName(userDTO.getFirstName());
-//        newUser.setLastName(userDTO.getLastName());
-//        if (userDTO.getEmail() != null) {
-//            newUser.setEmail(userDTO.getEmail().toLowerCase());
-//        }
-//        newUser.setImageUrl(userDTO.getImageUrl());
-//        newUser.setLangKey(userDTO.getLangKey());
-//        // new user is not active
-//        newUser.setActivated(false);
-//        // new user gets registration key
-//        newUser.setActivationKey(RandomUtil.generateActivationKey());
-//        Set<Authority> authorities = new HashSet<>();
-//        authorityRepository.findById(AuthoritiesConstants.USER).ifPresent(authorities::add);
-//        newUser.setAuthorities(authorities);
-//        userRepository.save(newUser);
-//        this.clearUserCaches(newUser);
-//        log.debug("Created Information for User: {}", newUser);
-//        return newUser;
-//    }
-
-    private boolean removeNonActivatedUser(User existingUser) {
-        if (existingUser.isActivated()) {
-            return false;
-        }
-        userRepository.delete(existingUser);
-        userRepository.flush();
-        this.clearUserCaches(existingUser);
-        return true;
-    }
-
-    public User createUser(AdminUserDTO userDTO) {
-        User user = new User();
-        user.setLogin(userDTO.getLogin().toLowerCase());
-        user.setFirstName(userDTO.getFirstName());
-        user.setLastName(userDTO.getLastName());
-        if (userDTO.getEmail() != null) {
-            user.setEmail(userDTO.getEmail().toLowerCase());
-        }
-        user.setImageUrl(userDTO.getImageUrl());
-        if (userDTO.getLangKey() == null) {
-            user.setLangKey(Constants.DEFAULT_LANGUAGE); // default language
-        } else {
-            user.setLangKey(userDTO.getLangKey());
-        }
-        String encryptedPassword = passwordEncoder.encode(RandomUtil.generatePassword());
-        user.setPassword(encryptedPassword);
-        user.setResetKey(RandomUtil.generateResetKey());
-        user.setResetDate(Instant.now());
-        user.setActivated(true);
-        if (userDTO.getAuthorities() != null) {
-            Set<Authority> authorities = userDTO
-                .getAuthorities()
-                .stream()
-                .map(authorityRepository::findById)
-                .filter(Optional::isPresent)
-                .map(Optional::get)
-                .collect(Collectors.toSet());
-            user.setAuthorities(authorities);
-        }
-        userRepository.save(user);
-        this.clearUserCaches(user);
-        log.debug("Created Information for User: {}", user);
-        return user;
-    }
-
-    /**
-     * Update all information for a specific user, and return the modified user.
-     *
-     * @param userDTO user to update.
-     * @return updated user.
-     */
-    public Optional<AdminUserDTO> updateUser(AdminUserDTO userDTO) {
-        return Optional
-            .of(userRepository.findById(userDTO.getId()))
-            .filter(Optional::isPresent)
-            .map(Optional::get)
-            .map(user -> {
-                this.clearUserCaches(user);
-                user.setLogin(userDTO.getLogin().toLowerCase());
-                user.setFirstName(userDTO.getFirstName());
-                user.setLastName(userDTO.getLastName());
-                if (userDTO.getEmail() != null) {
-                    user.setEmail(userDTO.getEmail().toLowerCase());
-                }
-                user.setImageUrl(userDTO.getImageUrl());
-                user.setActivated(userDTO.isActivated());
-                user.setLangKey(userDTO.getLangKey());
-                Set<Authority> managedAuthorities = user.getAuthorities();
-                managedAuthorities.clear();
-                userDTO
-                    .getAuthorities()
-                    .stream()
-                    .map(authorityRepository::findById)
-                    .filter(Optional::isPresent)
-                    .map(Optional::get)
-                    .forEach(managedAuthorities::add);
-                this.clearUserCaches(user);
-                log.debug("Changed Information for User: {}", user);
-                return user;
-            })
-            .map(AdminUserDTO::new);
-    }
-
-    public void deleteUser(String login) {
-        userRepository
-            .findOneByLogin(login)
-            .ifPresent(user -> {
-                userRepository.delete(user);
-                this.clearUserCaches(user);
-                log.debug("Deleted User: {}", user);
-            });
-    }
-
-    /**
-     * Update basic information (first name, last name, email, language) for the current user.
-     *
-     * @param firstName first name of user.
-     * @param lastName  last name of user.
-     * @param email     email id of user.
-     * @param langKey   language key.
-     * @param imageUrl  image URL of user.
-     */
-    public void updateUser(String firstName, String lastName, String email, String langKey, String imageUrl) {
-        SecurityUtils
-            .getCurrentUserLogin()
-            .flatMap(userRepository::findOneByLogin)
-            .ifPresent(user -> {
-                user.setFirstName(firstName);
-                user.setLastName(lastName);
-                if (email != null) {
-                    user.setEmail(email.toLowerCase());
-                }
-                user.setLangKey(langKey);
-                user.setImageUrl(imageUrl);
-                this.clearUserCaches(user);
-                log.debug("Changed Information for User: {}", user);
-            });
-    }
-
-    @Transactional
-    public void changePassword(String currentClearTextPassword, String newPassword) {
-        SecurityUtils
-            .getCurrentUserLogin()
-            .flatMap(userRepository::findOneByLogin)
-            .ifPresent(user -> {
-                String currentEncryptedPassword = user.getPassword();
-                if (!passwordEncoder.matches(currentClearTextPassword, currentEncryptedPassword)) {
-                    throw new InvalidPasswordException();
-                }
-                String encryptedPassword = passwordEncoder.encode(newPassword);
-                user.setPassword(encryptedPassword);
-                this.clearUserCaches(user);
-                log.debug("Changed password for User: {}", user);
-            });
-    }
-
-    @Transactional(readOnly = true)
-    public Page<AdminUserDTO> getAllManagedUsers(Pageable pageable) {
-        return userRepository.findAll(pageable).map(AdminUserDTO::new);
-    }
-
-    @Transactional(readOnly = true)
-    public Page<UserDTO> getAllPublicUsers(Pageable pageable) {
-        return userRepository.findAllByIdNotNullAndActivatedIsTrue(pageable).map(UserDTO::new);
-    }
-
-    @Transactional(readOnly = true)
-    public Optional<User> getUserWithAuthoritiesByLogin(String login) {
-        return userRepository.findOneWithAuthoritiesByLogin(login);
-    }
-
-    @Transactional(readOnly = true)
-    public Optional<User> getUserWithAuthorities() {
-        return SecurityUtils.getCurrentUserLogin().flatMap(userRepository::findOneWithAuthoritiesByLogin);
-    }
-
-    /**
-     * Not activated users should be automatically deleted after 3 days.
-     * <p>
-     * This is scheduled to get fired everyday, at 01:00 (am).
-     */
-    @Scheduled(cron = "0 0 1 * * ?")
-    public void removeNotActivatedUsers() {
-        userRepository
-            .findAllByActivatedIsFalseAndActivationKeyIsNotNullAndCreatedDateBefore(Instant.now().minus(3, ChronoUnit.DAYS))
-            .forEach(user -> {
-                log.debug("Deleting not activated user {}", user.getLogin());
-                userRepository.delete(user);
-                this.clearUserCaches(user);
-            });
-    }
-
-    /**
-     * Gets a list of all the authorities.
-     * @return a list of all the authorities.
-     */
-    @Transactional(readOnly = true)
-    public List<String> getAuthorities() {
-        return authorityRepository.findAll().stream().map(Authority::getName).collect(Collectors.toList());
-    }
-
-    private void clearUserCaches(User user) {
-        Objects.requireNonNull(cacheManager.getCache(UserRepository.USERS_BY_LOGIN_CACHE)).evict(user.getLogin());
-        if (user.getEmail() != null) {
-            Objects.requireNonNull(cacheManager.getCache(UserRepository.USERS_BY_EMAIL_CACHE)).evict(user.getEmail());
-        }
-    }
-    
-    
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/UsernameAlreadyUsedException.java b/pamapi/src/main/java/com/pollex/pam/service/UsernameAlreadyUsedException.java
deleted file mode 100644
index 3d011f8..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/UsernameAlreadyUsedException.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.pollex.pam.service;
-
-public class UsernameAlreadyUsedException extends RuntimeException {
-
-    private static final long serialVersionUID = 1L;
-
-    public UsernameAlreadyUsedException() {
-        super("Login name already used!");
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/AbstractAppointmentProcessDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/AbstractAppointmentProcessDTO.java
deleted file mode 100644
index 13b270d..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/AbstractAppointmentProcessDTO.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import com.pollex.pam.enums.ContactStatusEnum;
-
-public abstract class AbstractAppointmentProcessDTO{
-	
-	private ContactStatusEnum contactStatus;
-	private Long appointmentId;
-//	private Long closedInfoId;
-
-	public ContactStatusEnum getContactStatus() {
-		return contactStatus;
-	}
-
-	public void setContactStatus(ContactStatusEnum contactStatus) {
-		this.contactStatus = contactStatus;
-	}
-
-	public Long getAppointmentId() {
-		return appointmentId;
-	}
-
-	public void setAppointmentId(Long appointmentId) {
-		this.appointmentId = appointmentId;
-	}
-
-//	public Long getClosedInfoId() {
-//		return closedInfoId;
-//	}
-//
-//	public void setClosedInfoId(Long closedInfoId) {
-//		this.closedInfoId = closedInfoId;
-//	}
-
-	
-	
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/AddConsultantParam.java b/pamapi/src/main/java/com/pollex/pam/service/dto/AddConsultantParam.java
deleted file mode 100644
index 87749cf..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/AddConsultantParam.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import java.util.List;
-
-public class AddConsultantParam {
-    List<String> agentNoList;
-
-    public List<String> getAgentNoList() {
-        return agentNoList;
-    }
-
-    public void setAgentNoList(List<String> agentNoList) {
-        this.agentNoList = agentNoList;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/AdminUserDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/AdminUserDTO.java
deleted file mode 100644
index bcdafec..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/AdminUserDTO.java
+++ /dev/null
@@ -1,193 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import com.pollex.pam.config.Constants;
-import com.pollex.pam.domain.Authority;
-import com.pollex.pam.domain.User;
-import java.time.Instant;
-import java.util.Set;
-import java.util.stream.Collectors;
-import javax.validation.constraints.*;
-
-/**
- * A DTO representing a user, with his authorities.
- */
-public class AdminUserDTO {
-
-    private Long id;
-
-    @NotBlank
-    @Pattern(regexp = Constants.LOGIN_REGEX)
-    @Size(min = 1, max = 50)
-    private String login;
-
-    @Size(max = 50)
-    private String firstName;
-
-    @Size(max = 50)
-    private String lastName;
-
-    @Email
-    @Size(min = 5, max = 254)
-    private String email;
-
-    @Size(max = 256)
-    private String imageUrl;
-
-    private boolean activated = false;
-
-    @Size(min = 2, max = 10)
-    private String langKey;
-
-    private String createdBy;
-
-    private Instant createdDate;
-
-    private String lastModifiedBy;
-
-    private Instant lastModifiedDate;
-
-    private Set<String> authorities;
-
-    public AdminUserDTO() {
-        // Empty constructor needed for Jackson.
-    }
-
-    public AdminUserDTO(User user) {
-        this.id = user.getId();
-        this.login = user.getLogin();
-        this.firstName = user.getFirstName();
-        this.lastName = user.getLastName();
-        this.email = user.getEmail();
-        this.activated = user.isActivated();
-        this.imageUrl = user.getImageUrl();
-        this.langKey = user.getLangKey();
-        this.createdBy = user.getCreatedBy();
-        this.createdDate = user.getCreatedDate();
-        this.lastModifiedBy = user.getLastModifiedBy();
-        this.lastModifiedDate = user.getLastModifiedDate();
-        this.authorities = user.getAuthorities().stream().map(Authority::getName).collect(Collectors.toSet());
-    }
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getLogin() {
-        return login;
-    }
-
-    public void setLogin(String login) {
-        this.login = login;
-    }
-
-    public String getFirstName() {
-        return firstName;
-    }
-
-    public void setFirstName(String firstName) {
-        this.firstName = firstName;
-    }
-
-    public String getLastName() {
-        return lastName;
-    }
-
-    public void setLastName(String lastName) {
-        this.lastName = lastName;
-    }
-
-    public String getEmail() {
-        return email;
-    }
-
-    public void setEmail(String email) {
-        this.email = email;
-    }
-
-    public String getImageUrl() {
-        return imageUrl;
-    }
-
-    public void setImageUrl(String imageUrl) {
-        this.imageUrl = imageUrl;
-    }
-
-    public boolean isActivated() {
-        return activated;
-    }
-
-    public void setActivated(boolean activated) {
-        this.activated = activated;
-    }
-
-    public String getLangKey() {
-        return langKey;
-    }
-
-    public void setLangKey(String langKey) {
-        this.langKey = langKey;
-    }
-
-    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;
-    }
-
-    public String getLastModifiedBy() {
-        return lastModifiedBy;
-    }
-
-    public void setLastModifiedBy(String lastModifiedBy) {
-        this.lastModifiedBy = lastModifiedBy;
-    }
-
-    public Instant getLastModifiedDate() {
-        return lastModifiedDate;
-    }
-
-    public void setLastModifiedDate(Instant lastModifiedDate) {
-        this.lastModifiedDate = lastModifiedDate;
-    }
-
-    public Set<String> getAuthorities() {
-        return authorities;
-    }
-
-    public void setAuthorities(Set<String> authorities) {
-        this.authorities = authorities;
-    }
-
-    // prettier-ignore
-    @Override
-    public String toString() {
-        return "AdminUserDTO{" +
-            "login='" + login + '\'' +
-            ", firstName='" + firstName + '\'' +
-            ", lastName='" + lastName + '\'' +
-            ", email='" + email + '\'' +
-            ", imageUrl='" + imageUrl + '\'' +
-            ", activated=" + activated +
-            ", langKey='" + langKey + '\'' +
-            ", createdBy=" + createdBy +
-            ", createdDate=" + createdDate +
-            ", lastModifiedBy='" + lastModifiedBy + '\'' +
-            ", lastModifiedDate=" + lastModifiedDate +
-            ", authorities=" + authorities +
-            "}";
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCloseDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCloseDTO.java
deleted file mode 100644
index bc9a8e2..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCloseDTO.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import java.util.Date;
-
-import com.pollex.pam.enums.ContactStatusEnum;
-
-public class AppointmentCloseDTO{
-	
-//	private Long closedInfoId;
-	private String policyholderIdentityId;
-	private String planCode;
-	private Date policyEntryDate;
-	private String remark;
-	private String closedReason;
-	private String closedOtherReason;
-	private ContactStatusEnum contactStatus;
-	private Long appointmentId;
-	
-	public String getPolicyholderIdentityId() {
-		return policyholderIdentityId;
-	}
-	public void setPolicyholderIdentityId(String policyholderIdentityId) {
-		this.policyholderIdentityId = policyholderIdentityId;
-	}
-	public String getPlanCode() {
-		return planCode;
-	}
-	public void setPlanCode(String planCode) {
-		this.planCode = planCode;
-	}
-	public Date getPolicyEntryDate() {
-		return policyEntryDate;
-	}
-	public void setPolicyEntryDate(Date policyEntryDate) {
-		this.policyEntryDate = policyEntryDate;
-	}
-	public String getRemark() {
-		return remark;
-	}
-	public void setRemark(String remark) {
-		this.remark = remark;
-	}
-	public String getClosedReason() {
-		return closedReason;
-	}
-	public void setClosedReason(String closedReason) {
-		this.closedReason = closedReason;
-	}
-	public String getClosedOtherReason() {
-		return closedOtherReason;
-	}
-	public void setClosedOtherReason(String closedOtherReason) {
-		this.closedOtherReason = closedOtherReason;
-	}
-	public ContactStatusEnum getContactStatus() {
-		return contactStatus;
-	}
-	public void setContactStatus(ContactStatusEnum contactStatus) {
-		this.contactStatus = contactStatus;
-	}
-	public Long getAppointmentId() {
-		return appointmentId;
-	}
-	public void setAppointmentId(Long appointmentId) {
-		this.appointmentId = appointmentId;
-	}
-//	public Long getClosedInfoId() {
-//		return closedInfoId;
-//	}
-//	public void setClosedInfoId(Long closedInfoId) {
-//		this.closedInfoId = closedInfoId;
-//	}
-	
-	
-	
-	
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCreateDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCreateDTO.java
deleted file mode 100644
index 3c566ab..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCreateDTO.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package com.pollex.pam.service.dto;
-
-public class AppointmentCreateDTO {
-	
-    private String phone;
-    private String email;
-    private String contactType; //�蝯⊥撘�
-    private String gender;
-    private String age;
-    private String job;
-    private String requirement;
-    private String hopeContactTime; //撣�蝯∠����
-    private String otherRequirement;
-    private String agentNo;
-    
-	public String getPhone() {
-		return phone;
-	}
-	public void setPhone(String phone) {
-		this.phone = phone;
-	}
-	public String getEmail() {
-		return email;
-	}
-	public void setEmail(String email) {
-		this.email = email;
-	}
-	public String getContactType() {
-		return contactType;
-	}
-	public void setContactType(String contactType) {
-		this.contactType = contactType;
-	}
-	public String getGender() {
-		return gender;
-	}
-	public void setGender(String gender) {
-		this.gender = gender;
-	}
-	public String getJob() {
-		return job;
-	}
-	public void setJob(String job) {
-		this.job = job;
-	}
-	public String getRequirement() {
-		return requirement;
-	}
-	public void setRequirement(String requirement) {
-		this.requirement = requirement;
-	}
-	public String getHopeContactTime() {
-		return hopeContactTime;
-	}
-	public void setHopeContactTime(String hopeContactTime) {
-		this.hopeContactTime = hopeContactTime;
-	}
-	public String getOtherRequirement() {
-		return otherRequirement;
-	}
-	public void setOtherRequirement(String otherRequirement) {
-		this.otherRequirement = otherRequirement;
-	}
-	public String getAge() {
-		return age;
-	}
-	public void setAge(String age) {
-		this.age = age;
-	}
-	public String getAgentNo() {
-		return agentNo;
-	}
-	public void setAgentNo(String agentNo) {
-		this.agentNo = agentNo;
-	}
-    
-    
-	
-	
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCustomerViewDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCustomerViewDTO.java
deleted file mode 100644
index 6c3f3fb..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCustomerViewDTO.java
+++ /dev/null
@@ -1,187 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import java.time.Instant;
-import java.util.List;
-
-import com.pollex.pam.domain.AppointmentClosedInfo;
-import com.pollex.pam.domain.AppointmentMemo;
-import com.pollex.pam.domain.AppointmentNoticeLog;
-import com.pollex.pam.domain.InterviewRecord;
-import com.pollex.pam.enums.ContactStatusEnum;
-
-public class AppointmentCustomerViewDTO {
-
-	private Long id;
-    private String phone;
-    private String email;
-    private String contactType;
-    private String gender;
-    private String age;
-    private String job;
-    private String requirement;
-    private ContactStatusEnum communicateStatus;
-    private String hopeContactTime;
-    private String otherRequirement;
-    private Instant appointmentDate;
-    private Instant lastModifiedDate;
-    private String agentNo;
-    private Long customerId;
-    private String name;
-    private Instant consultantViewTime;
-    private Instant consultantReadTime;
-    private Instant contactTime;
-    private Float satisfactionScore;
-    private List<AppointmentMemo> appointmentMemoList;
-    private List<InterviewRecordDTO> interviewRecordDTOs;
-    private List<AppointmentNoticeLog> appointmentNoticeLogs;
-    private AppointmentClosedInfo appointmentClosedInfo;
-
-	public Long getId() {
-		return id;
-	}
-	public void setId(Long id) {
-		this.id = id;
-	}
-	public String getPhone() {
-		return phone;
-	}
-	public void setPhone(String phone) {
-		this.phone = phone;
-	}
-	public String getEmail() {
-		return email;
-	}
-	public void setEmail(String email) {
-		this.email = email;
-	}
-	public String getContactType() {
-		return contactType;
-	}
-	public void setContactType(String contactType) {
-		this.contactType = contactType;
-	}
-	public String getGender() {
-		return gender;
-	}
-	public void setGender(String gender) {
-		this.gender = gender;
-	}
-	public String getAge() {
-		return age;
-	}
-	public void setAge(String age) {
-		this.age = age;
-	}
-	public String getJob() {
-		return job;
-	}
-	public void setJob(String job) {
-		this.job = job;
-	}
-	public String getRequirement() {
-		return requirement;
-	}
-	public void setRequirement(String requirement) {
-		this.requirement = requirement;
-	}
-	public ContactStatusEnum getCommunicateStatus() {
-		return communicateStatus;
-	}
-	public void setCommunicateStatus(ContactStatusEnum communicateStatus) {
-		this.communicateStatus = communicateStatus;
-	}
-	public String getHopeContactTime() {
-		return hopeContactTime;
-	}
-	public void setHopeContactTime(String hopeContactTime) {
-		this.hopeContactTime = hopeContactTime;
-	}
-	public String getOtherRequirement() {
-		return otherRequirement;
-	}
-	public void setOtherRequirement(String otherRequirement) {
-		this.otherRequirement = otherRequirement;
-	}
-	public Instant getAppointmentDate() {
-		return appointmentDate;
-	}
-	public void setAppointmentDate(Instant appointmentDate) {
-		this.appointmentDate = appointmentDate;
-	}
-    public Instant getLastModifiedDate() {
-        return lastModifiedDate;
-    }
-    public void setLastModifiedDate(Instant lastModifiedDate) {
-        this.lastModifiedDate = lastModifiedDate;
-    }
-    public String getAgentNo() {
-		return agentNo;
-	}
-	public void setAgentNo(String agentNo) {
-		this.agentNo = agentNo;
-	}
-	public Long getCustomerId() {
-		return customerId;
-	}
-	public void setCustomerId(Long customerId) {
-		this.customerId = customerId;
-	}
-	public String getName() {
-		return name;
-	}
-	public void setName(String name) {
-		this.name = name;
-	}
-    public Instant getConsultantViewTime() {
-        return consultantViewTime;
-    }
-    public void setConsultantViewTime(Instant consultantViewTime) {
-        this.consultantViewTime = consultantViewTime;
-    }
-    public Instant getConsultantReadTime() {
-        return consultantReadTime;
-    }
-    public void setConsultantReadTime(Instant consultantReadTime) {
-        this.consultantReadTime = consultantReadTime;
-    }
-    public Instant getContactTime() {
-        return contactTime;
-    }
-    public void setContactTime(Instant contactTime) {
-        this.contactTime = contactTime;
-    }
-    public Float getSatisfactionScore() {
-        return satisfactionScore;
-    }
-    public void setSatisfactionScore(Float satisfactionScore) {
-        this.satisfactionScore = satisfactionScore;
-    }
-	public List<AppointmentMemo> getAppointmentMemoList() {
-		return appointmentMemoList;
-	}
-	public void setAppointmentMemoList(List<AppointmentMemo> appointmentMemoList) {
-		this.appointmentMemoList = appointmentMemoList;
-	}
-	public List<InterviewRecordDTO> getInterviewRecordDTOs() {
-		return interviewRecordDTOs;
-	}
-	public void setInterviewRecordDTOs(List<InterviewRecordDTO> interviewRecordDTOs) {
-		this.interviewRecordDTOs = interviewRecordDTOs;
-	}
-	public List<AppointmentNoticeLog> getAppointmentNoticeLogs() {
-		return appointmentNoticeLogs;
-	}
-	public void setAppointmentNoticeLogs(List<AppointmentNoticeLog> appointmentNoticeLogs) {
-		this.appointmentNoticeLogs = appointmentNoticeLogs;
-	}
-	public AppointmentClosedInfo getAppointmentClosedInfo() {
-		return appointmentClosedInfo;
-	}
-	public void setAppointmentClosedInfo(AppointmentClosedInfo appointmentClosedInfo) {
-		this.appointmentClosedInfo = appointmentClosedInfo;
-	}
-	
-	
-    
-    
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentDTO.java
deleted file mode 100644
index ea18083..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentDTO.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import java.time.Instant;
-
-import org.springframework.stereotype.Service;
-
-import com.pollex.pam.enums.ContactStatusEnum;
-
-public class AppointmentDTO {
-
-	private Long id;
-    private String phone;
-    private String email;
-    private String contactType;
-    private String gender;
-    private String age;
-    private String job;
-    private String requirement;
-    private ContactStatusEnum communicateStatus;
-    private String hopeContactTime;
-    private String otherRequirement;
-    private Instant appointmentDate;
-    private Instant lastModifiedDate;
-    private String agentNo;
-    private Long customerId;
-    private Instant consultantViewTime;
-    private Instant consultantReadTime;
-    private Instant contactTime;
-
-	public Long getId() {
-		return id;
-	}
-	public void setId(Long id) {
-		this.id = id;
-	}
-	public String getPhone() {
-		return phone;
-	}
-	public void setPhone(String phone) {
-		this.phone = phone;
-	}
-	public String getEmail() {
-		return email;
-	}
-	public void setEmail(String email) {
-		this.email = email;
-	}
-	public String getContactType() {
-		return contactType;
-	}
-	public void setContactType(String contactType) {
-		this.contactType = contactType;
-	}
-	public String getGender() {
-		return gender;
-	}
-	public void setGender(String gender) {
-		this.gender = gender;
-	}
-	public String getAge() {
-		return age;
-	}
-	public void setAge(String age) {
-		this.age = age;
-	}
-	public String getJob() {
-		return job;
-	}
-	public void setJob(String job) {
-		this.job = job;
-	}
-	public String getRequirement() {
-		return requirement;
-	}
-	public void setRequirement(String requirement) {
-		this.requirement = requirement;
-	}
-	public ContactStatusEnum getCommunicateStatus() {
-		return communicateStatus;
-	}
-	public void setCommunicateStatus(ContactStatusEnum communicateStatus) {
-		this.communicateStatus = communicateStatus;
-	}
-	public String getHopeContactTime() {
-		return hopeContactTime;
-	}
-	public void setHopeContactTime(String hopeContactTime) {
-		this.hopeContactTime = hopeContactTime;
-	}
-	public String getOtherRequirement() {
-		return otherRequirement;
-	}
-	public void setOtherRequirement(String otherRequirement) {
-		this.otherRequirement = otherRequirement;
-	}
-	public Instant getAppointmentDate() {
-		return appointmentDate;
-	}
-	public void setAppointmentDate(Instant appointmentDate) {
-		this.appointmentDate = appointmentDate;
-	}
-	public String getAgentNo() {
-		return agentNo;
-	}
-	public void setAgentNo(String agentNo) {
-		this.agentNo = agentNo;
-	}
-	public Long getCustomerId() {
-		return customerId;
-	}
-	public void setCustomerId(Long customerId) {
-		this.customerId = customerId;
-	}
-    public Instant getConsultantViewTime() {
-        return consultantViewTime;
-    }
-    public void setConsultantViewTime(Instant consultantViewTime) {
-        this.consultantViewTime = consultantViewTime;
-    }
-    public Instant getConsultantReadTime() {
-        return consultantReadTime;
-    }
-    public void setConsultantReadTime(Instant consultantReadTime) {
-        this.consultantReadTime = consultantReadTime;
-    }
-    public Instant getLastModifiedDate() {
-        return lastModifiedDate;
-    }
-
-    public void setLastModifiedDate(Instant lastModifiedDate) {
-        this.lastModifiedDate = lastModifiedDate;
-    }
-    public Instant getContactTime() {
-        return contactTime;
-    }
-    public void setContactTime(Instant contactTime) {
-        this.contactTime = contactTime;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentMemoCreateDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentMemoCreateDTO.java
deleted file mode 100644
index 1750480..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentMemoCreateDTO.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.pollex.pam.service.dto;
-
-public class AppointmentMemoCreateDTO {
-	
-    private String content;
-    private Long appointmentId;
-    
-	public String getContent() {
-		return content;
-	}
-	public void setContent(String content) {
-		this.content = content;
-	}
-	public Long getAppointmentId() {
-		return appointmentId;
-	}
-	public void setAppointmentId(Long appointmentId) {
-		this.appointmentId = appointmentId;
-	}
-    
-    
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentMemoUpdateDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentMemoUpdateDTO.java
deleted file mode 100644
index 262838a..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentMemoUpdateDTO.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.pollex.pam.service.dto;
-
-public class AppointmentMemoUpdateDTO{
-	
-	private Long id;
-	private String content;
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getContent() {
-		return content;
-	}
-
-	public void setContent(String content) {
-		this.content = content;
-	}
-	
-	
-	
-	
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentNoticeSendDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentNoticeSendDTO.java
deleted file mode 100644
index 2256fc8..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentNoticeSendDTO.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import java.util.Date;
-
-public class AppointmentNoticeSendDTO {
-	
-	private String message;
-	private Long appointmentId;
-	private String email;
-	private String phone;
-//	private String noticeType;
-	private Date interviewDate;
-	
-	public String getMessage() {
-		return message;
-	}
-	public void setMessage(String message) {
-		this.message = message;
-	}
-	public Long getAppointmentId() {
-		return appointmentId;
-	}
-	public void setAppointmentId(Long appointmentId) {
-		this.appointmentId = appointmentId;
-	}
-//	public String getNoticeType() {
-//		return noticeType;
-//	}
-//	public void setNoticeType(String noticeType) {
-//		this.noticeType = noticeType;
-//	}
-	public String getEmail() {
-		return email;
-	}
-	public void setEmail(String email) {
-		this.email = email;
-	}
-	public String getPhone() {
-		return phone;
-	}
-	public void setPhone(String phone) {
-		this.phone = phone;
-	}
-	public Date getInterviewDate() {
-		return interviewDate;
-	}
-	public void setInterviewDate(Date interviewDate) {
-		this.interviewDate = interviewDate;
-	}
-	
-	
-	
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentUpdateDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentUpdateDTO.java
deleted file mode 100644
index 0be3753..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentUpdateDTO.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.pollex.pam.service.dto;
-
-public class AppointmentUpdateDTO {
-    private Long id;
-    private String phone;
-    private String email;
-    private String contactType;
-    private String gender;
-    private String age;
-    private String job;
-    private String requirement;
-    private String hopeContactTime;
-    private String otherRequirement;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getPhone() {
-        return phone;
-    }
-
-    public void setPhone(String phone) {
-        this.phone = phone;
-    }
-
-    public String getEmail() {
-        return email;
-    }
-
-    public void setEmail(String email) {
-        this.email = email;
-    }
-
-    public String getContactType() {
-        return contactType;
-    }
-
-    public void setContactType(String contactType) {
-        this.contactType = contactType;
-    }
-
-    public String getGender() {
-        return gender;
-    }
-
-    public void setGender(String gender) {
-        this.gender = gender;
-    }
-
-    public String getAge() {
-        return age;
-    }
-
-    public void setAge(String age) {
-        this.age = age;
-    }
-
-    public String getJob() {
-        return job;
-    }
-
-    public void setJob(String job) {
-        this.job = job;
-    }
-
-    public String getRequirement() {
-        return requirement;
-    }
-
-    public void setRequirement(String requirement) {
-        this.requirement = requirement;
-    }
-
-    public String getHopeContactTime() {
-        return hopeContactTime;
-    }
-
-    public void setHopeContactTime(String hopeContactTime) {
-        this.hopeContactTime = hopeContactTime;
-    }
-
-    public String getOtherRequirement() {
-        return otherRequirement;
-    }
-
-    public void setOtherRequirement(String otherRequirement) {
-        this.otherRequirement = otherRequirement;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/ClosedProcessDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/ClosedProcessDTO.java
deleted file mode 100644
index 9b18da4..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/ClosedProcessDTO.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.pollex.pam.service.dto;
-
-public class ClosedProcessDTO extends AbstractAppointmentProcessDTO{
-	
-	private String remark;
-	private String closedReason;
-	private String closedOtherReason;
-	
-	public String getRemark() {
-		return remark;
-	}
-	public void setRemark(String remark) {
-		this.remark = remark;
-	}
-	public String getClosedReason() {
-		return closedReason;
-	}
-	public void setClosedReason(String closedReason) {
-		this.closedReason = closedReason;
-	}
-	public String getClosedOtherReason() {
-		return closedOtherReason;
-	}
-	public void setClosedOtherReason(String closedOtherReason) {
-		this.closedOtherReason = closedOtherReason;
-	}
-	
-	
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDTO.java
deleted file mode 100644
index f847769..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDTO.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.pollex.pam.enums.ContactStatusEnum;
-
-import java.time.Instant;
-import java.time.temporal.ChronoUnit;
-import java.util.List;
-
-public class ConsultantDTO {
-
-    @JsonProperty("new")
-    private boolean newConsultant;
-    private String agentNo;
-    private String name;
-    private String img;
-    private List<String> expertise;
-    private Float avgScore;
-    private ContactStatusEnum contactStatus;
-    private Instant updateTime;
-    private String role;
-    private String seniority;
-    private int suitability;
-
-    public boolean isNewConsultant() {
-        if(updateTime != null){
-            Instant nowTimestamp = Instant.now();
-            return ChronoUnit.DAYS.between(updateTime, nowTimestamp) < 3;
-        }
-        return false;
-    }
-
-    public String getAgentNo() {
-        return agentNo;
-    }
-
-    public void setAgentNo(String agentNo) {
-        this.agentNo = agentNo;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getImg() {
-        return img;
-    }
-
-    public void setImg(String img) {
-        this.img = img;
-    }
-
-    public List<String> getExpertise() {
-        return expertise;
-    }
-
-    public void setExpertise(List<String> expertise) {
-        this.expertise = expertise;
-    }
-
-    public Float getAvgScore() {
-        return avgScore;
-    }
-
-    public void setAvgScore(Float avgScore) {
-        this.avgScore = avgScore;
-    }
-
-    public ContactStatusEnum getContactStatus() {
-        return contactStatus;
-    }
-
-    public void setContactStatus(ContactStatusEnum contactStatus) {
-        this.contactStatus = contactStatus;
-    }
-
-    public Instant getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Instant updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public String getRole() {
-        return role;
-    }
-
-    public void setRole(String role) {
-        this.role = role;
-    }
-
-    public String getSeniority() {
-        return seniority;
-    }
-
-    public void setSeniority(String seniority) {
-        this.seniority = seniority;
-    }
-
-    public void setNewConsultant(boolean newConsultant) {
-        this.newConsultant = newConsultant;
-    }
-
-    public int getSuitability() {
-        return suitability;
-    }
-
-    public void setSuitability(int suitability) {
-        this.suitability = suitability;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDetailDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDetailDTO.java
deleted file mode 100644
index ea92f3f..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDetailDTO.java
+++ /dev/null
@@ -1,184 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import java.time.Instant;
-import java.util.List;
-
-import com.pollex.pam.enums.GenderEnum;
-
-public class ConsultantDetailDTO {
-
-    private String name;
-    private String agentNo;
-    private String role;
-    private String img;
-    private Float avgScore;
-    private String title;
-    private String phoneNumber;
-    private String serveArea;
-    private String companyAddress;
-    private Instant latestLoginTime;
-    private String seniority;
-    private Number evaluation;
-    private List<String> expertise;
-    private String concept;
-    private String experiences;
-    private String awards;
-    private GenderEnum gender;
-    private String communicationStyle;
-    private String email;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getAgentNo() {
-        return agentNo;
-    }
-
-    public void setAgentNo(String agentNo) {
-        this.agentNo = agentNo;
-    }
-
-    public String getRole() {
-        return role;
-    }
-
-    public void setRole(String role) {
-        this.role = role;
-    }
-
-    public String getImg() {
-        return img;
-    }
-
-    public void setImg(String img) {
-        this.img = img;
-    }
-
-    public Float getAvgScore() {
-        return avgScore;
-    }
-
-    public void setAvgScore(Float avgScore) {
-        this.avgScore = avgScore;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public String getPhoneNumber() {
-        return phoneNumber;
-    }
-
-    public void setPhoneNumber(String phoneNumber) {
-        this.phoneNumber = phoneNumber;
-    }
-
-    public String getServeArea() {
-        return serveArea;
-    }
-
-    public void setServeArea(String serveArea) {
-        this.serveArea = serveArea;
-    }
-
-    public String getCompanyAddress() {
-        return companyAddress;
-    }
-
-    public void setCompanyAddress(String companyAddress) {
-        this.companyAddress = companyAddress;
-    }
-
-    public Instant getLatestLoginTime() {
-        return latestLoginTime;
-    }
-
-    public void setLatestLoginTime(Instant latestLoginTime) {
-        this.latestLoginTime = latestLoginTime;
-    }
-
-    public String getSeniority() {
-        return seniority;
-    }
-
-    public void setSeniority(String seniority) {
-        this.seniority = seniority;
-    }
-
-    public Number getEvaluation() {
-        return evaluation;
-    }
-
-    public void setEvaluation(Number evaluation) {
-        this.evaluation = evaluation;
-    }
-
-    public List<String> getExpertise() {
-        return expertise;
-    }
-
-    public void setExpertise(List<String> expertise) {
-        this.expertise = expertise;
-    }
-
-    public String getConcept() {
-        return concept;
-    }
-
-    public void setConcept(String concept) {
-        this.concept = concept;
-    }
-
-    public String getExperiences() {
-        return experiences;
-    }
-
-    public void setExperiences(String experiences) {
-        this.experiences = experiences;
-    }
-
-    public String getAwards() {
-        return awards;
-    }
-
-    public void setAwards(String awards) {
-        this.awards = awards;
-    }
-
-	public GenderEnum getGender() {
-		return gender;
-	}
-
-	public void setGender(GenderEnum gender) {
-		this.gender = gender;
-	}
-
-	public String getCommunicationStyle() {
-		return communicationStyle;
-	}
-
-	public void setCommunicationStyle(String communicationStyle) {
-		this.communicationStyle = communicationStyle;
-	}
-
-	public String getEmail() {
-		return email;
-	}
-
-	public void setEmail(String email) {
-		this.email = email;
-	}
-
-
-
-}
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
deleted file mode 100644
index 0489a1d..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantEditDTO.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import java.util.List;
-
-import com.pollex.pam.enums.GenderEnum;
-
-public class ConsultantEditDTO {
-	
-//	private Long id;
-    private String name;
-    private List<String> expertise;
-    private String title;
-    private String role;
-    private String serveArea;
-    private GenderEnum gender;
-    private String phoneNumber;
-    private String companyAddress;
-    private Long seniorityYear;
-    private Long seniorityMonth;
-    private String concept;
-    private String experiences;
-    private String awards;
-    private String communicationStyle;
-    private String photoBase64;
-    private String photoFileName;
-    private String agentNo;
-    
-//	public Long getId() {
-//		return id;
-//	}
-//	public void setId(Long id) {
-//		this.id = id;
-//	}
-	public String getName() {
-		return name;
-	}
-	public void setName(String name) {
-		this.name = name;
-	}
-	public List<String> getExpertise() {
-		return expertise;
-	}
-	public void setExpertise(List<String> expertise) {
-		this.expertise = expertise;
-	}
-	public String getTitle() {
-		return title;
-	}
-	public void setTitle(String title) {
-		this.title = title;
-	}
-	public String getRole() {
-		return role;
-	}
-	public void setRole(String role) {
-		this.role = role;
-	}
-	public String getServeArea() {
-		return serveArea;
-	}
-	public void setServeArea(String serveArea) {
-		this.serveArea = serveArea;
-	}
-	public GenderEnum getGender() {
-		return gender;
-	}
-	public void setGender(GenderEnum gender) {
-		this.gender = gender;
-	}
-	public String getPhoneNumber() {
-		return phoneNumber;
-	}
-	public void setPhoneNumber(String phoneNumber) {
-		this.phoneNumber = phoneNumber;
-	}
-	public String getCompanyAddress() {
-		return companyAddress;
-	}
-	public void setCompanyAddress(String companyAddress) {
-		this.companyAddress = companyAddress;
-	}
-	public Long getSeniorityYear() {
-		return seniorityYear;
-	}
-	public void setSeniorityYear(Long seniorityYear) {
-		this.seniorityYear = seniorityYear;
-	}
-	public Long getSeniorityMonth() {
-		return seniorityMonth;
-	}
-	public void setSeniorityMonth(Long seniorityMonth) {
-		this.seniorityMonth = seniorityMonth;
-	}
-	public String getConcept() {
-		return concept;
-	}
-	public void setConcept(String concept) {
-		this.concept = concept;
-	}
-	public String getExperiences() {
-		return experiences;
-	}
-	public void setExperiences(String experiences) {
-		this.experiences = experiences;
-	}
-	public String getAwards() {
-		return awards;
-	}
-	public void setAwards(String awards) {
-		this.awards = awards;
-	}
-	public String getCommunicationStyle() {
-		return communicationStyle;
-	}
-	public void setCommunicationStyle(String communicationStyle) {
-		this.communicationStyle = communicationStyle;
-	}
-	public String getPhotoBase64() {
-		return photoBase64;
-	}
-	public void setPhotoBase64(String photoBase64) {
-		this.photoBase64 = photoBase64;
-	}
-	public String getPhotoFileName() {
-		return "consultant_"+this.getAgentNo()+".jpg";
-	}
-	public String getAgentNo() {
-		return agentNo;
-	}
-	public void setAgentNo(String agentNo) {
-		this.agentNo = agentNo;
-	}
-	
-    
-    
-    
-    
-    
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/CustomerDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/CustomerDTO.java
deleted file mode 100644
index 176dc0b..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/CustomerDTO.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.pollex.pam.service.dto;
-
-public class CustomerDTO {
-    private String email;
-    private String phone;
-    private String name;
-
-    public String getEmail() {
-        return email;
-    }
-
-    public void setEmail(String email) {
-        this.email = email;
-    }
-
-    public String getPhone() {
-        return phone;
-    }
-
-    public void setPhone(String phone) {
-        this.phone = phone;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/CustomerFavoriteConsultantDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/CustomerFavoriteConsultantDTO.java
deleted file mode 100644
index bdcdfd6..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/CustomerFavoriteConsultantDTO.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.pollex.pam.enums.ContactStatusEnum;
-
-import java.time.Instant;
-import java.time.temporal.ChronoUnit;
-import java.util.List;
-
-public class CustomerFavoriteConsultantDTO {
-
-    private String agentNo;
-    private String name;
-    private String img;
-    private List<String> expertise;
-    private Float avgScore;
-    private ContactStatusEnum contactStatus;
-    private Instant createTime;
-    private Instant updateTime;
-    private Instant customerViewTime;
-    private String role;
-    private String seniority;
-    private List<AppointmentCustomerViewDTO> appointments;
-
-    public String getAgentNo() {
-        return agentNo;
-    }
-
-    public void setAgentNo(String agentNo) {
-        this.agentNo = agentNo;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getImg() {
-        return img;
-    }
-
-    public void setImg(String img) {
-        this.img = img;
-    }
-
-    public List<String> getExpertise() {
-        return expertise;
-    }
-
-    public void setExpertise(List<String> expertise) {
-        this.expertise = expertise;
-    }
-
-    public Float getAvgScore() {
-        return avgScore;
-    }
-
-    public void setAvgScore(Float avgScore) {
-        this.avgScore = avgScore;
-    }
-
-    public ContactStatusEnum getContactStatus() {
-        return contactStatus;
-    }
-
-    public void setContactStatus(ContactStatusEnum contactStatus) {
-        this.contactStatus = contactStatus;
-    }
-
-    public Instant getCreateTime() {
-        return createTime;
-    }
-
-    public Instant getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setCreateTime(Instant createTime) {
-        this.createTime = createTime;
-    }
-
-    public void setUpdateTime(Instant updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public Instant getCustomerViewTime() {
-        return customerViewTime;
-    }
-
-    public void setCustomerViewTime(Instant customerViewTime) {
-        this.customerViewTime = customerViewTime;
-    }
-
-    public String getRole() {
-        return role;
-    }
-
-    public void setRole(String role) {
-        this.role = role;
-    }
-
-    public String getSeniority() {
-        return seniority;
-    }
-
-    public void setSeniority(String seniority) {
-        this.seniority = seniority;
-    }
-
-    public List<AppointmentCustomerViewDTO> getAppointments() {
-        return appointments;
-    }
-
-    public void setAppointments(List<AppointmentCustomerViewDTO> appointments) {
-        this.appointments = appointments;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/CustomerRegisterDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/CustomerRegisterDTO.java
deleted file mode 100644
index 058cc56..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/CustomerRegisterDTO.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import com.pollex.pam.enums.OtpLoginTypeEnum;
-
-public class CustomerRegisterDTO {
-	
-    private String name;
-    private String phone;
-    private String email;
-    private OtpLoginTypeEnum contactType;
-    private String indexKey;
-    private String otpCode;
-    
-	public String getName() {
-		return name;
-	}
-	public void setName(String name) {
-		this.name = name;
-	}
-	public String getPhone() {
-		return phone;
-	}
-	public void setPhone(String phone) {
-		this.phone = phone;
-	}
-	public String getEmail() {
-		return email;
-	}
-	public void setEmail(String email) {
-		this.email = email;
-	}
-	public OtpLoginTypeEnum getContactType() {
-		return contactType;
-	}
-	public void setContactType(OtpLoginTypeEnum contactType) {
-		this.contactType = contactType;
-	}
-	public String getIndexKey() {
-		return indexKey;
-	}
-	public void setIndexKey(String indexKey) {
-		this.indexKey = indexKey;
-	}
-	public String getOtpCode() {
-		return otpCode;
-	}
-	public void setOtpCode(String otpCode) {
-		this.otpCode = otpCode;
-	}
-    
-    
-	
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/DoneProcessDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/DoneProcessDTO.java
deleted file mode 100644
index 2c9881a..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/DoneProcessDTO.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import java.util.Date;
-
-public class DoneProcessDTO extends AbstractAppointmentProcessDTO{
-	
-	private String policyholderIdentityId;
-	private String planCode;
-	private Date policyEntryDate;
-	private String remark;
-	
-	public String getPolicyholderIdentityId() {
-		return policyholderIdentityId;
-	}
-	public void setPolicyholderIdentityId(String policyholderIdentityId) {
-		this.policyholderIdentityId = policyholderIdentityId;
-	}
-	public String getPlanCode() {
-		return planCode;
-	}
-	public void setPlanCode(String planCode) {
-		this.planCode = planCode;
-	}
-	public Date getPolicyEntryDate() {
-		return policyEntryDate;
-	}
-	public void setPolicyEntryDate(Date policyEntryDate) {
-		this.policyEntryDate = policyEntryDate;
-	}
-	public String getRemark() {
-		return remark;
-	}
-	public void setRemark(String remark) {
-		this.remark = remark;
-	}
-	
-	
-	
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/EServiceRequest.java b/pamapi/src/main/java/com/pollex/pam/service/dto/EServiceRequest.java
deleted file mode 100644
index 00e139d..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/EServiceRequest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.pollex.pam.service.dto;
-
-public class EServiceRequest {
-    private String func;
-    private String id;
-    private String pin;
-    private String pwd;
-    private String sys;
-
-    public String getFunc() {
-        return func;
-    }
-
-    public void setFunc(String func) {
-        this.func = func;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getPin() {
-        return pin;
-    }
-
-    public void setPin(String pin) {
-        this.pin = pin;
-    }
-
-    public String getPwd() {
-        return pwd;
-    }
-
-    public void setPwd(String pwd) {
-        this.pwd = pwd;
-    }
-
-    public String getSys() {
-        return sys;
-    }
-
-    public void setSys(String sys) {
-        this.sys = sys;
-    }
-}
-
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/EServiceResponse.java b/pamapi/src/main/java/com/pollex/pam/service/dto/EServiceResponse.java
deleted file mode 100644
index a04681d..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/EServiceResponse.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import java.util.List;
-
-public class EServiceResponse {
-    private String issuccess;
-    private String code;
-    private String msg;
-    private List<EServiceData> data;
-
-    public String getIssuccess() {
-        return issuccess;
-    }
-
-    public void setIssuccess(String issuccess) {
-        this.issuccess = issuccess;
-    }
-
-    public String getCode() {
-        return code;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-
-    public String getMsg() {
-        return msg;
-    }
-
-    public void setMsg(String msg) {
-        this.msg = msg;
-    }
-
-    public List<EServiceData> getData() {
-        return data;
-    }
-
-    public void setData(List<EServiceData> data) {
-        this.data = data;
-    }
-
-    @Override
-    public String toString() {
-        return "EServiceResponse{" +
-            "issuccess='" + issuccess + '\'' +
-            ", code='" + code + '\'' +
-            ", msg='" + msg + '\'' +
-            '}';
-    }
-}
-
-class EServiceData {
-    private String usr;
-    private String isactive;
-    private String role;
-
-    public String getUsr() {
-        return usr;
-    }
-
-    public void setUsr(String usr) {
-        this.usr = usr;
-    }
-
-    public String getIsactive() {
-        return isactive;
-    }
-
-    public void setIsactive(String isactive) {
-        this.isactive = isactive;
-    }
-
-    public String getRole() {
-        return role;
-    }
-
-    public void setRole(String role) {
-        this.role = role;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/FastQueryConsultantParam.java b/pamapi/src/main/java/com/pollex/pam/service/dto/FastQueryConsultantParam.java
deleted file mode 100644
index a8c443d..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/FastQueryConsultantParam.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import com.pollex.pam.enums.GenderEnum;
-
-import java.util.List;
-
-public class FastQueryConsultantParam {
-
-    private GenderEnum gender;
-    private List<String> communicationStyles;
-    private Number avgScore;
-    private String status;
-    private String seniority;
-
-    public GenderEnum getGender() {
-        return gender;
-    }
-
-    public void setGender(GenderEnum gender) {
-        this.gender = gender;
-    }
-
-    public List<String> getCommunicationStyles() {
-        return communicationStyles;
-    }
-
-    public void setCommunicationStyles(List<String> communicationStyles) {
-        this.communicationStyles = communicationStyles;
-    }
-
-    public Number getAvgScore() {
-        return avgScore;
-    }
-
-    public void setAvgScore(Number avgScore) {
-        this.avgScore = avgScore;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    public String getSeniority() {
-        return seniority;
-    }
-
-    public void setSeniority(String seniority) {
-        this.seniority = seniority;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/InterviewRecordDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/InterviewRecordDTO.java
deleted file mode 100644
index 83c3a7b..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/InterviewRecordDTO.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import java.time.Instant;
-import java.util.Date;
-
-public class InterviewRecordDTO {
-	
-	private Long id;
-	private String content;
-	private Instant createdDate;
-    private Instant lastModifiedDate;
-    private String createdBy;
-    private String lastModifiedBy;
-    private Date interviewDate;
-    private Long appointmentId;
-    
-	public Long getId() {
-		return id;
-	}
-	public void setId(Long id) {
-		this.id = id;
-	}
-	public String getContent() {
-		return content;
-	}
-	public void setContent(String content) {
-		this.content = content;
-	}
-	public Instant getCreatedDate() {
-		return createdDate;
-	}
-	public void setCreatedDate(Instant createdDate) {
-		this.createdDate = createdDate;
-	}
-	public Instant getLastModifiedDate() {
-		return lastModifiedDate;
-	}
-	public void setLastModifiedDate(Instant lastModifiedDate) {
-		this.lastModifiedDate = lastModifiedDate;
-	}
-	public String getCreatedBy() {
-		return createdBy;
-	}
-	public void setCreatedBy(String createdBy) {
-		this.createdBy = createdBy;
-	}
-	public String getLastModifiedBy() {
-		return lastModifiedBy;
-	}
-	public void setLastModifiedBy(String lastModifiedBy) {
-		this.lastModifiedBy = lastModifiedBy;
-	}
-	public Date getInterviewDate() {
-		return interviewDate;
-	}
-	public void setInterviewDate(Date interviewDate) {
-		this.interviewDate = interviewDate;
-	}
-	public Long getAppointmentId() {
-		return appointmentId;
-	}
-	public void setAppointmentId(Long appointmentId) {
-		this.appointmentId = appointmentId;
-	}
-    
-    
-    
-	
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/OtpResponseDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/OtpResponseDTO.java
deleted file mode 100644
index 68d0704..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/OtpResponseDTO.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import java.util.Arrays;
-import java.util.List;
-
-public class OtpResponseDTO {
-    private static final String OTP_SUCCESS_CODE = "0";
-    private final String indexKey;
-    private final boolean success;
-    private final String failCode;
-    private final String failReason;
-
-    public OtpResponseDTO(String[] strings) {
-        this(Arrays.asList(strings));
-    }
-
-    public OtpResponseDTO(List<String> strings) {
-        if(strings.size() == 4) {
-            this.indexKey = strings.get(0);
-            this.success = OTP_SUCCESS_CODE.equals(strings.get(1));
-            this.failCode = strings.get(2);
-            this.failReason = strings.get(3);
-        }
-        else {
-            throw new IllegalArgumentException("the otp response can't format: " + strings);
-        }
-    }
-
-    public String getIndexKey() {
-        return indexKey;
-    }
-
-    public boolean isSuccess() {
-        return success;
-    }
-
-    public String getFailCode() {
-        return failCode;
-    }
-
-    public String getFailReason() {
-        return failReason;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/PasswordChangeDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/PasswordChangeDTO.java
deleted file mode 100644
index 0ad177f..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/PasswordChangeDTO.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.pollex.pam.service.dto;
-
-/**
- * A DTO representing a password change required data - current and new password.
- */
-public class PasswordChangeDTO {
-
-    private String currentPassword;
-    private String newPassword;
-
-    public PasswordChangeDTO() {
-        // Empty constructor needed for Jackson.
-    }
-
-    public PasswordChangeDTO(String currentPassword, String newPassword) {
-        this.currentPassword = currentPassword;
-        this.newPassword = newPassword;
-    }
-
-    public String getCurrentPassword() {
-        return currentPassword;
-    }
-
-    public void setCurrentPassword(String currentPassword) {
-        this.currentPassword = currentPassword;
-    }
-
-    public String getNewPassword() {
-        return newPassword;
-    }
-
-    public void setNewPassword(String newPassword) {
-        this.newPassword = newPassword;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/SMSDetail.java b/pamapi/src/main/java/com/pollex/pam/service/dto/SMSDetail.java
deleted file mode 100644
index 8cbc3da..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/SMSDetail.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class SMSDetail {
-    private String mobile;
-    private String content;
-
-    @JsonProperty("mobile")
-    public String getMobile() {
-        return mobile;
-    }
-
-    public void setMobile(String mobile) {
-        this.mobile = mobile;
-    }
-
-    @JsonProperty("content")
-    public String getContent() {
-        return content;
-    }
-
-    public void setContent(String content) {
-        this.content = content;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionCustomerScoreDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionCustomerScoreDTO.java
deleted file mode 100644
index 1cbf0e3..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionCustomerScoreDTO.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import com.pollex.pam.enums.SatisfactionTypeEnum;
-
-public class SatisfactionCustomerScoreDTO {
-
-	private Long appointmentId;
-	private Float score;
-    private SatisfactionTypeEnum type;
-
-	public Long getAppointmentId() {
-		return appointmentId;
-	}
-	public void setAppointmentId(Long appointmentId) {
-		this.appointmentId = appointmentId;
-	}
-	public Float getScore() {
-		return score;
-	}
-	public void setScore(Float score) {
-		this.score = score;
-	}
-    public SatisfactionTypeEnum getType() {
-        return type;
-    }
-    public void setType(SatisfactionTypeEnum type) {
-        this.type = type;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionDTO.java
deleted file mode 100644
index 152a82d..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionDTO.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import java.time.Instant;
-
-import com.pollex.pam.enums.SatisfactionStatusEnum;
-import com.pollex.pam.enums.SatisfactionTypeEnum;
-
-public class SatisfactionDTO {
-
-	private Long id;
-    private Instant createdDate;
-    private Instant lastModifiedDate;
-    private Long customerId;
-    private String agentNo;
-    private SatisfactionStatusEnum status;
-    private Float score;
-    private Long appointmentId;
-    private String customerName;
-    private String agentName;
-    private SatisfactionTypeEnum type;
-
-	public Long getId() {
-		return id;
-	}
-	public void setId(Long id) {
-		this.id = id;
-	}
-	public Instant getCreatedDate() {
-		return createdDate;
-	}
-	public void setCreatedDate(Instant createdDate) {
-		this.createdDate = createdDate;
-	}
-	public Instant getLastModifiedDate() {
-		return lastModifiedDate;
-	}
-	public void setLastModifiedDate(Instant lastModifiedDate) {
-		this.lastModifiedDate = lastModifiedDate;
-	}
-	public Long getCustomerId() {
-		return customerId;
-	}
-	public void setCustomerId(Long customerId) {
-		this.customerId = customerId;
-	}
-	public String getAgentNo() {
-		return agentNo;
-	}
-	public void setAgentNo(String agentNo) {
-		this.agentNo = agentNo;
-	}
-	public SatisfactionStatusEnum getStatus() {
-		return status;
-	}
-	public void setStatus(SatisfactionStatusEnum status) {
-		this.status = status;
-	}
-	public Float getScore() {
-		return score;
-	}
-	public void setScore(Float score) {
-		this.score = score;
-	}
-	public Long getAppointmentId() {
-		return appointmentId;
-	}
-	public void setAppointmentId(Long appointmentId) {
-		this.appointmentId = appointmentId;
-	}
-	public String getCustomerName() {
-		return customerName;
-	}
-	public void setCustomerName(String customerName) {
-		this.customerName = customerName;
-	}
-	public String getAgentName() {
-		return agentName;
-	}
-	public void setAgentName(String agentName) {
-		this.agentName = agentName;
-	}
-    public SatisfactionTypeEnum getType() {
-        return type;
-    }
-    public void setType(SatisfactionTypeEnum type) {
-        this.type = type;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionUpdateDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionUpdateDTO.java
deleted file mode 100644
index 1a8435f..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionUpdateDTO.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.pollex.pam.service.dto;
-
-public class SatisfactionUpdateDTO {
-	
-	private Long id;
-    private Long customerId;
-    private String agentNo;
-    private String status;
-    private String score;
-    
-	public Long getId() {
-		return id;
-	}
-	public void setId(Long id) {
-		this.id = id;
-	}
-	public Long getCustomerId() {
-		return customerId;
-	}
-	public void setCustomerId(Long customerId) {
-		this.customerId = customerId;
-	}
-	public String getAgentNo() {
-		return agentNo;
-	}
-	public void setAgentNo(String agentNo) {
-		this.agentNo = agentNo;
-	}
-	public String getStatus() {
-		return status;
-	}
-	public void setStatus(String status) {
-		this.status = status;
-	}
-	public String getScore() {
-		return score;
-	}
-	public void setScore(String score) {
-		this.score = score;
-	}
-    
-    
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/SendMailRequest.java b/pamapi/src/main/java/com/pollex/pam/service/dto/SendMailRequest.java
deleted file mode 100644
index 2470a67..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/SendMailRequest.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import java.util.List;
-
-public class SendMailRequest {
-
-    /**
-     * �隞嗉��
-     */
-    private List<String> sendMailAddresses;
-    /**
-     * ��
-     */
-    private List<String> sendCCMailAddresses;
-    /**
-     * 銝駁��
-     */
-    private String subject;
-    /**
-     * ����
-     */
-    private String content;
-    /**
-     * 撖辣��
-     */
-    private String from;
-    /**
-     * ��辣頝臬��
-     */
-    private List<String> attachments;
-    /**
-     * �� html format
-     */
-    private boolean htmlFormat;
-    /**
-     * �摰儔閮���� (������������神甇餃�pos)
-     */
-    private String functionId;
-
-    public List<String> getSendMailAddresses() {
-        return sendMailAddresses;
-    }
-
-    public void setSendMailAddresses(List<String> sendMailAddresses) {
-        this.sendMailAddresses = sendMailAddresses;
-    }
-
-    public List<String> getSendCCMailAddresses() {
-        return sendCCMailAddresses;
-    }
-
-    public void setSendCCMailAddresses(List<String> sendCCMailAddresses) {
-        this.sendCCMailAddresses = sendCCMailAddresses;
-    }
-
-    public String getSubject() {
-        return subject;
-    }
-
-    public void setSubject(String subject) {
-        this.subject = subject;
-    }
-
-    public String getContent() {
-        return content;
-    }
-
-    public void setContent(String content) {
-        this.content = content;
-    }
-
-    public String getFrom() {
-        return from;
-    }
-
-    public void setFrom(String from) {
-        this.from = from;
-    }
-
-    public List<String> getAttachments() {
-        return attachments;
-    }
-
-    public void setAttachments(List<String> attachments) {
-        this.attachments = attachments;
-    }
-
-    public boolean isHtmlFormat() {
-        return htmlFormat;
-    }
-
-    public void setHtmlFormat(boolean htmlFormat) {
-        this.htmlFormat = htmlFormat;
-    }
-
-    public String getFunctionId() {
-        return functionId;
-    }
-
-    public void setFunctionId(String functionId) {
-        this.functionId = functionId;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/SendMailResponse.java b/pamapi/src/main/java/com/pollex/pam/service/dto/SendMailResponse.java
deleted file mode 100644
index aee72f7..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/SendMailResponse.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-
-@JsonIgnoreProperties(ignoreUnknown = true)
-public class SendMailResponse {
-    private Data data;
-
-    public Data getData() {
-        return data;
-    }
-
-    public void setData(Data data) {
-        this.data = data;
-    }
-
-    @JsonIgnoreProperties(ignoreUnknown = true)
-    public static class Data {
-        private String messageStatus;
-
-        public String getMessageStatus() {
-            return messageStatus;
-        }
-
-        public void setMessageStatus(String messageStatus) {
-            this.messageStatus = messageStatus;
-        }
-
-        @Override
-        public String toString() {
-            return "Data{" +
-                "messageStatus='" + messageStatus + '\'' +
-                '}';
-        }
-    }
-
-    @Override
-    public String toString() {
-        return "SendMailResponse{" +
-            "data=" + data +
-            '}';
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/SendSMSRequest.java b/pamapi/src/main/java/com/pollex/pam/service/dto/SendSMSRequest.java
deleted file mode 100644
index de3aa42..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/SendSMSRequest.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import java.util.List;
-
-public class SendSMSRequest {
-
-    private String pKey;
-    private String sourceCode;
-    private String sender;
-    private String sendTime;
-    private String subject;
-    private String activityId;
-    private String mmsPath;
-    private String msgTypeSet;
-    private List<SMSDetail> detail;
-
-    @JsonProperty("p_key")
-    public String getpKey() {
-        return pKey;
-    }
-
-    public void setpKey(String pKey) {
-        this.pKey = pKey;
-    }
-
-    @JsonProperty("source_code")
-    public String getSourceCode() {
-        return sourceCode;
-    }
-
-    public void setSourceCode(String sourceCode) {
-        this.sourceCode = sourceCode;
-    }
-
-    @JsonProperty("sender")
-    public String getSender() {
-        return sender;
-    }
-
-    public void setSender(String sender) {
-        this.sender = sender;
-    }
-
-    @JsonProperty("send_time")
-    public String getSendTime() {
-        return sendTime;
-    }
-
-    public void setSendTime(String sendTime) {
-        this.sendTime = sendTime;
-    }
-
-    @JsonProperty("subject")
-    public String getSubject() {
-        return subject;
-    }
-
-    public void setSubject(String subject) {
-        this.subject = subject;
-    }
-
-    @JsonProperty("activity_id")
-    public String getActivityId() {
-        return activityId;
-    }
-
-    public void setActivityId(String activityId) {
-        this.activityId = activityId;
-    }
-
-    @JsonProperty("mms_path")
-    public String getMmsPath() {
-        return mmsPath;
-    }
-
-    public void setMmsPath(String mmsPath) {
-        this.mmsPath = mmsPath;
-    }
-
-    @JsonProperty("msg_type_set")
-    public String getMsgTypeSet() {
-        return msgTypeSet;
-    }
-
-    public void setMsgTypeSet(String msgTypeSet) {
-        this.msgTypeSet = msgTypeSet;
-    }
-
-    @JsonProperty("detail")
-    public List<SMSDetail> getDetail() {
-        return detail;
-    }
-
-    public void setDetail(List<SMSDetail> detail) {
-        this.detail = detail;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/SendSMSResponse.java b/pamapi/src/main/java/com/pollex/pam/service/dto/SendSMSResponse.java
deleted file mode 100644
index 9073766..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/SendSMSResponse.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class SendSMSResponse {
-
-    @JsonProperty("p_key")
-    private String pKey;
-
-    @JsonProperty("return_code")
-    private String returnCode;
-
-    @JsonProperty("msg_batchNo")
-    private String msgBatchNo;
-
-    @JsonProperty("error_msg")
-    private String errorMsg;
-
-    public String getpKey() {
-        return pKey;
-    }
-
-    public void setpKey(String pKey) {
-        this.pKey = pKey;
-    }
-
-    public String getReturnCode() {
-        return returnCode;
-    }
-
-    public void setReturnCode(String returnCode) {
-        this.returnCode = returnCode;
-    }
-
-    public String getMsgBatchNo() {
-        return msgBatchNo;
-    }
-
-    public void setMsgBatchNo(String msgBatchNo) {
-        this.msgBatchNo = msgBatchNo;
-    }
-
-    public String getErrorMsg() {
-        return errorMsg;
-    }
-
-    public void setErrorMsg(String errorMsg) {
-        this.errorMsg = errorMsg;
-    }
-
-    @Override
-    public String toString() {
-        return "SendSMSResponse{" +
-            "pKey='" + pKey + '\'' +
-            ", returnCode='" + returnCode + '\'' +
-            ", msgBatchNo='" + msgBatchNo + '\'' +
-            ", errorMsg='" + errorMsg + '\'' +
-            '}';
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/StrictQueryConsultantParam.java b/pamapi/src/main/java/com/pollex/pam/service/dto/StrictQueryConsultantParam.java
deleted file mode 100644
index 7a7afcf..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/StrictQueryConsultantParam.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import com.pollex.pam.enums.GenderEnum;
-
-import java.util.List;
-
-public class StrictQueryConsultantParam {
-
-    private GenderEnum gender;
-    private Float avgScore;
-    private String status;
-    private String area;
-    private List<String> requirements;
-    private String otherRequirement;
-    private String seniority;
-    private List<String> popularTags;
-    private String otherPopularTags;
-
-    public GenderEnum getGender() {
-        return gender;
-    }
-
-    public void setGender(GenderEnum gender) {
-        this.gender = gender;
-    }
-
-    public Float getAvgScore() {
-        return avgScore;
-    }
-
-    public void setAvgScore(Float avgScore) {
-        this.avgScore = avgScore;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    public String getArea() {
-        return area;
-    }
-
-    public void setArea(String area) {
-        this.area = area;
-    }
-
-    public List<String> getRequirements() {
-        return requirements;
-    }
-
-    public void setRequirements(List<String> requirements) {
-        this.requirements = requirements;
-    }
-
-    public String getOtherRequirement() {
-        return otherRequirement;
-    }
-
-    public void setOtherRequirement(String otherRequirement) {
-        this.otherRequirement = otherRequirement;
-    }
-
-    public String getSeniority() {
-        return seniority;
-    }
-
-    public void setSeniority(String seniority) {
-        this.seniority = seniority;
-    }
-
-    public List<String> getPopularTags() {
-        return popularTags;
-    }
-
-    public void setPopularTags(List<String> popularTags) {
-        this.popularTags = popularTags;
-    }
-
-    public String getOtherPopularTags() {
-        return otherPopularTags;
-    }
-
-    public void setOtherPopularTags(String otherPopularTags) {
-        this.otherPopularTags = otherPopularTags;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/UserDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/UserDTO.java
deleted file mode 100644
index dfcfacc..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/UserDTO.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.pollex.pam.service.dto;
-
-import com.pollex.pam.domain.User;
-
-/**
- * A DTO representing a user, with only the public attributes.
- */
-public class UserDTO {
-
-    private Long id;
-
-    private String login;
-
-    public UserDTO() {
-        // Empty constructor needed for Jackson.
-    }
-
-    public UserDTO(User user) {
-        this.id = user.getId();
-        // Customize it here if you need, or not, firstName/lastName/etc
-        this.login = user.getLogin();
-    }
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getLogin() {
-        return login;
-    }
-
-    public void setLogin(String login) {
-        this.login = login;
-    }
-
-    // prettier-ignore
-    @Override
-    public String toString() {
-        return "UserDTO{" +
-            "id='" + id + '\'' +
-            ", login='" + login + '\'' +
-            "}";
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/package-info.java b/pamapi/src/main/java/com/pollex/pam/service/dto/package-info.java
deleted file mode 100644
index 44834d3..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * Data Transfer Objects.
- */
-package com.pollex.pam.service.dto;
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentCustomerViewMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentCustomerViewMapper.java
deleted file mode 100644
index 4389195..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentCustomerViewMapper.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.pollex.pam.service.mapper;
-
-import static java.util.stream.Collectors.toList;
-
-import java.util.List;
-import java.util.Optional;
-
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.pollex.pam.domain.AppointmentClosedInfo;
-import com.pollex.pam.domain.AppointmentCustomerView;
-import com.pollex.pam.domain.AppointmentNoticeLog;
-import com.pollex.pam.repository.AppointmentClosedInfoRepository;
-import com.pollex.pam.service.AppointmentClosedInfoService;
-import com.pollex.pam.service.AppointmentNoticeLogService;
-import com.pollex.pam.service.AppointmentService;
-import com.pollex.pam.service.dto.AppointmentCustomerViewDTO;
-
-@Service
-public class AppointmentCustomerViewMapper {
-	
-	@Autowired
-	AppointmentService appointmentService;
-	
-	@Autowired
-	AppointmentNoticeLogService appointmentNoticeLogService;
-	
-	@Autowired
-	AppointmentClosedInfoRepository appointmentClosedInfoRepository;
-	
-	@Transactional
-	public AppointmentCustomerViewDTO toAppointmentCustomerViewDTO(AppointmentCustomerView source) {
-		AppointmentCustomerViewDTO target = new AppointmentCustomerViewDTO();
-		BeanUtils.copyProperties(source, target);
-		target.setAppointmentMemoList(source.getAppointmentMemoList());
-		appointmentService.setInterviewRecordDTO(target);
-		List<AppointmentNoticeLog> noticeLogs = appointmentNoticeLogService.findByAppointmentId(source.getId());
-		target.setAppointmentNoticeLogs(noticeLogs);
-		Optional<AppointmentClosedInfo> appointmentClosedInfoOP = appointmentClosedInfoRepository
-				.findByAppointmentId(source.getId());
-		if(appointmentClosedInfoOP.isPresent()) {
-			target.setAppointmentClosedInfo(appointmentClosedInfoOP.get());
-		}
-		appointmentService.setSatisfactionScore(target, source.getId());
-		
-		return target;
-	}
-
-	public List<AppointmentCustomerViewDTO> toAppointmentCustomerViewDTO(
-			List<AppointmentCustomerView> source) {
-		return source.stream().map(s -> toAppointmentCustomerViewDTO(s))
-				.collect(toList());
-	}
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentDTOMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentDTOMapper.java
deleted file mode 100644
index 8a1d6de..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentDTOMapper.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.pollex.pam.service.mapper;
-
-import com.pollex.pam.service.dto.AppointmentDTO;
-import org.springframework.beans.BeanUtils;
-import org.springframework.stereotype.Service;
-
-import com.pollex.pam.domain.Appointment;
-import com.pollex.pam.enums.ContactStatusEnum;
-import com.pollex.pam.service.dto.AppointmentCreateDTO;
-
-@Service
-public class AppointmentDTOMapper {
-
-	public Appointment toAppointment(AppointmentCreateDTO source) {
-		Appointment target = new Appointment();
-		BeanUtils.copyProperties(source, target);
-		return target;
-	}
-
-    public Appointment toAppointment(AppointmentDTO source) {
-        Appointment target = new Appointment();
-        BeanUtils.copyProperties(source, target);
-        return target;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMapper.java
deleted file mode 100644
index 5526738..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMapper.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.pollex.pam.service.mapper;
-
-import static java.util.stream.Collectors.toList;
-
-import java.util.List;
-
-import com.pollex.pam.enums.SatisfactionTypeEnum;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import com.pollex.pam.domain.Appointment;
-import com.pollex.pam.domain.Satisfaction;
-import com.pollex.pam.enums.SatisfactionStatusEnum;
-import com.pollex.pam.repository.AppointmentRepository;
-import com.pollex.pam.service.dto.AppointmentDTO;
-
-@Service
-public class AppointmentMapper {
-
-	@Autowired
-	AppointmentRepository appointmentRepository;
-
-	public AppointmentDTO toAppointmentDTO(Appointment source) {
-		AppointmentDTO target = new AppointmentDTO();
-		BeanUtils.copyProperties(source, target);
-		return target;
-	}
-
-	public List<AppointmentDTO> toAppointmentDTO(List<Appointment> source) {
-		return source.stream()
-				.map(s -> toAppointmentDTO(s)).collect(toList());
-	}
-
-	public Satisfaction toAppointmentSatisfaction(Appointment appointment) {
-		Satisfaction target = new Satisfaction();
-        target.setAppointmentId(appointment.getId());
-		target.setAgentNo(appointment.getAgentNo());
-		target.setCustomerId(appointment.getCustomerId());
-        target.setType(SatisfactionTypeEnum.APPOINTMENT);
-		target.setStatus(SatisfactionStatusEnum.UNFILLED);
-		return target;
-	}
-
-	public Satisfaction toAppointmentSatisfaction(Long appointmentId) {
-		Appointment appointment = appointmentRepository.findById(appointmentId).get();
-		return toAppointmentSatisfaction(appointment);
-	}
-
-
-
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMemoMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMemoMapper.java
deleted file mode 100644
index aaae2e9..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMemoMapper.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.pollex.pam.service.mapper;
-
-import org.springframework.beans.BeanUtils;
-import org.springframework.stereotype.Service;
-
-import com.pollex.pam.domain.AppointmentMemo;
-import com.pollex.pam.service.dto.AppointmentMemoCreateDTO;
-import com.pollex.pam.service.dto.AppointmentMemoUpdateDTO;
-
-@Service
-public class AppointmentMemoMapper {
-	
-	public AppointmentMemo toAppointmentMemo(AppointmentMemoCreateDTO source) {
-		AppointmentMemo target = new AppointmentMemo();
-		BeanUtils.copyProperties(source, target);
-		return target;
-	}
-
-	public AppointmentMemo copyToAppointmentMemo(AppointmentMemoUpdateDTO source, AppointmentMemo target) {
-		BeanUtils.copyProperties(source, target);
-		return target;
-	}
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentNoticeSendMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentNoticeSendMapper.java
deleted file mode 100644
index 69a8cb1..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentNoticeSendMapper.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.pollex.pam.service.mapper;
-
-import org.springframework.beans.BeanUtils;
-import org.springframework.stereotype.Service;
-
-import com.pollex.pam.domain.AppointmentNoticeLog;
-import com.pollex.pam.service.dto.AppointmentNoticeSendDTO;
-
-@Service
-public class AppointmentNoticeSendMapper {
-	
-	public AppointmentNoticeLog toAppointmentNoticeLog(AppointmentNoticeSendDTO source) {
-		AppointmentNoticeLog target = new AppointmentNoticeLog();
-		BeanUtils.copyProperties(source, target);
-//		target.setAppointmentId(source.getAppointmentId());
-		target.setContent(source.getMessage());
-//		target.setEmail(source.getEmail());
-//		target.setPhone(source.getPhone());
-		return target;
-	}
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantDTOMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantDTOMapper.java
deleted file mode 100644
index 48987fc..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantDTOMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.pollex.pam.service.mapper;
-
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import com.pollex.pam.config.ApplicationProperties;
-import com.pollex.pam.domain.Consultant;
-import com.pollex.pam.service.dto.ConsultantEditDTO;
-import com.pollex.pam.service.util.FileUtil;
-import com.pollex.pam.service.util.StringUtils;
-
-@Service
-public class ConsultantDTOMapper {
-
-	@Autowired
-    ApplicationProperties applicationProperty;
-
-	public void copyToConsultant(ConsultantEditDTO source, Consultant target) {
-		BeanUtils.copyProperties(source, target);
-		target.setPhotoPath(FileUtil.toPath(source.getPhotoFileName(), applicationProperty.getFileFolderPath()));
-		String expertise = StringUtils.convertToString(source.getExpertise(), ",");
-		target.setExpertise(expertise);
-		target.setAward(source.getAwards());
-		target.setExperience(source.getExperiences());
-	}
-
-
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java
deleted file mode 100644
index a04507a..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package com.pollex.pam.service.mapper;
-
-import com.pollex.pam.domain.Consultant;
-import com.pollex.pam.service.dto.ConsultantDTO;
-import com.pollex.pam.service.dto.ConsultantDetailDTO;
-import com.pollex.pam.service.dto.CustomerFavoriteConsultantDTO;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.BeanUtils;
-import org.springframework.stereotype.Service;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-@Service
-public class ConsultantMapper {
-
-    private static final Character SPLIT_MASK = ',';
-
-    public CustomerFavoriteConsultantDTO toCustomerFavoriteConsultantDto(Consultant source) {
-        CustomerFavoriteConsultantDTO consultantDTO = new CustomerFavoriteConsultantDTO();
-        consultantDTO.setAgentNo(source.getAgentNo());
-        consultantDTO.setName(source.getName());
-        consultantDTO.setAvgScore(source.getAvgScore());
-        consultantDTO.setSeniority(source.getSeniorityDTOString());
-        consultantDTO.setExpertise(splitStringWithChar(source.getExpertise()));
-        consultantDTO.setImg(source.getPhotoPath());
-        consultantDTO.setRole(source.getRole());
-
-        consultantDTO.setContactStatus(null);
-        consultantDTO.setUpdateTime(null);
-
-        return consultantDTO;
-    }
-
-    public ConsultantDTO toDto(Consultant source) {
-        ConsultantDTO consultantDTO = new ConsultantDTO();
-        consultantDTO.setAgentNo(source.getAgentNo());
-        consultantDTO.setName(source.getName());
-        consultantDTO.setAvgScore(source.getAvgScore());
-        consultantDTO.setSeniority(source.getSeniorityDTOString());
-        consultantDTO.setExpertise(splitStringWithChar(source.getExpertise()));
-        consultantDTO.setImg(source.getPhotoPath());
-        consultantDTO.setRole(source.getRole());
-
-        consultantDTO.setSuitability(0);
-        consultantDTO.setContactStatus(null);
-        consultantDTO.setUpdateTime(null);
-//        consultantDTO.setLatestAppointmentId(null);
-
-        return consultantDTO;
-    }
-
-    public ConsultantDetailDTO toDetailDto(Consultant source) {
-        ConsultantDetailDTO consultantDetailDTO = new ConsultantDetailDTO();
-        BeanUtils.copyProperties(source, consultantDetailDTO);
-        consultantDetailDTO.setName(source.getName());
-        consultantDetailDTO.setAgentNo(source.getAgentNo());
-        consultantDetailDTO.setRole(source.getRole());
-        consultantDetailDTO.setAvgScore(source.getAvgScore());
-        consultantDetailDTO.setTitle(source.getTitle());
-        consultantDetailDTO.setPhoneNumber(source.getPhoneNumber());
-        consultantDetailDTO.setServeArea(source.getServeArea());
-        consultantDetailDTO.setCompanyAddress(source.getCompanyAddress());
-        consultantDetailDTO.setSeniority(source.getSeniorityDTOString());
-        consultantDetailDTO.setConcept(source.getConcept());
-        consultantDetailDTO.setAwards(source.getAward());
-        consultantDetailDTO.setImg(source.getPhotoPath());
-        consultantDetailDTO.setExpertise(splitStringWithChar(source.getExpertise()));
-        consultantDetailDTO.setExperiences(source.getExperience());
-
-        // todo ��蝣箄�垣閰W漲銵函
-        consultantDetailDTO.setEvaluation(50);
-
-        return consultantDetailDTO;
-    }
-
-    private List<String> splitStringWithChar(String source) {
-        return Arrays.stream(StringUtils.split(source, SPLIT_MASK))
-            .map(String::trim)
-            .collect(Collectors.toList());
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/CustomerDTOMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/CustomerDTOMapper.java
deleted file mode 100644
index 326eac2..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/mapper/CustomerDTOMapper.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.pollex.pam.service.mapper;
-
-import org.springframework.beans.BeanUtils;
-import org.springframework.stereotype.Service;
-
-import com.pollex.pam.domain.Customer;
-import com.pollex.pam.service.dto.CustomerRegisterDTO;
-
-@Service
-public class CustomerDTOMapper {
-	
-	public Customer toCustomer(CustomerRegisterDTO source) {
-		Customer target = new Customer();
-		BeanUtils.copyProperties(source, target);
-		return target;
-	}
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/CustomerMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/CustomerMapper.java
deleted file mode 100644
index 757d8c9..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/mapper/CustomerMapper.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.pollex.pam.service.mapper;
-
-import com.pollex.pam.domain.Customer;
-import com.pollex.pam.service.dto.CustomerDTO;
-import org.springframework.stereotype.Service;
-
-@Service
-public class CustomerMapper {
-
-    public CustomerDTO toDto(Customer customer) {
-        CustomerDTO dto = new CustomerDTO();
-        dto.setEmail(customer.getEmail());
-        dto.setPhone(customer.getPhone());
-        dto.setName(customer.getName());
-
-        return dto;
-    }
-
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/InterviewRecordMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/InterviewRecordMapper.java
deleted file mode 100644
index d611c2f..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/mapper/InterviewRecordMapper.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.pollex.pam.service.mapper;
-
-import static java.util.stream.Collectors.toList;
-
-import java.util.List;
-
-import org.springframework.beans.BeanUtils;
-import org.springframework.stereotype.Service;
-
-import com.pollex.pam.domain.InterviewRecord;
-import com.pollex.pam.service.dto.InterviewRecordDTO;
-
-@Service
-public class InterviewRecordMapper {
-
-	public InterviewRecord toInterviewRecord(InterviewRecordDTO source) {
-		InterviewRecord target = new InterviewRecord();
-		BeanUtils.copyProperties(source, target);
-		return target;
-	}
-
-	public void copyToInterviewRecord(InterviewRecordDTO source, InterviewRecord target) {
-		BeanUtils.copyProperties(source, target);
-	}
-
-	public List<InterviewRecordDTO> toInterviewRecordDTO(List<InterviewRecord> records) {
-		return records.stream()
-				.map(s-> toInterviewRecordDTO(s))
-				.collect(toList());
-	}
-	
-	public InterviewRecordDTO toInterviewRecordDTO(InterviewRecord source) {
-		InterviewRecordDTO target = new InterviewRecordDTO();
-		BeanUtils.copyProperties(source, target);
-		return target;
-	}
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/SatisfactionDTOMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/SatisfactionDTOMapper.java
deleted file mode 100644
index fe1eaa2..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/mapper/SatisfactionDTOMapper.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.pollex.pam.service.mapper;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import com.pollex.pam.domain.Satisfaction;
-import com.pollex.pam.enums.SatisfactionStatusEnum;
-// import com.pollex.pam.service.dto.SatisfactionCustomerScoreDTO;
-
-@Service
-public class SatisfactionDTOMapper {
-
-	@Autowired
-	AppointmentMapper appointmentMapper;
-
-//	public Satisfaction toSatisfaction(SatisfactionCustomerScoreDTO source) {
-//		Satisfaction satisfaction = appointmentMapper.toAppointmentSatisfaction(source.getAppointmentId());
-//		satisfaction.setScore(source.getScore());
-//		if(satisfaction.getScore()!=null) {
-//			satisfaction.setStatus(SatisfactionStatusEnum.FILLED);
-//		}else {
-//			satisfaction.setStatus(SatisfactionStatusEnum.UNFILLED);
-//		}
-//		return satisfaction;
-//	}
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/SatisfactionMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/SatisfactionMapper.java
deleted file mode 100644
index 8a757a4..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/mapper/SatisfactionMapper.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.pollex.pam.service.mapper;
-
-import static java.util.stream.Collectors.toList;
-
-import java.util.List;
-import java.util.Objects;
-
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import com.pollex.pam.domain.Consultant;
-import com.pollex.pam.domain.Customer;
-import com.pollex.pam.domain.Satisfaction;
-import com.pollex.pam.repository.ConsultantRepository;
-import com.pollex.pam.repository.CustomerRepository;
-import com.pollex.pam.service.dto.SatisfactionDTO;
-
-@Service
-public class SatisfactionMapper {
-
-	@Autowired
-	ConsultantRepository consultantRepository;
-
-	@Autowired
-	CustomerRepository customerRepository;
-
-	public SatisfactionDTO toDTO(Satisfaction source) {
-		SatisfactionDTO target = new SatisfactionDTO();
-		BeanUtils.copyProperties(source, target);
-		target.setScore(source.getScore());
-		Consultant consultant= consultantRepository.findOneByAgentNo(source.getAgentNo()).orElse(null);
-		target.setAgentName(Objects.isNull(consultant) ? null : consultant.getName());
-		Customer customer = customerRepository.findById(source.getCustomerId()).get();
-		target.setCustomerName(customer.getName());
-		return target;
-	}
-
-	public List<SatisfactionDTO> toDTO(List<Satisfaction> satisfactionList) {
-		if(satisfactionList==null) return null;
-		return satisfactionList.stream()
-				.map(s -> toDTO(s))
-				.collect(toList());
-	}
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/UserMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/UserMapper.java
deleted file mode 100644
index a5ccf3f..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/mapper/UserMapper.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package com.pollex.pam.service.mapper;
-
-import com.pollex.pam.domain.Authority;
-import com.pollex.pam.domain.User;
-import com.pollex.pam.service.dto.AdminUserDTO;
-import com.pollex.pam.service.dto.UserDTO;
-import java.util.*;
-import java.util.stream.Collectors;
-import org.mapstruct.BeanMapping;
-import org.mapstruct.Mapping;
-import org.mapstruct.Named;
-import org.springframework.stereotype.Service;
-
-/**
- * Mapper for the entity {@link User} and its DTO called {@link UserDTO}.
- *
- * Normal mappers are generated using MapStruct, this one is hand-coded as MapStruct
- * support is still in beta, and requires a manual step with an IDE.
- */
-@Service
-public class UserMapper {
-
-    public List<UserDTO> usersToUserDTOs(List<User> users) {
-        return users.stream().filter(Objects::nonNull).map(this::userToUserDTO).collect(Collectors.toList());
-    }
-
-    public UserDTO userToUserDTO(User user) {
-        return new UserDTO(user);
-    }
-
-    public List<AdminUserDTO> usersToAdminUserDTOs(List<User> users) {
-        return users.stream().filter(Objects::nonNull).map(this::userToAdminUserDTO).collect(Collectors.toList());
-    }
-
-    public AdminUserDTO userToAdminUserDTO(User user) {
-        return new AdminUserDTO(user);
-    }
-
-    public List<User> userDTOsToUsers(List<AdminUserDTO> userDTOs) {
-        return userDTOs.stream().filter(Objects::nonNull).map(this::userDTOToUser).collect(Collectors.toList());
-    }
-
-    public User userDTOToUser(AdminUserDTO userDTO) {
-        if (userDTO == null) {
-            return null;
-        } else {
-            User user = new User();
-            user.setId(userDTO.getId());
-            user.setLogin(userDTO.getLogin());
-            user.setFirstName(userDTO.getFirstName());
-            user.setLastName(userDTO.getLastName());
-            user.setEmail(userDTO.getEmail());
-            user.setImageUrl(userDTO.getImageUrl());
-            user.setActivated(userDTO.isActivated());
-            user.setLangKey(userDTO.getLangKey());
-            Set<Authority> authorities = this.authoritiesFromStrings(userDTO.getAuthorities());
-            user.setAuthorities(authorities);
-            return user;
-        }
-    }
-
-    private Set<Authority> authoritiesFromStrings(Set<String> authoritiesAsString) {
-        Set<Authority> authorities = new HashSet<>();
-
-        if (authoritiesAsString != null) {
-            authorities =
-                authoritiesAsString
-                    .stream()
-                    .map(string -> {
-                        Authority auth = new Authority();
-                        auth.setName(string);
-                        return auth;
-                    })
-                    .collect(Collectors.toSet());
-        }
-
-        return authorities;
-    }
-
-    public User userFromId(Long id) {
-        if (id == null) {
-            return null;
-        }
-        User user = new User();
-        user.setId(id);
-        return user;
-    }
-
-    @Named("id")
-    @BeanMapping(ignoreByDefault = true)
-    @Mapping(target = "id", source = "id")
-    public UserDTO toDtoId(User user) {
-        if (user == null) {
-            return null;
-        }
-        UserDTO userDto = new UserDTO();
-        userDto.setId(user.getId());
-        return userDto;
-    }
-
-    @Named("idSet")
-    @BeanMapping(ignoreByDefault = true)
-    @Mapping(target = "id", source = "id")
-    public Set<UserDTO> toDtoIdSet(Set<User> users) {
-        if (users == null) {
-            return Collections.emptySet();
-        }
-
-        Set<UserDTO> userSet = new HashSet<>();
-        for (User userEntity : users) {
-            userSet.add(this.toDtoId(userEntity));
-        }
-
-        return userSet;
-    }
-
-    @Named("login")
-    @BeanMapping(ignoreByDefault = true)
-    @Mapping(target = "id", source = "id")
-    @Mapping(target = "login", source = "login")
-    public UserDTO toDtoLogin(User user) {
-        if (user == null) {
-            return null;
-        }
-        UserDTO userDto = new UserDTO();
-        userDto.setId(user.getId());
-        userDto.setLogin(user.getLogin());
-        return userDto;
-    }
-
-    @Named("loginSet")
-    @BeanMapping(ignoreByDefault = true)
-    @Mapping(target = "id", source = "id")
-    @Mapping(target = "login", source = "login")
-    public Set<UserDTO> toDtoLoginSet(Set<User> users) {
-        if (users == null) {
-            return Collections.emptySet();
-        }
-
-        Set<UserDTO> userSet = new HashSet<>();
-        for (User userEntity : users) {
-            userSet.add(this.toDtoLogin(userEntity));
-        }
-
-        return userSet;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/package-info.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/package-info.java
deleted file mode 100644
index b91e8ed..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/mapper/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * MapStruct mappers for mapping domain objects and Data Transfer Objects.
- */
-package com.pollex.pam.service.mapper;
diff --git a/pamapi/src/main/java/com/pollex/pam/service/package-info.java b/pamapi/src/main/java/com/pollex/pam/service/package-info.java
deleted file mode 100644
index ee1f6cf..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * Service layer beans.
- */
-package com.pollex.pam.service;
diff --git a/pamapi/src/main/java/com/pollex/pam/service/util/FileUtil.java b/pamapi/src/main/java/com/pollex/pam/service/util/FileUtil.java
deleted file mode 100644
index dcfdff7..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/util/FileUtil.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.pollex.pam.service.util;
-
-
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.Base64;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class FileUtil {
-
-	private static final Logger log = LoggerFactory.getLogger(FileUtil.class);
-
-	public static File base64ToFile(String base64, String fileName, String folderPath) {
-		if(base64 == null){
-            return new File(folderPath);
-        }
-        File  dir=new File(folderPath);
-        dir.setWritable(true);
-        dir.setReadable(true);
-        if (!dir.exists() && !dir.isDirectory()) {
-                dir.mkdirs();
-        }
-		return base64ToFile(base64, toPath(fileName, folderPath));
-	}
-	
-	public static File base64ToFile(String base64, String path) {
-		if(base64 == null){
-            return new File(path);
-        }
-
-		BufferedOutputStream bos = null;
-
-        try {
-            byte[] bytes = Base64.getDecoder().decode(base64);
-            File file=new File(path);
-            file.setWritable(true);
-            file.setReadable(true);
-            bos = new BufferedOutputStream(new FileOutputStream(file));
-            bos.write(bytes);
-
-
-            return file;
-        } catch (Exception e) {
-        	log.error("upload file base64 to file error",e);
-        } finally {
-            if (bos != null) {
-                try {
-                    bos.close();
-                } catch (IOException e) {
-                	log.error("upload file base64 to file error",e);
-                }
-            }
-        }
-
-        return null;
-	}
-
-	public static boolean isFileExisted(String fileName, String folderPath) {
-		return new File(toPath(fileName, folderPath)).isFile();
-	}
-	
-	public static String toPath(String fileName, String folderPath) {
-		return folderPath + "/" + fileName;
-	}
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/util/HttpRequestUtil.java b/pamapi/src/main/java/com/pollex/pam/service/util/HttpRequestUtil.java
deleted file mode 100644
index 48cc43b..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/util/HttpRequestUtil.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package com.pollex.pam.service.util;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.http.conn.ssl.NoopHostnameVerifier;
-import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.ssl.SSLContexts;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.http.*;
-import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
-import org.springframework.web.client.RestTemplate;
-
-import javax.net.ssl.SSLContext;
-import java.security.KeyManagementException;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.X509Certificate;
-import java.util.Map;
-import java.util.Set;
-
-public final class HttpRequestUtil {
-    private static final Logger log = LoggerFactory.getLogger(HttpRequestUtil.class);
-
-    private HttpRequestUtil() {}
-
-    public static <T> ResponseEntity<T> getWithJson(String url, Class<T> responseType)
-        throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException
-    {
-        return getWithJson(url, responseType, null);
-    }
-
-    public static <T> ResponseEntity<T> getWithJson(String url, Class<T> responseType, Map<String, String> addedHeaders)
-        throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException
-    {
-        RestTemplate restTemplate = getTrustAllRestTemplate();
-        HttpHeaders headers = new HttpHeaders();
-        setHeaders(headers, addedHeaders);
-
-        HttpEntity<String> httpEntity = new HttpEntity<>(headers);
-
-        log.debug("HttpRequestUtil get url: {}", url);
-        log.debug("httpEntity = {}", httpEntity);
-        return restTemplate.exchange(url, HttpMethod.GET, httpEntity, responseType);
-    }
-
-    public static ResponseEntity<String> postWithJson(String url, Object jsonData, Map<String, String> headers)
-        throws KeyStoreException, NoSuchAlgorithmException, JsonProcessingException, KeyManagementException
-    {
-        return postWithJson(url, jsonData, String.class, headers);
-    }
-
-    public static ResponseEntity<String> postWithJson(String url, Object jsonData)
-        throws KeyStoreException, NoSuchAlgorithmException, JsonProcessingException, KeyManagementException
-    {
-        return postWithJson(url, jsonData, String.class, null);
-    }
-
-    public static <T> ResponseEntity<T> postWithJson(String url, Object jsonData, Class<T> responseType)
-        throws KeyStoreException, NoSuchAlgorithmException, JsonProcessingException, KeyManagementException
-    {
-        return postWithJson(url, jsonData, responseType, null);
-    }
-
-    public static <T> ResponseEntity<T> postWithJson(String url, Object jsonData, Class<T> responseType, Map<String, String> addedHeaders)
-        throws JsonProcessingException, KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
-
-        String parameters = new ObjectMapper().writeValueAsString(jsonData);
-        // ���摨阡��脰��log����
-        if(parameters.length() < 1000){
-            log.debug("parameters : {}",parameters);
-        }
-
-        RestTemplate restTemplate = getTrustAllRestTemplate();
-
-        HttpHeaders headers = new HttpHeaders();
-        headers.setContentType(MediaType.APPLICATION_JSON);
-        setHeaders(headers, addedHeaders);
-
-        HttpEntity<String> entity = new HttpEntity<>(parameters, headers);
-
-        log.debug("rest post with json, url = {}", url);
-        return restTemplate.exchange(url, HttpMethod.POST, entity, responseType);
-    }
-
-    private static void setHeaders(HttpHeaders headers, Map<String, String> addedHeaders) {
-        if(addedHeaders != null && addedHeaders.size() > 0) {
-            Set<String> keys = addedHeaders.keySet();
-            for (String key : keys) {
-                String headerValue = addedHeaders.get(key);
-                headers.set(key, headerValue);
-                log.info("http cust header key: {}", key);
-                log.info("http cust header headerValue: {}", headerValue);
-            }
-        }
-    }
-
-    private static RestTemplate getTrustAllRestTemplate() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
-        SSLContext sslContext = SSLContexts.custom()
-            .loadTrustMaterial(null, (X509Certificate[] x509Certs, String s) -> true)
-            .build();
-        SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier());
-        CloseableHttpClient httpClient = HttpClients.custom()
-            .setSSLSocketFactory(csf)
-            .build();
-        HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
-        requestFactory.setHttpClient(httpClient);
-        requestFactory.setConnectTimeout(300000);
-        requestFactory.setReadTimeout(300000);
-        return new RestTemplate(requestFactory);
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/util/StringUtils.java b/pamapi/src/main/java/com/pollex/pam/service/util/StringUtils.java
deleted file mode 100644
index fd2350a..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/util/StringUtils.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.pollex.pam.service.util;
-
-import java.util.List;
-
-public class StringUtils {
-    
-    public static String convertToString(List<String> source
-    		, String separator) {
-        StringBuilder result = new StringBuilder();
-        for (String sourceString : source) {
-        	result.append(sourceString+separator);
-        }
-        result.deleteCharAt(result.length()-1);
-        return result.toString();
-    }
-
-
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/util/VerifyCodeUtil.java b/pamapi/src/main/java/com/pollex/pam/service/util/VerifyCodeUtil.java
deleted file mode 100644
index e42af0b..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/util/VerifyCodeUtil.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.pollex.pam.service.util;
-
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.Graphics;
-import java.awt.image.BufferedImage;
-import java.util.Random;
-
-public final class VerifyCodeUtil {
-
-	
-	public static String createcode() {
-		String code = "";
-		code = "";
-		String randomRange = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";// Randomly generated character
-																					// range (0-9, a-z, A-Z)
-
-		// The number of digits for generating the verification code (here 4 digits)
-		for (int i = 0; i < 4; i++) {
-			int index = (int) (Math.random() * 62);// Will produce a [0,62) number, excluding decimals
-			char randomCode = randomRange.charAt(index);
-			code = code + randomCode;
-		}
-		return code;
-	}
-
-	// 3. Generate pictures
-	public static BufferedImage createimage(String code) {
-		// The first 2 parameters are: width, height. The back is the image type
-		// Create a BufferedImage object without transparent color, TYPE_INT_ARGB is
-		// with transparent color
-		BufferedImage bi = new BufferedImage(130, 50, BufferedImage.TYPE_INT_RGB);
-
-		// 1. Get a canvas
-		Graphics g = bi.getGraphics();
-		// 2. Add background color
-		g.setColor(Color.WHITE);
-		g.fillRect(0, 0, 130, 50);
-
-		// 3. Add interference lines
-		for (int i = 0; i < 10; i++) {
-			Random r = new Random();
-			int red = r.nextInt(256);
-			int green = r.nextInt(256);
-			int blue = r.nextInt(256);
-			Color c = new Color(red, green, blue);
-			g.setColor(c);
-			int x1 = r.nextInt(131);
-			int y1 = r.nextInt(51);
-			int x2 = r.nextInt(131);
-			int y2 = r.nextInt(51);
-			g.drawLine(x1, y1, x2, y2);// Draw a line
-			// g.drawOval(x1, y1, x2, y2);//Draw a curve
-		}
-
-		// 3. Add text
-		g.setColor(Color.BLACK);
-		g.setFont(new Font(" ", Font.BOLD, 40));
-
-		// 4. Fill the text into the artboard
-		g.drawString(code, 15, 40);
-
-		// 5. Close the canvas
-		g.dispose();
-		return bi;
-	}
-
-}
\ No newline at end of file
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/AccountResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/AccountResource.java
index a4a87ae..a808fcd 100644
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/AccountResource.java
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/AccountResource.java
@@ -1,20 +1,16 @@
 package com.pollex.pam.web.rest;
 
-import com.pollex.pam.domain.User;
-import com.pollex.pam.repository.UserRepository;
-import com.pollex.pam.security.SecurityUtils;
-import com.pollex.pam.security.jwt.JWTFilter;
-import com.pollex.pam.service.CustomerAuthService;
+import com.pollex.pam.business.domain.User;
+import com.pollex.pam.business.repository.UserRepository;
+import com.pollex.pam.business.security.SecurityUtils;
 import com.pollex.pam.service.CustomerService;
-import com.pollex.pam.service.MailService;
-import com.pollex.pam.service.UserService;
-import com.pollex.pam.service.dto.AdminUserDTO;
-import com.pollex.pam.service.dto.CustomerRegisterDTO;
-import com.pollex.pam.service.dto.PasswordChangeDTO;
-import com.pollex.pam.web.rest.UserJWTController.JWTToken;
-import com.pollex.pam.web.rest.errors.*;
-import com.pollex.pam.web.rest.vm.KeyAndPasswordVM;
-import com.pollex.pam.web.rest.vm.ManagedUserVM;
+import com.pollex.pam.business.service.MailService;
+import com.pollex.pam.business.service.UserService;
+import com.pollex.pam.business.service.dto.AdminUserDTO;
+import com.pollex.pam.business.service.dto.PasswordChangeDTO;
+import com.pollex.pam.business.web.errors.*;
+import com.pollex.pam.business.web.vm.KeyAndPasswordVM;
+import com.pollex.pam.business.web.vm.ManagedUserVM;
 import java.util.*;
 import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
@@ -22,9 +18,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 /**
@@ -48,7 +41,7 @@
     private final UserService userService;
 
     private final MailService mailService;
-    
+
     @Autowired
     CustomerService customerService;
 
@@ -75,8 +68,8 @@
 //        User user = userService.registerUser(managedUserVM, managedUserVM.getPassword());
 //        mailService.sendActivationEmail(user);
 //    }
-    
-    
+
+
 
     /**
      * {@code GET  /activate} : activate the registered user.
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentMemoResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentMemoResource.java
index c7a6afa..5b5ff0f 100644
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentMemoResource.java
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentMemoResource.java
@@ -10,36 +10,35 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import com.pollex.pam.domain.AppointmentMemo;
-import com.pollex.pam.security.SecurityUtils;
-import com.pollex.pam.service.AppointmentMemoService;
-import com.pollex.pam.service.dto.AppointmentMemoCreateDTO;
-import com.pollex.pam.service.dto.AppointmentMemoUpdateDTO;
+import com.pollex.pam.business.domain.AppointmentMemo;
+import com.pollex.pam.business.service.AppointmentMemoService;
+import com.pollex.pam.business.service.dto.AppointmentMemoCreateDTO;
+import com.pollex.pam.business.service.dto.AppointmentMemoUpdateDTO;
 
 @RestController
 @RequestMapping("/api/appointment/memo")
 public class AppointmentMemoResource {
-	
+
 	@Autowired
 	AppointmentMemoService appointmentMemoService;
-	
+
 	@PostMapping("/create")
 	public ResponseEntity<AppointmentMemo> createMemo(@RequestBody AppointmentMemoCreateDTO memoDTO) {
 		appointmentMemoService.checkPermission(memoDTO.getAppointmentId());
 		AppointmentMemo memo = appointmentMemoService.create(memoDTO);
 		return new ResponseEntity<>(memo, HttpStatus.OK);
 	}
-	
+
 	@PostMapping("/update")
 	public ResponseEntity<AppointmentMemo> updateMemo(@RequestBody AppointmentMemoUpdateDTO memoDTO) {
 		AppointmentMemo memo = appointmentMemoService.update(memoDTO);
 		return new ResponseEntity<>(memo, HttpStatus.OK);
 	}
-	
+
 	@DeleteMapping("/{memoId}")
 	public void deleteMemo(@PathVariable Long memoId) {
 		appointmentMemoService.delete(memoId);
 	}
-	
-	
+
+
 }
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..5164e6a 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,20 +1,24 @@
 package com.pollex.pam.web.rest;
 
-import com.pollex.pam.appointment.process.AppointmentProcess;
-import com.pollex.pam.domain.Appointment;
-import com.pollex.pam.security.SecurityUtils;
-import com.pollex.pam.service.SendMsgService;
-import com.pollex.pam.service.dto.*;
+import com.pollex.pam.business.aop.logging.audit.AuditLoggingInject;
+import com.pollex.pam.business.aop.logging.audit.AuditLoggingType;
+import com.pollex.pam.business.appointment.process.AppointmentProcess;
+import com.pollex.pam.business.domain.Appointment;
+import com.pollex.pam.business.security.SecurityUtils;
+import com.pollex.pam.business.service.SendMsgService;
 
-import com.pollex.pam.service.mapper.AppointmentMapper;
+import com.pollex.pam.business.service.dto.*;
+import com.pollex.pam.business.service.mapper.AppointmentMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
-import com.pollex.pam.service.AppointmentService;
-import com.pollex.pam.service.PersonalNotificationService;
-import com.pollex.pam.service.SatisfactionService;
+import com.pollex.pam.business.service.AppointmentService;
+import com.pollex.pam.business.service.PersonalNotificationService;
+import com.pollex.pam.business.service.SatisfactionService;
+
+import static com.pollex.pam.business.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/ConsultantLoginValidateResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantLoginValidateResource.java
index 47b4ffc..c47276d 100644
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantLoginValidateResource.java
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantLoginValidateResource.java
@@ -16,12 +16,12 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import com.pollex.pam.service.util.VerifyCodeUtil;
+import com.pollex.pam.business.service.util.VerifyCodeUtil;
 
 @RestController
 @RequestMapping("/api/login/validate")
 public class ConsultantLoginValidateResource {
-	
+
 	@GetMapping("/get_img_code")
 	public void getVerifyCodeImg(HttpServletResponse response, HttpServletRequest request) {
 		try {
@@ -52,11 +52,11 @@
 				|| !StringUtils.hasText(imgCode)) {
 			return false;
 		}
-		
+
 		if (imgCode.equals(sessionImpCode)) {
 			return true;
 		}
-		
+
 		return false;
 	}
 }
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..5a3cc86 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,27 +1,25 @@
 package com.pollex.pam.web.rest;
 
-import com.pollex.pam.domain.Appointment;
-import com.pollex.pam.domain.Consultant;
-import com.pollex.pam.security.SecurityUtils;
-import com.pollex.pam.service.AppointmentService;
-import com.pollex.pam.service.ConsultantService;
-import com.pollex.pam.service.dto.*;
+import com.pollex.pam.business.aop.logging.audit.AuditLoggingInject;
+import com.pollex.pam.business.domain.Appointment;
+import com.pollex.pam.business.domain.Consultant;
+import com.pollex.pam.business.security.SecurityUtils;
+import com.pollex.pam.business.service.AppointmentService;
+import com.pollex.pam.business.service.ConsultantService;
+import com.pollex.pam.business.service.dto.*;
 import org.apache.commons.compress.utils.IOUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.core.io.Resource;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
 import java.util.List;
+
+import static com.pollex.pam.business.aop.logging.audit.AuditLoggingType.CONSULTANT_SEND_FILL_SATISFACTION_NOTICE;
+import static com.pollex.pam.business.aop.logging.audit.AuditLoggingType.EDIT_CONSULTANT_DATA;
 
 @RestController
 @RequestMapping("/api/consultant")
@@ -29,7 +27,7 @@
 
     @Autowired
     ConsultantService consultantService;
-    
+
     @Autowired
     AppointmentService appointmentService;
 
@@ -102,8 +100,8 @@
     	}else {
     		return new ResponseEntity<>(HttpStatus.NOT_FOUND);
     	}
-    	
-    	
+
+
     }
 
     @PostMapping("/record/allAppointmentsView")
@@ -111,7 +109,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 +119,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..c02f1d5 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,13 +1,16 @@
 package com.pollex.pam.web.rest;
 
+import com.pollex.pam.business.aop.logging.audit.AuditLoggingInject;
 import com.pollex.pam.service.CustomerService;
-import com.pollex.pam.service.dto.CustomerDTO;
+import com.pollex.pam.business.service.dto.CustomerDTO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.util.Assert;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
+
+import static com.pollex.pam.business.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..c25ca03 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,9 +1,10 @@
 package com.pollex.pam.web.rest;
 
+import com.pollex.pam.business.aop.logging.audit.AuditLoggingInject;
 import com.pollex.pam.security.jwt.JWTFilter;
 import com.pollex.pam.security.jwt.TokenProvider;
-import com.pollex.pam.security.token.EServiceAuthenticationToken;
-import com.pollex.pam.web.rest.vm.EServiceLoginVM;
+import com.pollex.pam.business.security.token.EServiceAuthenticationToken;
+import com.pollex.pam.business.web.vm.EServiceLoginVM;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
@@ -16,6 +17,8 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import static com.pollex.pam.business.aop.logging.audit.AuditLoggingType.CONSULTANT_LOGIN;
+
 @RestController
 @RequestMapping("/api/eService")
 public class EServiceResource {
@@ -26,6 +29,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..1aaf45c 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,6 @@
 package com.pollex.pam.web.rest;
 
+import com.pollex.pam.business.aop.logging.audit.AuditLoggingInject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -8,27 +9,30 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import com.pollex.pam.domain.InterviewRecord;
-import com.pollex.pam.service.InterviewRecordService;
-import com.pollex.pam.service.dto.InterviewRecordDTO;
+import com.pollex.pam.business.domain.InterviewRecord;
+import com.pollex.pam.business.service.InterviewRecordService;
+import com.pollex.pam.business.service.dto.InterviewRecordDTO;
+
+import static com.pollex.pam.business.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..1661af0 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,29 +1,31 @@
 package com.pollex.pam.web.rest;
 
+import com.pollex.pam.business.aop.logging.audit.AuditLoggingInject;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import com.pollex.pam.domain.Appointment;
-import com.pollex.pam.domain.AppointmentNoticeLog;
-import com.pollex.pam.security.SecurityUtils;
-import com.pollex.pam.service.AppointmentService;
-import com.pollex.pam.service.NoticeService;
-import com.pollex.pam.service.dto.AppointmentNoticeSendDTO;
+import com.pollex.pam.business.domain.Appointment;
+import com.pollex.pam.business.security.SecurityUtils;
+import com.pollex.pam.business.service.AppointmentService;
+import com.pollex.pam.business.service.NoticeService;
+import com.pollex.pam.business.service.dto.AppointmentNoticeSendDTO;
+
+import static com.pollex.pam.business.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..3cad8c3 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.business.aop.logging.audit.AuditLoggingInject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -17,20 +17,22 @@
 import org.springframework.web.bind.annotation.RestController;
 
 import com.pollex.pam.config.ApplicationProperties;
-import com.pollex.pam.domain.Customer;
-import com.pollex.pam.enums.OtpLoginTypeEnum;
-import com.pollex.pam.repository.CustomerRepository;
+import com.pollex.pam.business.domain.Customer;
+import com.pollex.pam.business.enums.OtpLoginTypeEnum;
+import com.pollex.pam.business.repository.CustomerRepository;
 import com.pollex.pam.security.jwt.JWTFilter;
 import com.pollex.pam.security.jwt.TokenProvider;
 import com.pollex.pam.service.CustomerAuthService;
 import com.pollex.pam.service.CustomerService;
-import com.pollex.pam.service.OtpTmpService;
+import com.pollex.pam.business.service.OtpTmpService;
 import com.pollex.pam.service.OtpUtilService;
 import com.pollex.pam.service.OtpWebService;
-import com.pollex.pam.service.dto.CustomerRegisterDTO;
-import com.pollex.pam.service.dto.OtpResponseDTO;
-import com.pollex.pam.web.rest.vm.OtpLoginVM;
-import com.pollex.pam.web.rest.vm.VerifyOtpVM;
+import com.pollex.pam.business.service.dto.CustomerRegisterDTO;
+import com.pollex.pam.business.service.dto.OtpResponseDTO;
+import com.pollex.pam.business.web.vm.OtpLoginVM;
+import com.pollex.pam.business.web.vm.VerifyOtpVM;
+
+import static com.pollex.pam.business.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/PersonalNotificationResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/PersonalNotificationResource.java
index ee805b5..9d2b05f 100644
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/PersonalNotificationResource.java
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/PersonalNotificationResource.java
@@ -8,34 +8,31 @@
 import org.springframework.http.ResponseEntity;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import com.pollex.pam.domain.Consultant;
-import com.pollex.pam.domain.PersonalNotification;
-import com.pollex.pam.enums.NotificationTypeEnum;
-import com.pollex.pam.enums.PersonalNotificationRoleEnum;
-import com.pollex.pam.repository.PersonalNotificationRepository;
-import com.pollex.pam.security.SecurityUtils;
-import com.pollex.pam.service.ConsultantService;
-import com.pollex.pam.service.PersonalNotificationService;
+import com.pollex.pam.business.domain.Consultant;
+import com.pollex.pam.business.domain.PersonalNotification;
+import com.pollex.pam.business.enums.PersonalNotificationRoleEnum;
+import com.pollex.pam.business.repository.PersonalNotificationRepository;
+import com.pollex.pam.business.security.SecurityUtils;
+import com.pollex.pam.business.service.ConsultantService;
+import com.pollex.pam.business.service.PersonalNotificationService;
 
 @RestController
 @RequestMapping("/api/personal_notification")
 public class PersonalNotificationResource {
-	
+
 	@Autowired
 	PersonalNotificationService personalNotificationService;
-	
+
 	@Autowired
 	PersonalNotificationRepository personalNotificationRepository;
-	
+
 	@Autowired
 	ConsultantService consultantService;
-	
+
 	@GetMapping("/getMyPersonalNotification")
 	public ResponseEntity<List<PersonalNotification>> getMyPersonalNotification() {
 		List<PersonalNotification> personalNotificationList = new ArrayList<>();
@@ -47,7 +44,7 @@
 		}
 		return new ResponseEntity<>(personalNotificationList, HttpStatus.OK);
 	}
-	
+
 	@PostMapping("/readAllMyNotification")
 	public void readAll() {
 		personalNotificationService.readAllMyNotification();
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/PublicUserResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/PublicUserResource.java
index 2b07888..be59f4d 100644
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/PublicUserResource.java
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/PublicUserResource.java
@@ -1,7 +1,7 @@
 package com.pollex.pam.web.rest;
 
-import com.pollex.pam.service.UserService;
-import com.pollex.pam.service.dto.UserDTO;
+import com.pollex.pam.business.service.UserService;
+import com.pollex.pam.business.service.dto.UserDTO;
 import java.util.*;
 import java.util.Collections;
 import org.slf4j.Logger;
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..d1af1d5 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,7 +2,9 @@
 
 import java.util.List;
 
-import com.pollex.pam.enums.SatisfactionTypeEnum;
+import com.pollex.pam.business.aop.logging.audit.AuditLoggingInject;
+import com.pollex.pam.business.aop.logging.audit.AuditLoggingType;
+import com.pollex.pam.business.enums.SatisfactionTypeEnum;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -13,11 +15,11 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import com.pollex.pam.domain.Satisfaction;
-import com.pollex.pam.security.SecurityUtils;
-import com.pollex.pam.service.SatisfactionService;
-import com.pollex.pam.service.dto.SatisfactionCustomerScoreDTO;
-import com.pollex.pam.service.dto.SatisfactionDTO;
+import com.pollex.pam.business.domain.Satisfaction;
+import com.pollex.pam.business.security.SecurityUtils;
+import com.pollex.pam.business.service.SatisfactionService;
+import com.pollex.pam.business.service.dto.SatisfactionCustomerScoreDTO;
+import com.pollex.pam.business.service.dto.SatisfactionDTO;
 
 @RestController
 @RequestMapping("/api/satisfaction")
@@ -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);
 	}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/TestLoginResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/TestLoginResource.java
index 947b621..8c12c37 100644
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/TestLoginResource.java
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/TestLoginResource.java
@@ -2,10 +2,9 @@
 
 import com.pollex.pam.config.ApplicationProperties;
 import com.pollex.pam.security.jwt.TokenProvider;
-import com.pollex.pam.service.LoginRecordService;
 import com.pollex.pam.service.OtpWebService;
-import com.pollex.pam.service.dto.EServiceResponse;
-import com.pollex.pam.service.dto.OtpResponseDTO;
+import com.pollex.pam.business.service.dto.EServiceResponse;
+import com.pollex.pam.business.service.dto.OtpResponseDTO;
 import org.apache.http.conn.ssl.NoopHostnameVerifier;
 import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
 import org.apache.http.impl.client.CloseableHttpClient;
@@ -41,9 +40,6 @@
 public class TestLoginResource {
 
     private final static Logger log = LoggerFactory.getLogger(TestLoginResource.class);
-
-    @Autowired
-    LoginRecordService loginRecordService;
 
     @Autowired
     ApplicationProperties applicationProperty;
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/TestSendMsgResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/TestSendMsgResource.java
index 8920b48..f001429 100644
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/TestSendMsgResource.java
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/TestSendMsgResource.java
@@ -1,12 +1,11 @@
 package com.pollex.pam.web.rest;
 
-import com.pollex.pam.service.AppointmentService;
-import com.pollex.pam.service.SendMsgService;
-import com.pollex.pam.service.dto.SendSMSResponse;
+import com.pollex.pam.business.service.AppointmentService;
+import com.pollex.pam.business.service.SendMsgService;
+import com.pollex.pam.business.service.dto.SendSMSResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
-import org.thymeleaf.context.Context;
 import org.thymeleaf.spring5.SpringTemplateEngine;
 
 @Deprecated
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/UserJWTController.java b/pamapi/src/main/java/com/pollex/pam/web/rest/UserJWTController.java
index 4848e08..90c0be8 100644
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/UserJWTController.java
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/UserJWTController.java
@@ -3,7 +3,7 @@
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.pollex.pam.security.jwt.JWTFilter;
 import com.pollex.pam.security.jwt.TokenProvider;
-import com.pollex.pam.web.rest.vm.LoginVM;
+import com.pollex.pam.business.web.vm.LoginVM;
 import javax.validation.Valid;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/UserResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/UserResource.java
index f7b7e17..6c1217b 100644
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/UserResource.java
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/UserResource.java
@@ -1,15 +1,15 @@
 package com.pollex.pam.web.rest;
 
-import com.pollex.pam.config.Constants;
-import com.pollex.pam.domain.User;
-import com.pollex.pam.repository.UserRepository;
-import com.pollex.pam.security.AuthoritiesConstants;
-import com.pollex.pam.service.MailService;
-import com.pollex.pam.service.UserService;
-import com.pollex.pam.service.dto.AdminUserDTO;
-import com.pollex.pam.web.rest.errors.BadRequestAlertException;
-import com.pollex.pam.web.rest.errors.EmailAlreadyUsedException;
-import com.pollex.pam.web.rest.errors.LoginAlreadyUsedException;
+import com.pollex.pam.business.config.Constants;
+import com.pollex.pam.business.domain.User;
+import com.pollex.pam.business.repository.UserRepository;
+import com.pollex.pam.business.security.AuthoritiesConstants;
+import com.pollex.pam.business.service.MailService;
+import com.pollex.pam.business.service.UserService;
+import com.pollex.pam.business.service.dto.AdminUserDTO;
+import com.pollex.pam.business.web.errors.BadRequestAlertException;
+import com.pollex.pam.business.web.errors.EmailAlreadyUsedException;
+import com.pollex.pam.business.web.errors.LoginAlreadyUsedException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.*;
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/AppointmentClosedInfoNotFoundException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/AppointmentClosedInfoNotFoundException.java
deleted file mode 100644
index e1e00c8..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/AppointmentClosedInfoNotFoundException.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.pollex.pam.web.rest.errors;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "Appointment close info not found")
-public class AppointmentClosedInfoNotFoundException extends RuntimeException{
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/AppointmentMemoNotFoundException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/AppointmentMemoNotFoundException.java
deleted file mode 100644
index b02f14e..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/AppointmentMemoNotFoundException.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.pollex.pam.web.rest.errors;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "Appointment memo not found")
-public class AppointmentMemoNotFoundException extends RuntimeException{
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/AppointmentNotFoundException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/AppointmentNotFoundException.java
deleted file mode 100644
index be2eb8b..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/AppointmentNotFoundException.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.pollex.pam.web.rest.errors;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "Appointment not found")
-public class AppointmentNotFoundException extends RuntimeException{
-
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/BadRequestAlertException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/BadRequestAlertException.java
deleted file mode 100644
index 5818e55..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/BadRequestAlertException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.pollex.pam.web.rest.errors;
-
-import java.net.URI;
-import java.util.HashMap;
-import java.util.Map;
-import org.zalando.problem.AbstractThrowableProblem;
-import org.zalando.problem.Status;
-
-public class BadRequestAlertException extends AbstractThrowableProblem {
-
-    private static final long serialVersionUID = 1L;
-
-    private final String entityName;
-
-    private final String errorKey;
-
-    public BadRequestAlertException(String defaultMessage, String entityName, String errorKey) {
-        this(ErrorConstants.DEFAULT_TYPE, defaultMessage, entityName, errorKey);
-    }
-
-    public BadRequestAlertException(URI type, String defaultMessage, String entityName, String errorKey) {
-        super(type, defaultMessage, Status.BAD_REQUEST, null, null, null, getAlertParameters(entityName, errorKey));
-        this.entityName = entityName;
-        this.errorKey = errorKey;
-    }
-
-    public String getEntityName() {
-        return entityName;
-    }
-
-    public String getErrorKey() {
-        return errorKey;
-    }
-
-    private static Map<String, Object> getAlertParameters(String entityName, String errorKey) {
-        Map<String, Object> parameters = new HashMap<>();
-        parameters.put("message", "error." + errorKey);
-        parameters.put("params", entityName);
-        return parameters;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/ConsultantNotFoundException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/ConsultantNotFoundException.java
deleted file mode 100644
index 517d418..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/ConsultantNotFoundException.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.pollex.pam.web.rest.errors;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "Consultant not found")
-public class ConsultantNotFoundException extends RuntimeException{
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/CustomerNotRegisteredException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/CustomerNotRegisteredException.java
deleted file mode 100644
index 89acfc0..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/CustomerNotRegisteredException.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.pollex.pam.web.rest.errors;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-@ResponseStatus(code = HttpStatus.FORBIDDEN, reason = "CustomerNotRegistered")
-public class CustomerNotRegisteredException extends RuntimeException{
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/EServiceErrorException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/EServiceErrorException.java
deleted file mode 100644
index ceef292..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/EServiceErrorException.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.pollex.pam.web.rest.errors;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-@ResponseStatus(code = HttpStatus.UNAUTHORIZED)
-public class EServiceErrorException extends RuntimeException{
-    public EServiceErrorException(String message) {
-        super(message);
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/EmailAlreadyUsedException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/EmailAlreadyUsedException.java
deleted file mode 100644
index 8d05d20..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/EmailAlreadyUsedException.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.pollex.pam.web.rest.errors;
-
-public class EmailAlreadyUsedException extends BadRequestAlertException {
-
-    private static final long serialVersionUID = 1L;
-
-    public EmailAlreadyUsedException() {
-        super(ErrorConstants.EMAIL_ALREADY_USED_TYPE, "Email is already in use!", "userManagement", "emailexists");
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/ErrorConstants.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/ErrorConstants.java
deleted file mode 100644
index 49e421c..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/ErrorConstants.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.pollex.pam.web.rest.errors;
-
-import java.net.URI;
-
-public final class ErrorConstants {
-
-    public static final String ERR_CONCURRENCY_FAILURE = "error.concurrencyFailure";
-    public static final String ERR_VALIDATION = "error.validation";
-    public static final String PROBLEM_BASE_URL = "https://www.jhipster.tech/problem";
-    public static final URI DEFAULT_TYPE = URI.create(PROBLEM_BASE_URL + "/problem-with-message");
-    public static final URI CONSTRAINT_VIOLATION_TYPE = URI.create(PROBLEM_BASE_URL + "/constraint-violation");
-    public static final URI INVALID_PASSWORD_TYPE = URI.create(PROBLEM_BASE_URL + "/invalid-password");
-    public static final URI EMAIL_ALREADY_USED_TYPE = URI.create(PROBLEM_BASE_URL + "/email-already-used");
-    public static final URI LOGIN_ALREADY_USED_TYPE = URI.create(PROBLEM_BASE_URL + "/login-already-used");
-
-    private ErrorConstants() {}
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/ExceptionTranslator.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/ExceptionTranslator.java
index e59e428..5c00cba 100644
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/ExceptionTranslator.java
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/ExceptionTranslator.java
@@ -9,6 +9,9 @@
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.servlet.http.HttpServletRequest;
+
+import com.pollex.pam.business.service.UsernameAlreadyUsedException;
+import com.pollex.pam.business.web.errors.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.env.Environment;
@@ -117,7 +120,7 @@
 
     @ExceptionHandler
     public ResponseEntity<Problem> handleEmailAlreadyUsedException(
-        com.pollex.pam.service.EmailAlreadyUsedException ex,
+        com.pollex.pam.business.service.EmailAlreadyUsedException ex,
         NativeWebRequest request
     ) {
         EmailAlreadyUsedException problem = new EmailAlreadyUsedException();
@@ -130,7 +133,7 @@
 
     @ExceptionHandler
     public ResponseEntity<Problem> handleUsernameAlreadyUsedException(
-        com.pollex.pam.service.UsernameAlreadyUsedException ex,
+        UsernameAlreadyUsedException ex,
         NativeWebRequest request
     ) {
         LoginAlreadyUsedException problem = new LoginAlreadyUsedException();
@@ -143,7 +146,7 @@
 
     @ExceptionHandler
     public ResponseEntity<Problem> handleInvalidPasswordException(
-        com.pollex.pam.service.InvalidPasswordException ex,
+        com.pollex.pam.business.service.InvalidPasswordException ex,
         NativeWebRequest request
     ) {
         return create(new InvalidPasswordException(), request);
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/FieldErrorVM.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/FieldErrorVM.java
deleted file mode 100644
index 4028995..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/FieldErrorVM.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.pollex.pam.web.rest.errors;
-
-import java.io.Serializable;
-
-public class FieldErrorVM implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private final String objectName;
-
-    private final String field;
-
-    private final String message;
-
-    public FieldErrorVM(String dto, String field, String message) {
-        this.objectName = dto;
-        this.field = field;
-        this.message = message;
-    }
-
-    public String getObjectName() {
-        return objectName;
-    }
-
-    public String getField() {
-        return field;
-    }
-
-    public String getMessage() {
-        return message;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/InterviewRecordNotFoundException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/InterviewRecordNotFoundException.java
deleted file mode 100644
index c3a426d..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/InterviewRecordNotFoundException.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.pollex.pam.web.rest.errors;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "InterviewRecord not found")
-public class InterviewRecordNotFoundException extends RuntimeException{
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/InvalidPasswordException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/InvalidPasswordException.java
deleted file mode 100644
index dd3812f..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/InvalidPasswordException.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.pollex.pam.web.rest.errors;
-
-import org.zalando.problem.AbstractThrowableProblem;
-import org.zalando.problem.Status;
-
-public class InvalidPasswordException extends AbstractThrowableProblem {
-
-    private static final long serialVersionUID = 1L;
-
-    public InvalidPasswordException() {
-        super(ErrorConstants.INVALID_PASSWORD_TYPE, "Incorrect password", Status.BAD_REQUEST);
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/LoginAlreadyUsedException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/LoginAlreadyUsedException.java
deleted file mode 100644
index aab2f9a..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/LoginAlreadyUsedException.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.pollex.pam.web.rest.errors;
-
-public class LoginAlreadyUsedException extends BadRequestAlertException {
-
-    private static final long serialVersionUID = 1L;
-
-    public LoginAlreadyUsedException() {
-        super(ErrorConstants.LOGIN_ALREADY_USED_TYPE, "Login name already used!", "userManagement", "userexists");
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/NotFoundExpiringAppointmentException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/NotFoundExpiringAppointmentException.java
deleted file mode 100644
index a2a02f0..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/NotFoundExpiringAppointmentException.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.pollex.pam.web.rest.errors;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "not found any expiring appointment")
-public class NotFoundExpiringAppointmentException extends RuntimeException {
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/NotLoginException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/NotLoginException.java
deleted file mode 100644
index 233f1b4..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/NotLoginException.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.pollex.pam.web.rest.errors;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-@ResponseStatus(code = HttpStatus.UNAUTHORIZED, reason = "Security Context error authentication")
-public class NotLoginException extends RuntimeException{
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/OtpLoginFailException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/OtpLoginFailException.java
deleted file mode 100644
index 65ff04f..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/OtpLoginFailException.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.pollex.pam.web.rest.errors;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-@ResponseStatus(code = HttpStatus.UNAUTHORIZED)
-public class OtpLoginFailException extends RuntimeException{
-    public OtpLoginFailException(String message) {
-        super(message);
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SatisfactionAlreadyExistException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SatisfactionAlreadyExistException.java
deleted file mode 100644
index 013590a..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SatisfactionAlreadyExistException.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.pollex.pam.web.rest.errors;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-@ResponseStatus(code = HttpStatus.INTERNAL_SERVER_ERROR, reason = "Satisfaction already exist")
-public class SatisfactionAlreadyExistException extends RuntimeException{
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SatisfactionNotFoundException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SatisfactionNotFoundException.java
deleted file mode 100644
index e504c34..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SatisfactionNotFoundException.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.pollex.pam.web.rest.errors;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "Satisfaction not found")
-public class SatisfactionNotFoundException extends RuntimeException{
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SendEmailFailException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SendEmailFailException.java
deleted file mode 100644
index b43324b..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SendEmailFailException.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.pollex.pam.web.rest.errors;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-@ResponseStatus(code = HttpStatus.INTERNAL_SERVER_ERROR, reason = "send email failed")
-public class SendEmailFailException extends RuntimeException {
-    public SendEmailFailException() {}
-    public SendEmailFailException(String message) {
-        super(message);
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SendSMSFailException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SendSMSFailException.java
deleted file mode 100644
index 0b721ab..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SendSMSFailException.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.pollex.pam.web.rest.errors;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-@ResponseStatus(code = HttpStatus.INTERNAL_SERVER_ERROR, reason = "send sms failed")
-public class SendSMSFailException extends RuntimeException{
-    public SendSMSFailException(){}
-    public SendSMSFailException(String message) {
-        super(message);
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/package-info.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/package-info.java
deleted file mode 100644
index b010ea3..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/package-info.java
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * Specific errors used with Zalando's "problem-spring-web" library.
- *
- * More information on https://github.com/zalando/problem-spring-web
- */
-package com.pollex.pam.web.rest.errors;
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/vm/EServiceLoginVM.java b/pamapi/src/main/java/com/pollex/pam/web/rest/vm/EServiceLoginVM.java
deleted file mode 100644
index 2cebe8e..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/vm/EServiceLoginVM.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.pollex.pam.web.rest.vm;
-
-public class EServiceLoginVM {
-    private String username;
-    private String password;
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/vm/KeyAndPasswordVM.java b/pamapi/src/main/java/com/pollex/pam/web/rest/vm/KeyAndPasswordVM.java
deleted file mode 100644
index 7bb8309..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/vm/KeyAndPasswordVM.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.pollex.pam.web.rest.vm;
-
-/**
- * View Model object for storing the user's key and password.
- */
-public class KeyAndPasswordVM {
-
-    private String key;
-
-    private String newPassword;
-
-    public String getKey() {
-        return key;
-    }
-
-    public void setKey(String key) {
-        this.key = key;
-    }
-
-    public String getNewPassword() {
-        return newPassword;
-    }
-
-    public void setNewPassword(String newPassword) {
-        this.newPassword = newPassword;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/vm/LoginVM.java b/pamapi/src/main/java/com/pollex/pam/web/rest/vm/LoginVM.java
deleted file mode 100644
index 97efc36..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/vm/LoginVM.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.pollex.pam.web.rest.vm;
-
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
-
-/**
- * View Model object for storing a user's credentials.
- */
-public class LoginVM {
-
-    @NotNull
-    @Size(min = 1, max = 50)
-    private String username;
-
-    @NotNull
-    @Size(min = 4, max = 100)
-    private String password;
-
-    private boolean rememberMe;
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    public boolean isRememberMe() {
-        return rememberMe;
-    }
-
-    public void setRememberMe(boolean rememberMe) {
-        this.rememberMe = rememberMe;
-    }
-
-    // prettier-ignore
-    @Override
-    public String toString() {
-        return "LoginVM{" +
-            "username='" + username + '\'' +
-            ", rememberMe=" + rememberMe +
-            '}';
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/vm/ManagedUserVM.java b/pamapi/src/main/java/com/pollex/pam/web/rest/vm/ManagedUserVM.java
deleted file mode 100644
index 74605b5..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/vm/ManagedUserVM.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.pollex.pam.web.rest.vm;
-
-import com.pollex.pam.service.dto.AdminUserDTO;
-import javax.validation.constraints.Size;
-
-/**
- * View Model extending the AdminUserDTO, which is meant to be used in the user management UI.
- */
-public class ManagedUserVM extends AdminUserDTO {
-
-    public static final int PASSWORD_MIN_LENGTH = 4;
-
-    public static final int PASSWORD_MAX_LENGTH = 100;
-
-    @Size(min = PASSWORD_MIN_LENGTH, max = PASSWORD_MAX_LENGTH)
-    private String password;
-
-    public ManagedUserVM() {
-        // Empty constructor needed for Jackson.
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    // prettier-ignore
-    @Override
-    public String toString() {
-        return "ManagedUserVM{" + super.toString() + "} ";
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/vm/OtpAccount.java b/pamapi/src/main/java/com/pollex/pam/web/rest/vm/OtpAccount.java
deleted file mode 100644
index e64bdca..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/vm/OtpAccount.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.pollex.pam.web.rest.vm;
-
-import java.util.Optional;
-
-import org.apache.http.util.Asserts;
-import org.springframework.util.Assert;
-import org.springframework.util.StringUtils;
-
-import com.pollex.pam.domain.Customer;
-
-public class OtpAccount {
-    private String account;
-    private String indexKey;
-
-    public OtpAccount(String account, String indexKey) {
-        this.account = account;
-        this.indexKey = indexKey;
-    }
-
-    public String getAccount() {
-        return account;
-    }
-
-    public void setAccount(String account) {
-        this.account = account;
-    }
-
-    public String getIndexKey() {
-        return indexKey;
-    }
-
-    public void setIndexKey(String indexKey) {
-        this.indexKey = indexKey;
-    }
-    
-    public static OtpAccount createOtpAccount(Customer customerAcct, String indexKey) {
-    	String acct = customerAcct.toAccountString();
-    	
-    	Assert.hasText(acct, "Customer phone or email must not null");
-    	
-    	return new OtpAccount(acct, indexKey);
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/vm/OtpEmailLoginVM.java b/pamapi/src/main/java/com/pollex/pam/web/rest/vm/OtpEmailLoginVM.java
deleted file mode 100644
index c7a4ef6..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/vm/OtpEmailLoginVM.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.pollex.pam.web.rest.vm;
-
-public class OtpEmailLoginVM {
-    private String email;
-
-    public String getEmail() {
-        return email;
-    }
-
-    public void setEmail(String email) {
-        this.email = email;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/vm/OtpLoginVM.java b/pamapi/src/main/java/com/pollex/pam/web/rest/vm/OtpLoginVM.java
deleted file mode 100644
index e376624..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/vm/OtpLoginVM.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.pollex.pam.web.rest.vm;
-
-import com.pollex.pam.enums.OtpLoginTypeEnum;
-
-public class OtpLoginVM {
-    private OtpLoginTypeEnum loginType;
-    private String account;
-
-    public OtpLoginTypeEnum getLoginType() {
-        return loginType;
-    }
-
-    public void setLoginType(OtpLoginTypeEnum loginType) {
-        this.loginType = loginType;
-    }
-
-    public String getAccount() {
-        return account;
-    }
-
-    public void setAccount(String account) {
-        this.account = account;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/vm/OtpSMSLoginVM.java b/pamapi/src/main/java/com/pollex/pam/web/rest/vm/OtpSMSLoginVM.java
deleted file mode 100644
index 830ba8d..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/vm/OtpSMSLoginVM.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.pollex.pam.web.rest.vm;
-
-public class OtpSMSLoginVM {
-    private String phone;
-
-    public String getPhone() {
-        return phone;
-    }
-
-    public void setPhone(String phone) {
-        this.phone = phone;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/vm/VerifyOtpVM.java b/pamapi/src/main/java/com/pollex/pam/web/rest/vm/VerifyOtpVM.java
deleted file mode 100644
index 8465eee..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/vm/VerifyOtpVM.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.pollex.pam.web.rest.vm;
-
-public class VerifyOtpVM {
-    private String account;
-    private String indexKey;
-    private String otpCode;
-
-    public String getAccount() {
-        return account;
-    }
-
-    public void setAccount(String account) {
-        this.account = account;
-    }
-
-    public String getIndexKey() {
-        return indexKey;
-    }
-
-    public void setIndexKey(String indexKey) {
-        this.indexKey = indexKey;
-    }
-
-    public String getOtpCode() {
-        return otpCode;
-    }
-
-    public void setOtpCode(String otpCode) {
-        this.otpCode = otpCode;
-    }
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/vm/package-info.java b/pamapi/src/main/java/com/pollex/pam/web/rest/vm/package-info.java
deleted file mode 100644
index 2a5048e..0000000
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/vm/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * View Models used by Spring MVC REST controllers.
- */
-package com.pollex.pam.web.rest.vm;
diff --git a/pamapi/src/main/resources/i18n/messages.properties b/pamapi/src/main/resources/i18n/messages.properties
index 8f0b474..e20d485 100644
--- a/pamapi/src/main/resources/i18n/messages.properties
+++ b/pamapi/src/main/resources/i18n/messages.properties
@@ -24,7 +24,7 @@
 email.write.satisfaction.content={0}\u9867\u554F\u8ACB\u60A8\u586B\u5BEB\u4FDD\u8AA0\u5A92\u5408\u5E73\u53F0\u7684\u6EFF\u610F\u5EA6\u8A55\u6BD4{1}
 
 # appointment pending notify email
-email.write.appointment.pending.content=\u60a8\u6709{0}\u5247\u9810\u7d04\u55ae\u672a\u9032\u884c\u806f\u7e6b\uff0c\u8acb\u76e1\u901f\u8655\u7406
+email.write.appointment.pending.content=\u60a8\u6709{0}\u5247\u9810\u7d04\u55ae\u672a\u9032\u884c\u806f\u7e6b\uff0c\u8acb\u76e1\u901f\u8655\u7406\uff0c\u9ede\u64ca\u7db2\u5740\uff1a{1}
 
 # appointment expiring notify email
 email.write.appointment.expiring.content=\u5f88\u62b1\u6b49\uff01\u60a8\u9810\u7d04{0}\u9867\u554f\u6b63\u5fd9\u788c\u4e2d\uff0c\u8acb\u60a8\u53d6\u6d88\u9810\u7d04\u4e26\u6539\u9078\u5176\u4ed6\u9867\u554f\uff0c\u8acb\u9ede\u64ca\u7db2\u5740\uff1a{1}
diff --git a/pamapi/src/main/resources/i18n/messages_zh_TW.properties b/pamapi/src/main/resources/i18n/messages_zh_TW.properties
index f53d7c1..e460549 100644
--- a/pamapi/src/main/resources/i18n/messages_zh_TW.properties
+++ b/pamapi/src/main/resources/i18n/messages_zh_TW.properties
@@ -24,7 +24,7 @@
 email.write.satisfaction.content={0}\u9867\u554F\u8ACB\u60A8\u586B\u5BEB\u4FDD\u8AA0\u5A92\u5408\u5E73\u53F0\u7684\u6EFF\u610F\u5EA6\u8A55\u6BD4{1}
 
 # appointment pending notify email
-email.write.appointment.pending.content=\u60a8\u6709{0}\u5247\u9810\u7d04\u55ae\u672a\u9032\u884c\u806f\u7e6b\uff0c\u8acb\u76e1\u901f\u8655\u7406
+email.write.appointment.pending.content=\u60a8\u6709{0}\u5247\u9810\u7d04\u55ae\u672a\u9032\u884c\u806f\u7e6b\uff0c\u8acb\u76e1\u901f\u8655\u7406\uff0c\u9ede\u64ca\u7db2\u5740\uff1a{1}
 
 # appointment expiring notify email
 email.write.appointment.expiring.content=\u5f88\u62b1\u6b49\uff01\u60a8\u9810\u7d04{0}\u9867\u554f\u6b63\u5fd9\u788c\u4e2d\uff0c\u8acb\u60a8\u53d6\u6d88\u9810\u7d04\u4e26\u6539\u9078\u5176\u4ed6\u9867\u554f\uff0c\u8acb\u9ede\u64ca\u7db2\u5740\uff1a{1}
diff --git a/pamapi/src/main/resources/templates/mail/appointmentPendingNotifyEmail.html b/pamapi/src/main/resources/templates/mail/appointmentPendingNotifyEmail.html
index 29902c7..4e3ba74 100644
--- a/pamapi/src/main/resources/templates/mail/appointmentPendingNotifyEmail.html
+++ b/pamapi/src/main/resources/templates/mail/appointmentPendingNotifyEmail.html
@@ -5,7 +5,7 @@
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 </head>
 <body>
-<p th:text="#{email.write.appointment.pending.content(${pendingAppointmentSum})}">���������脰�蝜恬������</p>
+<p th:text="#{email.write.appointment.pending.content(${pendingAppointmentSum}, ${notifyUrl})}">���������脰�蝜恬��������雯��嚗�</p>
 </body>
 </html>
 
diff --git a/pamapi/src/test/java/com/pollex/pam/ArchTest.java b/pamapi/src/test/java/com/pollex/pam/ArchTest.java
index d98c800..47e6326 100644
--- a/pamapi/src/test/java/com/pollex/pam/ArchTest.java
+++ b/pamapi/src/test/java/com/pollex/pam/ArchTest.java
@@ -17,9 +17,9 @@
 
         noClasses()
             .that()
-            .resideInAnyPackage("com.pollex.pam.service..")
+            .resideInAnyPackage("com.pollex.pam.business.service..")
             .or()
-            .resideInAnyPackage("com.pollex.pam.repository..")
+            .resideInAnyPackage("com.pollex.pam.business.repository..")
             .should()
             .dependOnClassesThat()
             .resideInAnyPackage("..com.pollex.pam.web..")
diff --git a/pamapi/src/test/java/com/pollex/pam/config/NoOpMailConfiguration.java b/pamapi/src/test/java/com/pollex/pam/config/NoOpMailConfiguration.java
index cd88e1d..4a556b2 100644
--- a/pamapi/src/test/java/com/pollex/pam/config/NoOpMailConfiguration.java
+++ b/pamapi/src/test/java/com/pollex/pam/config/NoOpMailConfiguration.java
@@ -4,7 +4,7 @@
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.mock;
 
-import com.pollex.pam.service.MailService;
+import com.pollex.pam.business.service.MailService;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
diff --git a/pamapi/src/test/java/com/pollex/pam/config/timezone/HibernateTimeZoneIT.java b/pamapi/src/test/java/com/pollex/pam/config/timezone/HibernateTimeZoneIT.java
deleted file mode 100644
index f0db7f2..0000000
--- a/pamapi/src/test/java/com/pollex/pam/config/timezone/HibernateTimeZoneIT.java
+++ /dev/null
@@ -1,162 +0,0 @@
-package com.pollex.pam.config.timezone;
-
-import static java.lang.String.format;
-import static org.assertj.core.api.Assertions.assertThat;
-
-import com.pollex.pam.IntegrationTest;
-import com.pollex.pam.repository.timezone.DateTimeWrapper;
-import com.pollex.pam.repository.timezone.DateTimeWrapperRepository;
-import java.time.*;
-import java.time.format.DateTimeFormatter;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.support.rowset.SqlRowSet;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * Integration tests for the ZoneId Hibernate configuration.
- */
-@IntegrationTest
-class HibernateTimeZoneIT {
-
-    @Autowired
-    private DateTimeWrapperRepository dateTimeWrapperRepository;
-
-    @Autowired
-    private JdbcTemplate jdbcTemplate;
-
-    @Value("${spring.jpa.properties.hibernate.jdbc.time_zone:UTC}")
-    private String zoneId;
-
-    private DateTimeWrapper dateTimeWrapper;
-    private DateTimeFormatter dateTimeFormatter;
-    private DateTimeFormatter timeFormatter;
-    private DateTimeFormatter dateFormatter;
-
-    @BeforeEach
-    public void setup() {
-        dateTimeWrapper = new DateTimeWrapper();
-        dateTimeWrapper.setInstant(Instant.parse("2014-11-12T05:50:00.0Z"));
-        dateTimeWrapper.setLocalDateTime(LocalDateTime.parse("2014-11-12T07:50:00.0"));
-        dateTimeWrapper.setOffsetDateTime(OffsetDateTime.parse("2011-12-14T08:30:00.0Z"));
-        dateTimeWrapper.setZonedDateTime(ZonedDateTime.parse("2011-12-14T08:30:00.0Z"));
-        dateTimeWrapper.setLocalTime(LocalTime.parse("14:30:00"));
-        dateTimeWrapper.setOffsetTime(OffsetTime.parse("14:30:00+02:00"));
-        dateTimeWrapper.setLocalDate(LocalDate.parse("2016-09-10"));
-
-        dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S").withZone(ZoneId.of(zoneId));
-
-        timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss").withZone(ZoneId.of(zoneId));
-
-        dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-    }
-
-    @Test
-    @Transactional
-    void storeInstantWithZoneIdConfigShouldBeStoredOnGMTTimeZone() {
-        dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper);
-
-        String request = generateSqlRequest("instant", dateTimeWrapper.getId());
-        SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request);
-        String expectedValue = dateTimeFormatter.format(dateTimeWrapper.getInstant());
-
-        assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue);
-    }
-
-    @Test
-    @Transactional
-    void storeLocalDateTimeWithZoneIdConfigShouldBeStoredOnGMTTimeZone() {
-        dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper);
-
-        String request = generateSqlRequest("local_date_time", dateTimeWrapper.getId());
-        SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request);
-        String expectedValue = dateTimeWrapper.getLocalDateTime().atZone(ZoneId.systemDefault()).format(dateTimeFormatter);
-
-        assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue);
-    }
-
-    @Test
-    @Transactional
-    void storeOffsetDateTimeWithZoneIdConfigShouldBeStoredOnGMTTimeZone() {
-        dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper);
-
-        String request = generateSqlRequest("offset_date_time", dateTimeWrapper.getId());
-        SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request);
-        String expectedValue = dateTimeWrapper.getOffsetDateTime().format(dateTimeFormatter);
-
-        assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue);
-    }
-
-    @Test
-    @Transactional
-    void storeZoneDateTimeWithZoneIdConfigShouldBeStoredOnGMTTimeZone() {
-        dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper);
-
-        String request = generateSqlRequest("zoned_date_time", dateTimeWrapper.getId());
-        SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request);
-        String expectedValue = dateTimeWrapper.getZonedDateTime().format(dateTimeFormatter);
-
-        assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue);
-    }
-
-    @Test
-    @Transactional
-    void storeLocalTimeWithZoneIdConfigShouldBeStoredOnGMTTimeZoneAccordingToHis1stJan1970Value() {
-        dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper);
-
-        String request = generateSqlRequest("local_time", dateTimeWrapper.getId());
-        SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request);
-        String expectedValue = dateTimeWrapper
-            .getLocalTime()
-            .atDate(LocalDate.of(1970, Month.JANUARY, 1))
-            .atZone(ZoneId.systemDefault())
-            .format(timeFormatter);
-
-        assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue);
-    }
-
-    @Test
-    @Transactional
-    void storeOffsetTimeWithZoneIdConfigShouldBeStoredOnGMTTimeZoneAccordingToHis1stJan1970Value() {
-        dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper);
-
-        String request = generateSqlRequest("offset_time", dateTimeWrapper.getId());
-        SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request);
-        String expectedValue = dateTimeWrapper
-            .getOffsetTime()
-            .toLocalTime()
-            .atDate(LocalDate.of(1970, Month.JANUARY, 1))
-            .atZone(ZoneId.systemDefault())
-            .format(timeFormatter);
-
-        assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue);
-    }
-
-    @Test
-    @Transactional
-    void storeLocalDateWithZoneIdConfigShouldBeStoredWithoutTransformation() {
-        dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper);
-
-        String request = generateSqlRequest("local_date", dateTimeWrapper.getId());
-        SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request);
-        String expectedValue = dateTimeWrapper.getLocalDate().format(dateFormatter);
-
-        assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue);
-    }
-
-    private String generateSqlRequest(String fieldName, long id) {
-        return format("SELECT %s FROM jhi_date_time_wrapper where id=%d", fieldName, id);
-    }
-
-    private void assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(SqlRowSet sqlRowSet, String expectedValue) {
-        while (sqlRowSet.next()) {
-            String dbValue = sqlRowSet.getString(1);
-
-            assertThat(dbValue).isNotNull();
-            assertThat(dbValue).isEqualTo(expectedValue);
-        }
-    }
-}
diff --git a/pamapi/src/test/java/com/pollex/pam/repository/timezone/DateTimeWrapper.java b/pamapi/src/test/java/com/pollex/pam/repository/timezone/DateTimeWrapper.java
deleted file mode 100644
index a6a6684..0000000
--- a/pamapi/src/test/java/com/pollex/pam/repository/timezone/DateTimeWrapper.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package com.pollex.pam.repository.timezone;
-
-import java.io.Serializable;
-import java.time.*;
-import java.util.Objects;
-import javax.persistence.*;
-
-@Entity
-@Table(name = "jhi_date_time_wrapper")
-public class DateTimeWrapper implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
-    @SequenceGenerator(name = "sequenceGenerator")
-    private Long id;
-
-    @Column(name = "instant")
-    private Instant instant;
-
-    @Column(name = "local_date_time")
-    private LocalDateTime localDateTime;
-
-    @Column(name = "offset_date_time")
-    private OffsetDateTime offsetDateTime;
-
-    @Column(name = "zoned_date_time")
-    private ZonedDateTime zonedDateTime;
-
-    @Column(name = "local_time")
-    private LocalTime localTime;
-
-    @Column(name = "offset_time")
-    private OffsetTime offsetTime;
-
-    @Column(name = "local_date")
-    private LocalDate localDate;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Instant getInstant() {
-        return instant;
-    }
-
-    public void setInstant(Instant instant) {
-        this.instant = instant;
-    }
-
-    public LocalDateTime getLocalDateTime() {
-        return localDateTime;
-    }
-
-    public void setLocalDateTime(LocalDateTime localDateTime) {
-        this.localDateTime = localDateTime;
-    }
-
-    public OffsetDateTime getOffsetDateTime() {
-        return offsetDateTime;
-    }
-
-    public void setOffsetDateTime(OffsetDateTime offsetDateTime) {
-        this.offsetDateTime = offsetDateTime;
-    }
-
-    public ZonedDateTime getZonedDateTime() {
-        return zonedDateTime;
-    }
-
-    public void setZonedDateTime(ZonedDateTime zonedDateTime) {
-        this.zonedDateTime = zonedDateTime;
-    }
-
-    public LocalTime getLocalTime() {
-        return localTime;
-    }
-
-    public void setLocalTime(LocalTime localTime) {
-        this.localTime = localTime;
-    }
-
-    public OffsetTime getOffsetTime() {
-        return offsetTime;
-    }
-
-    public void setOffsetTime(OffsetTime offsetTime) {
-        this.offsetTime = offsetTime;
-    }
-
-    public LocalDate getLocalDate() {
-        return localDate;
-    }
-
-    public void setLocalDate(LocalDate localDate) {
-        this.localDate = localDate;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) {
-            return true;
-        }
-        if (o == null || getClass() != o.getClass()) {
-            return false;
-        }
-
-        DateTimeWrapper dateTimeWrapper = (DateTimeWrapper) o;
-        return !(dateTimeWrapper.getId() == null || getId() == null) && Objects.equals(getId(), dateTimeWrapper.getId());
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hashCode(getId());
-    }
-
-    // prettier-ignore
-    @Override
-    public String toString() {
-        return "TimeZoneTest{" +
-            "id=" + id +
-            ", instant=" + instant +
-            ", localDateTime=" + localDateTime +
-            ", offsetDateTime=" + offsetDateTime +
-            ", zonedDateTime=" + zonedDateTime +
-            '}';
-    }
-}
diff --git a/pamapi/src/test/java/com/pollex/pam/repository/timezone/DateTimeWrapperRepository.java b/pamapi/src/test/java/com/pollex/pam/repository/timezone/DateTimeWrapperRepository.java
deleted file mode 100644
index 2907925..0000000
--- a/pamapi/src/test/java/com/pollex/pam/repository/timezone/DateTimeWrapperRepository.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.pollex.pam.repository.timezone;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-/**
- * Spring Data JPA repository for the {@link DateTimeWrapper} entity.
- */
-@Repository
-public interface DateTimeWrapperRepository extends JpaRepository<DateTimeWrapper, Long> {}
diff --git a/pamapi/src/test/java/com/pollex/pam/security/DomainUserDetailsServiceIT.java b/pamapi/src/test/java/com/pollex/pam/security/DomainUserDetailsServiceIT.java
deleted file mode 100644
index bba00aa..0000000
--- a/pamapi/src/test/java/com/pollex/pam/security/DomainUserDetailsServiceIT.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package com.pollex.pam.security;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
-
-import com.pollex.pam.IntegrationTest;
-import com.pollex.pam.domain.User;
-import com.pollex.pam.repository.UserRepository;
-import java.util.Locale;
-import org.apache.commons.lang3.RandomStringUtils;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.security.core.userdetails.UserDetailsService;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * Integrations tests for {@link DomainUserDetailsService}.
- */
-@Transactional
-@IntegrationTest
-class DomainUserDetailsServiceIT {
-
-    private static final String USER_ONE_LOGIN = "test-user-one";
-    private static final String USER_ONE_EMAIL = "test-user-one@localhost";
-    private static final String USER_TWO_LOGIN = "test-user-two";
-    private static final String USER_TWO_EMAIL = "test-user-two@localhost";
-    private static final String USER_THREE_LOGIN = "test-user-three";
-    private static final String USER_THREE_EMAIL = "test-user-three@localhost";
-
-    @Autowired
-    private UserRepository userRepository;
-
-    @Autowired
-    private UserDetailsService domainUserDetailsService;
-
-    @BeforeEach
-    public void init() {
-        User userOne = new User();
-        userOne.setLogin(USER_ONE_LOGIN);
-        userOne.setPassword(RandomStringUtils.random(60));
-        userOne.setActivated(true);
-        userOne.setEmail(USER_ONE_EMAIL);
-        userOne.setFirstName("userOne");
-        userOne.setLastName("doe");
-        userOne.setLangKey("en");
-        userRepository.save(userOne);
-
-        User userTwo = new User();
-        userTwo.setLogin(USER_TWO_LOGIN);
-        userTwo.setPassword(RandomStringUtils.random(60));
-        userTwo.setActivated(true);
-        userTwo.setEmail(USER_TWO_EMAIL);
-        userTwo.setFirstName("userTwo");
-        userTwo.setLastName("doe");
-        userTwo.setLangKey("en");
-        userRepository.save(userTwo);
-
-        User userThree = new User();
-        userThree.setLogin(USER_THREE_LOGIN);
-        userThree.setPassword(RandomStringUtils.random(60));
-        userThree.setActivated(false);
-        userThree.setEmail(USER_THREE_EMAIL);
-        userThree.setFirstName("userThree");
-        userThree.setLastName("doe");
-        userThree.setLangKey("en");
-        userRepository.save(userThree);
-    }
-
-    @Test
-    void assertThatUserCanBeFoundByLogin() {
-        UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_ONE_LOGIN);
-        assertThat(userDetails).isNotNull();
-        assertThat(userDetails.getUsername()).isEqualTo(USER_ONE_LOGIN);
-    }
-
-    @Test
-    void assertThatUserCanBeFoundByLoginIgnoreCase() {
-        UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_ONE_LOGIN.toUpperCase(Locale.ENGLISH));
-        assertThat(userDetails).isNotNull();
-        assertThat(userDetails.getUsername()).isEqualTo(USER_ONE_LOGIN);
-    }
-
-    @Test
-    void assertThatUserCanBeFoundByEmail() {
-        UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_TWO_EMAIL);
-        assertThat(userDetails).isNotNull();
-        assertThat(userDetails.getUsername()).isEqualTo(USER_TWO_LOGIN);
-    }
-
-    @Test
-    void assertThatUserCanBeFoundByEmailIgnoreCase() {
-        UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_TWO_EMAIL.toUpperCase(Locale.ENGLISH));
-        assertThat(userDetails).isNotNull();
-        assertThat(userDetails.getUsername()).isEqualTo(USER_TWO_LOGIN);
-    }
-
-    @Test
-    void assertThatEmailIsPrioritizedOverLogin() {
-        UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_ONE_EMAIL);
-        assertThat(userDetails).isNotNull();
-        assertThat(userDetails.getUsername()).isEqualTo(USER_ONE_LOGIN);
-    }
-
-    @Test
-    void assertThatUserNotActivatedExceptionIsThrownForNotActivatedUsers() {
-        assertThatExceptionOfType(UserNotActivatedException.class)
-            .isThrownBy(() -> domainUserDetailsService.loadUserByUsername(USER_THREE_LOGIN));
-    }
-}
diff --git a/pamapi/src/test/java/com/pollex/pam/security/SecurityUtilsUnitTest.java b/pamapi/src/test/java/com/pollex/pam/security/SecurityUtilsUnitTest.java
deleted file mode 100644
index 202c393..0000000
--- a/pamapi/src/test/java/com/pollex/pam/security/SecurityUtilsUnitTest.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package com.pollex.pam.security;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Optional;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.authority.SimpleGrantedAuthority;
-import org.springframework.security.core.context.SecurityContext;
-import org.springframework.security.core.context.SecurityContextHolder;
-
-/**
- * Test class for the {@link SecurityUtils} utility class.
- */
-class SecurityUtilsUnitTest {
-
-    @BeforeEach
-    @AfterEach
-    void cleanup() {
-        SecurityContextHolder.clearContext();
-    }
-
-    @Test
-    void testGetCurrentUserLogin() {
-        SecurityContext securityContext = SecurityContextHolder.createEmptyContext();
-        securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("admin", "admin"));
-        SecurityContextHolder.setContext(securityContext);
-        Optional<String> login = SecurityUtils.getCurrentUserLogin();
-        assertThat(login).contains("admin");
-    }
-
-    @Test
-    void testGetCurrentUserJWT() {
-        SecurityContext securityContext = SecurityContextHolder.createEmptyContext();
-        securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("admin", "token"));
-        SecurityContextHolder.setContext(securityContext);
-        Optional<String> jwt = SecurityUtils.getCurrentUserJWT();
-        assertThat(jwt).contains("token");
-    }
-
-    @Test
-    void testIsAuthenticated() {
-        SecurityContext securityContext = SecurityContextHolder.createEmptyContext();
-        securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("admin", "admin"));
-        SecurityContextHolder.setContext(securityContext);
-        boolean isAuthenticated = SecurityUtils.isAuthenticated();
-        assertThat(isAuthenticated).isTrue();
-    }
-
-    @Test
-    void testAnonymousIsNotAuthenticated() {
-        SecurityContext securityContext = SecurityContextHolder.createEmptyContext();
-        Collection<GrantedAuthority> authorities = new ArrayList<>();
-        authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.ANONYMOUS));
-        securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("anonymous", "anonymous", authorities));
-        SecurityContextHolder.setContext(securityContext);
-        boolean isAuthenticated = SecurityUtils.isAuthenticated();
-        assertThat(isAuthenticated).isFalse();
-    }
-
-    @Test
-    void testHasCurrentUserThisAuthority() {
-        SecurityContext securityContext = SecurityContextHolder.createEmptyContext();
-        Collection<GrantedAuthority> authorities = new ArrayList<>();
-        authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.USER));
-        securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("user", "user", authorities));
-        SecurityContextHolder.setContext(securityContext);
-
-        assertThat(SecurityUtils.hasCurrentUserThisAuthority(AuthoritiesConstants.USER)).isTrue();
-        assertThat(SecurityUtils.hasCurrentUserThisAuthority(AuthoritiesConstants.ADMIN)).isFalse();
-    }
-
-    @Test
-    void testHasCurrentUserAnyOfAuthorities() {
-        SecurityContext securityContext = SecurityContextHolder.createEmptyContext();
-        Collection<GrantedAuthority> authorities = new ArrayList<>();
-        authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.USER));
-        securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("user", "user", authorities));
-        SecurityContextHolder.setContext(securityContext);
-
-        assertThat(SecurityUtils.hasCurrentUserAnyOfAuthorities(AuthoritiesConstants.USER, AuthoritiesConstants.ADMIN)).isTrue();
-        assertThat(SecurityUtils.hasCurrentUserAnyOfAuthorities(AuthoritiesConstants.ANONYMOUS, AuthoritiesConstants.ADMIN)).isFalse();
-    }
-
-    @Test
-    void testHasCurrentUserNoneOfAuthorities() {
-        SecurityContext securityContext = SecurityContextHolder.createEmptyContext();
-        Collection<GrantedAuthority> authorities = new ArrayList<>();
-        authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.USER));
-        securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("user", "user", authorities));
-        SecurityContextHolder.setContext(securityContext);
-
-        assertThat(SecurityUtils.hasCurrentUserNoneOfAuthorities(AuthoritiesConstants.USER, AuthoritiesConstants.ADMIN)).isFalse();
-        assertThat(SecurityUtils.hasCurrentUserNoneOfAuthorities(AuthoritiesConstants.ANONYMOUS, AuthoritiesConstants.ADMIN)).isTrue();
-    }
-}
diff --git a/pamapi/src/test/java/com/pollex/pam/security/jwt/JWTFilterTest.java b/pamapi/src/test/java/com/pollex/pam/security/jwt/JWTFilterTest.java
deleted file mode 100644
index d459104..0000000
--- a/pamapi/src/test/java/com/pollex/pam/security/jwt/JWTFilterTest.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package com.pollex.pam.security.jwt;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import com.pollex.pam.security.AuthoritiesConstants;
-import io.jsonwebtoken.io.Decoders;
-import io.jsonwebtoken.security.Keys;
-import java.util.Collections;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.springframework.http.HttpStatus;
-import org.springframework.mock.web.MockFilterChain;
-import org.springframework.mock.web.MockHttpServletRequest;
-import org.springframework.mock.web.MockHttpServletResponse;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.authority.SimpleGrantedAuthority;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.test.util.ReflectionTestUtils;
-import tech.jhipster.config.JHipsterProperties;
-
-class JWTFilterTest {
-
-    private TokenProvider tokenProvider;
-
-    private JWTFilter jwtFilter;
-
-    @BeforeEach
-    public void setup() {
-        JHipsterProperties jHipsterProperties = new JHipsterProperties();
-        String base64Secret = "fd54a45s65fds737b9aafcb3412e07ed99b267f33413274720ddbb7f6c5e64e9f14075f2d7ed041592f0b7657baf8";
-        jHipsterProperties.getSecurity().getAuthentication().getJwt().setBase64Secret(base64Secret);
-        tokenProvider = new TokenProvider(jHipsterProperties);
-        ReflectionTestUtils.setField(tokenProvider, "key", Keys.hmacShaKeyFor(Decoders.BASE64.decode(base64Secret)));
-
-        ReflectionTestUtils.setField(tokenProvider, "tokenValidityInMilliseconds", 60000);
-        jwtFilter = new JWTFilter(tokenProvider);
-        SecurityContextHolder.getContext().setAuthentication(null);
-    }
-
-    @Test
-    void testJWTFilter() throws Exception {
-        UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(
-            "test-user",
-            "test-password",
-            Collections.singletonList(new SimpleGrantedAuthority(AuthoritiesConstants.USER))
-        );
-        String jwt = tokenProvider.createToken(authentication, false);
-        MockHttpServletRequest request = new MockHttpServletRequest();
-        request.addHeader(JWTFilter.AUTHORIZATION_HEADER, "Bearer " + jwt);
-        request.setRequestURI("/api/test");
-        MockHttpServletResponse response = new MockHttpServletResponse();
-        MockFilterChain filterChain = new MockFilterChain();
-        jwtFilter.doFilter(request, response, filterChain);
-        assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value());
-        assertThat(SecurityContextHolder.getContext().getAuthentication().getName()).isEqualTo("test-user");
-        assertThat(SecurityContextHolder.getContext().getAuthentication().getCredentials()).hasToString(jwt);
-    }
-
-    @Test
-    void testJWTFilterInvalidToken() throws Exception {
-        String jwt = "wrong_jwt";
-        MockHttpServletRequest request = new MockHttpServletRequest();
-        request.addHeader(JWTFilter.AUTHORIZATION_HEADER, "Bearer " + jwt);
-        request.setRequestURI("/api/test");
-        MockHttpServletResponse response = new MockHttpServletResponse();
-        MockFilterChain filterChain = new MockFilterChain();
-        jwtFilter.doFilter(request, response, filterChain);
-        assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value());
-        assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull();
-    }
-
-    @Test
-    void testJWTFilterMissingAuthorization() throws Exception {
-        MockHttpServletRequest request = new MockHttpServletRequest();
-        request.setRequestURI("/api/test");
-        MockHttpServletResponse response = new MockHttpServletResponse();
-        MockFilterChain filterChain = new MockFilterChain();
-        jwtFilter.doFilter(request, response, filterChain);
-        assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value());
-        assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull();
-    }
-
-    @Test
-    void testJWTFilterMissingToken() throws Exception {
-        MockHttpServletRequest request = new MockHttpServletRequest();
-        request.addHeader(JWTFilter.AUTHORIZATION_HEADER, "Bearer ");
-        request.setRequestURI("/api/test");
-        MockHttpServletResponse response = new MockHttpServletResponse();
-        MockFilterChain filterChain = new MockFilterChain();
-        jwtFilter.doFilter(request, response, filterChain);
-        assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value());
-        assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull();
-    }
-
-    @Test
-    void testJWTFilterWrongScheme() throws Exception {
-        UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(
-            "test-user",
-            "test-password",
-            Collections.singletonList(new SimpleGrantedAuthority(AuthoritiesConstants.USER))
-        );
-        String jwt = tokenProvider.createToken(authentication, false);
-        MockHttpServletRequest request = new MockHttpServletRequest();
-        request.addHeader(JWTFilter.AUTHORIZATION_HEADER, "Basic " + jwt);
-        request.setRequestURI("/api/test");
-        MockHttpServletResponse response = new MockHttpServletResponse();
-        MockFilterChain filterChain = new MockFilterChain();
-        jwtFilter.doFilter(request, response, filterChain);
-        assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value());
-        assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull();
-    }
-}
diff --git a/pamapi/src/test/java/com/pollex/pam/security/jwt/TokenProviderTest.java b/pamapi/src/test/java/com/pollex/pam/security/jwt/TokenProviderTest.java
deleted file mode 100644
index 7dc9027..0000000
--- a/pamapi/src/test/java/com/pollex/pam/security/jwt/TokenProviderTest.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package com.pollex.pam.security.jwt;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import com.pollex.pam.security.AuthoritiesConstants;
-import io.jsonwebtoken.Jwts;
-import io.jsonwebtoken.SignatureAlgorithm;
-import io.jsonwebtoken.io.Decoders;
-import io.jsonwebtoken.security.Keys;
-import java.nio.charset.StandardCharsets;
-import java.security.Key;
-import java.util.*;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.authority.SimpleGrantedAuthority;
-import org.springframework.test.util.ReflectionTestUtils;
-import tech.jhipster.config.JHipsterProperties;
-
-class TokenProviderTest {
-
-    private static final long ONE_MINUTE = 60000;
-
-    private Key key;
-    private TokenProvider tokenProvider;
-
-    @BeforeEach
-    public void setup() {
-        JHipsterProperties jHipsterProperties = new JHipsterProperties();
-        String base64Secret = "fd54a45s65fds737b9aafcb3412e07ed99b267f33413274720ddbb7f6c5e64e9f14075f2d7ed041592f0b7657baf8";
-        jHipsterProperties.getSecurity().getAuthentication().getJwt().setBase64Secret(base64Secret);
-        tokenProvider = new TokenProvider(jHipsterProperties);
-        key = Keys.hmacShaKeyFor(Decoders.BASE64.decode(base64Secret));
-
-        ReflectionTestUtils.setField(tokenProvider, "key", key);
-        ReflectionTestUtils.setField(tokenProvider, "tokenValidityInMilliseconds", ONE_MINUTE);
-    }
-
-    @Test
-    void testReturnFalseWhenJWThasInvalidSignature() {
-        boolean isTokenValid = tokenProvider.validateToken(createTokenWithDifferentSignature());
-
-        assertThat(isTokenValid).isFalse();
-    }
-
-    @Test
-    void testReturnFalseWhenJWTisMalformed() {
-        Authentication authentication = createAuthentication();
-        String token = tokenProvider.createToken(authentication, false);
-        String invalidToken = token.substring(1);
-        boolean isTokenValid = tokenProvider.validateToken(invalidToken);
-
-        assertThat(isTokenValid).isFalse();
-    }
-
-    @Test
-    void testReturnFalseWhenJWTisExpired() {
-        ReflectionTestUtils.setField(tokenProvider, "tokenValidityInMilliseconds", -ONE_MINUTE);
-
-        Authentication authentication = createAuthentication();
-        String token = tokenProvider.createToken(authentication, false);
-
-        boolean isTokenValid = tokenProvider.validateToken(token);
-
-        assertThat(isTokenValid).isFalse();
-    }
-
-    @Test
-    void testReturnFalseWhenJWTisUnsupported() {
-        String unsupportedToken = createUnsupportedToken();
-
-        boolean isTokenValid = tokenProvider.validateToken(unsupportedToken);
-
-        assertThat(isTokenValid).isFalse();
-    }
-
-    @Test
-    void testReturnFalseWhenJWTisInvalid() {
-        boolean isTokenValid = tokenProvider.validateToken("");
-
-        assertThat(isTokenValid).isFalse();
-    }
-
-    @Test
-    void testKeyIsSetFromSecretWhenSecretIsNotEmpty() {
-        final String secret = "NwskoUmKHZtzGRKJKVjsJF7BtQMMxNWi";
-        JHipsterProperties jHipsterProperties = new JHipsterProperties();
-        jHipsterProperties.getSecurity().getAuthentication().getJwt().setSecret(secret);
-
-        TokenProvider tokenProvider = new TokenProvider(jHipsterProperties);
-
-        Key key = (Key) ReflectionTestUtils.getField(tokenProvider, "key");
-        assertThat(key).isNotNull().isEqualTo(Keys.hmacShaKeyFor(secret.getBytes(StandardCharsets.UTF_8)));
-    }
-
-    @Test
-    void testKeyIsSetFromBase64SecretWhenSecretIsEmpty() {
-        final String base64Secret = "fd54a45s65fds737b9aafcb3412e07ed99b267f33413274720ddbb7f6c5e64e9f14075f2d7ed041592f0b7657baf8";
-        JHipsterProperties jHipsterProperties = new JHipsterProperties();
-        jHipsterProperties.getSecurity().getAuthentication().getJwt().setBase64Secret(base64Secret);
-
-        TokenProvider tokenProvider = new TokenProvider(jHipsterProperties);
-
-        Key key = (Key) ReflectionTestUtils.getField(tokenProvider, "key");
-        assertThat(key).isNotNull().isEqualTo(Keys.hmacShaKeyFor(Decoders.BASE64.decode(base64Secret)));
-    }
-
-    private Authentication createAuthentication() {
-        Collection<GrantedAuthority> authorities = new ArrayList<>();
-        authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.ANONYMOUS));
-        return new UsernamePasswordAuthenticationToken("anonymous", "anonymous", authorities);
-    }
-
-    private String createUnsupportedToken() {
-        return Jwts.builder().setPayload("payload").signWith(key, SignatureAlgorithm.HS512).compact();
-    }
-
-    private String createTokenWithDifferentSignature() {
-        Key otherKey = Keys.hmacShaKeyFor(
-            Decoders.BASE64.decode("Xfd54a45s65fds737b9aafcb3412e07ed99b267f33413274720ddbb7f6c5e64e9f14075f2d7ed041592f0b7657baf8")
-        );
-
-        return Jwts
-            .builder()
-            .setSubject("anonymous")
-            .signWith(otherKey, SignatureAlgorithm.HS512)
-            .setExpiration(new Date(new Date().getTime() + ONE_MINUTE))
-            .compact();
-    }
-}
diff --git a/pamapi/src/test/java/com/pollex/pam/service/MailServiceIT.java b/pamapi/src/test/java/com/pollex/pam/service/MailServiceIT.java
deleted file mode 100644
index 1b0b967..0000000
--- a/pamapi/src/test/java/com/pollex/pam/service/MailServiceIT.java
+++ /dev/null
@@ -1,245 +0,0 @@
-package com.pollex.pam.service;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.*;
-
-import com.pollex.pam.IntegrationTest;
-import com.pollex.pam.config.Constants;
-import com.pollex.pam.domain.User;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStreamReader;
-import java.net.URI;
-import java.net.URL;
-import java.nio.charset.Charset;
-import java.util.Properties;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import javax.mail.Multipart;
-import javax.mail.internet.MimeBodyPart;
-import javax.mail.internet.MimeMessage;
-import javax.mail.internet.MimeMultipart;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.MockitoAnnotations;
-import org.mockito.Spy;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.MessageSource;
-import org.springframework.mail.MailSendException;
-import org.springframework.mail.javamail.JavaMailSenderImpl;
-import org.thymeleaf.spring5.SpringTemplateEngine;
-import tech.jhipster.config.JHipsterProperties;
-
-/**
- * Integration tests for {@link MailService}.
- */
-@IntegrationTest
-class MailServiceIT {
-
-    private static final String[] languages = {
-        "zh-tw",
-        "en",
-        // jhipster-needle-i18n-language-constant - JHipster will add/remove languages in this array
-    };
-    private static final Pattern PATTERN_LOCALE_3 = Pattern.compile("([a-z]{2})-([a-zA-Z]{4})-([a-z]{2})");
-    private static final Pattern PATTERN_LOCALE_2 = Pattern.compile("([a-z]{2})-([a-z]{2})");
-
-    @Autowired
-    private JHipsterProperties jHipsterProperties;
-
-    @Autowired
-    private MessageSource messageSource;
-
-    @Autowired
-    private SpringTemplateEngine templateEngine;
-
-    @Spy
-    private JavaMailSenderImpl javaMailSender;
-
-    @Captor
-    private ArgumentCaptor<MimeMessage> messageCaptor;
-
-    private MailService mailService;
-
-    @BeforeEach
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-        doNothing().when(javaMailSender).send(any(MimeMessage.class));
-        mailService = new MailService(jHipsterProperties, javaMailSender, messageSource, templateEngine);
-    }
-
-    @Test
-    void testSendEmail() throws Exception {
-        mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", false, false);
-        verify(javaMailSender).send(messageCaptor.capture());
-        MimeMessage message = messageCaptor.getValue();
-        assertThat(message.getSubject()).isEqualTo("testSubject");
-        assertThat(message.getAllRecipients()[0]).hasToString("john.doe@example.com");
-        assertThat(message.getFrom()[0]).hasToString(jHipsterProperties.getMail().getFrom());
-        assertThat(message.getContent()).isInstanceOf(String.class);
-        assertThat(message.getContent()).hasToString("testContent");
-        assertThat(message.getDataHandler().getContentType()).isEqualTo("text/plain; charset=UTF-8");
-    }
-
-    @Test
-    void testSendHtmlEmail() throws Exception {
-        mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", false, true);
-        verify(javaMailSender).send(messageCaptor.capture());
-        MimeMessage message = messageCaptor.getValue();
-        assertThat(message.getSubject()).isEqualTo("testSubject");
-        assertThat(message.getAllRecipients()[0]).hasToString("john.doe@example.com");
-        assertThat(message.getFrom()[0]).hasToString(jHipsterProperties.getMail().getFrom());
-        assertThat(message.getContent()).isInstanceOf(String.class);
-        assertThat(message.getContent()).hasToString("testContent");
-        assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8");
-    }
-
-    @Test
-    void testSendMultipartEmail() throws Exception {
-        mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", true, false);
-        verify(javaMailSender).send(messageCaptor.capture());
-        MimeMessage message = messageCaptor.getValue();
-        MimeMultipart mp = (MimeMultipart) message.getContent();
-        MimeBodyPart part = (MimeBodyPart) ((MimeMultipart) mp.getBodyPart(0).getContent()).getBodyPart(0);
-        ByteArrayOutputStream aos = new ByteArrayOutputStream();
-        part.writeTo(aos);
-        assertThat(message.getSubject()).isEqualTo("testSubject");
-        assertThat(message.getAllRecipients()[0]).hasToString("john.doe@example.com");
-        assertThat(message.getFrom()[0]).hasToString(jHipsterProperties.getMail().getFrom());
-        assertThat(message.getContent()).isInstanceOf(Multipart.class);
-        assertThat(aos).hasToString("\r\ntestContent");
-        assertThat(part.getDataHandler().getContentType()).isEqualTo("text/plain; charset=UTF-8");
-    }
-
-    @Test
-    void testSendMultipartHtmlEmail() throws Exception {
-        mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", true, true);
-        verify(javaMailSender).send(messageCaptor.capture());
-        MimeMessage message = messageCaptor.getValue();
-        MimeMultipart mp = (MimeMultipart) message.getContent();
-        MimeBodyPart part = (MimeBodyPart) ((MimeMultipart) mp.getBodyPart(0).getContent()).getBodyPart(0);
-        ByteArrayOutputStream aos = new ByteArrayOutputStream();
-        part.writeTo(aos);
-        assertThat(message.getSubject()).isEqualTo("testSubject");
-        assertThat(message.getAllRecipients()[0]).hasToString("john.doe@example.com");
-        assertThat(message.getFrom()[0]).hasToString(jHipsterProperties.getMail().getFrom());
-        assertThat(message.getContent()).isInstanceOf(Multipart.class);
-        assertThat(aos).hasToString("\r\ntestContent");
-        assertThat(part.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8");
-    }
-
-    @Test
-    void testSendEmailFromTemplate() throws Exception {
-        User user = new User();
-        user.setLogin("john");
-        user.setEmail("john.doe@example.com");
-        user.setLangKey("en");
-        mailService.sendEmailFromTemplate(user, "mail/testEmail", "email.test.title");
-        verify(javaMailSender).send(messageCaptor.capture());
-        MimeMessage message = messageCaptor.getValue();
-        assertThat(message.getSubject()).isEqualTo("test title");
-        assertThat(message.getAllRecipients()[0]).hasToString(user.getEmail());
-        assertThat(message.getFrom()[0]).hasToString(jHipsterProperties.getMail().getFrom());
-        assertThat(message.getContent().toString()).isEqualToNormalizingNewlines("<html>test title, http://127.0.0.1:8080, john</html>\n");
-        assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8");
-    }
-
-    @Test
-    void testSendActivationEmail() throws Exception {
-        User user = new User();
-        user.setLangKey(Constants.DEFAULT_LANGUAGE);
-        user.setLogin("john");
-        user.setEmail("john.doe@example.com");
-        mailService.sendActivationEmail(user);
-        verify(javaMailSender).send(messageCaptor.capture());
-        MimeMessage message = messageCaptor.getValue();
-        assertThat(message.getAllRecipients()[0]).hasToString(user.getEmail());
-        assertThat(message.getFrom()[0]).hasToString(jHipsterProperties.getMail().getFrom());
-        assertThat(message.getContent().toString()).isNotEmpty();
-        assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8");
-    }
-
-    @Test
-    void testCreationEmail() throws Exception {
-        User user = new User();
-        user.setLangKey(Constants.DEFAULT_LANGUAGE);
-        user.setLogin("john");
-        user.setEmail("john.doe@example.com");
-        mailService.sendCreationEmail(user);
-        verify(javaMailSender).send(messageCaptor.capture());
-        MimeMessage message = messageCaptor.getValue();
-        assertThat(message.getAllRecipients()[0]).hasToString(user.getEmail());
-        assertThat(message.getFrom()[0]).hasToString(jHipsterProperties.getMail().getFrom());
-        assertThat(message.getContent().toString()).isNotEmpty();
-        assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8");
-    }
-
-    @Test
-    void testSendPasswordResetMail() throws Exception {
-        User user = new User();
-        user.setLangKey(Constants.DEFAULT_LANGUAGE);
-        user.setLogin("john");
-        user.setEmail("john.doe@example.com");
-        mailService.sendPasswordResetMail(user);
-        verify(javaMailSender).send(messageCaptor.capture());
-        MimeMessage message = messageCaptor.getValue();
-        assertThat(message.getAllRecipients()[0]).hasToString(user.getEmail());
-        assertThat(message.getFrom()[0]).hasToString(jHipsterProperties.getMail().getFrom());
-        assertThat(message.getContent().toString()).isNotEmpty();
-        assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8");
-    }
-
-    @Test
-    void testSendEmailWithException() {
-        doThrow(MailSendException.class).when(javaMailSender).send(any(MimeMessage.class));
-        try {
-            mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", false, false);
-        } catch (Exception e) {
-            fail("Exception shouldn't have been thrown");
-        }
-    }
-
-    @Test
-    void testSendLocalizedEmailForAllSupportedLanguages() throws Exception {
-        User user = new User();
-        user.setLogin("john");
-        user.setEmail("john.doe@example.com");
-        for (String langKey : languages) {
-            user.setLangKey(langKey);
-            mailService.sendEmailFromTemplate(user, "mail/testEmail", "email.test.title");
-            verify(javaMailSender, atLeastOnce()).send(messageCaptor.capture());
-            MimeMessage message = messageCaptor.getValue();
-
-            String propertyFilePath = "i18n/messages_" + getJavaLocale(langKey) + ".properties";
-            URL resource = this.getClass().getClassLoader().getResource(propertyFilePath);
-            File file = new File(new URI(resource.getFile()).getPath());
-            Properties properties = new Properties();
-            properties.load(new InputStreamReader(new FileInputStream(file), Charset.forName("UTF-8")));
-
-            String emailTitle = (String) properties.get("email.test.title");
-            assertThat(message.getSubject()).isEqualTo(emailTitle);
-            assertThat(message.getContent().toString())
-                .isEqualToNormalizingNewlines("<html>" + emailTitle + ", http://127.0.0.1:8080, john</html>\n");
-        }
-    }
-
-    /**
-     * Convert a lang key to the Java locale.
-     */
-    private String getJavaLocale(String langKey) {
-        String javaLangKey = langKey;
-        Matcher matcher2 = PATTERN_LOCALE_2.matcher(langKey);
-        if (matcher2.matches()) {
-            javaLangKey = matcher2.group(1) + "_" + matcher2.group(2).toUpperCase();
-        }
-        Matcher matcher3 = PATTERN_LOCALE_3.matcher(langKey);
-        if (matcher3.matches()) {
-            javaLangKey = matcher3.group(1) + "_" + matcher3.group(2) + "_" + matcher3.group(3).toUpperCase();
-        }
-        return javaLangKey;
-    }
-}
diff --git a/pamapi/src/test/java/com/pollex/pam/service/UserServiceIT.java b/pamapi/src/test/java/com/pollex/pam/service/UserServiceIT.java
deleted file mode 100644
index 9aa8c13..0000000
--- a/pamapi/src/test/java/com/pollex/pam/service/UserServiceIT.java
+++ /dev/null
@@ -1,185 +0,0 @@
-package com.pollex.pam.service;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.when;
-
-import com.pollex.pam.IntegrationTest;
-import com.pollex.pam.config.Constants;
-import com.pollex.pam.domain.User;
-import com.pollex.pam.repository.UserRepository;
-import com.pollex.pam.service.dto.AdminUserDTO;
-import java.time.Instant;
-import java.time.LocalDateTime;
-import java.time.temporal.ChronoUnit;
-import java.util.List;
-import java.util.Optional;
-import org.apache.commons.lang3.RandomStringUtils;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.mock.mockito.MockBean;
-import org.springframework.data.auditing.AuditingHandler;
-import org.springframework.data.auditing.DateTimeProvider;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.transaction.annotation.Transactional;
-import tech.jhipster.security.RandomUtil;
-
-/**
- * Integration tests for {@link UserService}.
- */
-@IntegrationTest
-@Transactional
-class UserServiceIT {
-
-    private static final String DEFAULT_LOGIN = "johndoe";
-
-    private static final String DEFAULT_EMAIL = "johndoe@localhost";
-
-    private static final String DEFAULT_FIRSTNAME = "john";
-
-    private static final String DEFAULT_LASTNAME = "doe";
-
-    private static final String DEFAULT_IMAGEURL = "http://placehold.it/50x50";
-
-    private static final String DEFAULT_LANGKEY = "dummy";
-
-    @Autowired
-    private UserRepository userRepository;
-
-    @Autowired
-    private UserService userService;
-
-    @Autowired
-    private AuditingHandler auditingHandler;
-
-    @MockBean
-    private DateTimeProvider dateTimeProvider;
-
-    private User user;
-
-    @BeforeEach
-    public void init() {
-        user = new User();
-        user.setLogin(DEFAULT_LOGIN);
-        user.setPassword(RandomStringUtils.random(60));
-        user.setActivated(true);
-        user.setEmail(DEFAULT_EMAIL);
-        user.setFirstName(DEFAULT_FIRSTNAME);
-        user.setLastName(DEFAULT_LASTNAME);
-        user.setImageUrl(DEFAULT_IMAGEURL);
-        user.setLangKey(DEFAULT_LANGKEY);
-
-        when(dateTimeProvider.getNow()).thenReturn(Optional.of(LocalDateTime.now()));
-        auditingHandler.setDateTimeProvider(dateTimeProvider);
-    }
-
-    @Test
-    @Transactional
-    void assertThatUserMustExistToResetPassword() {
-        userRepository.saveAndFlush(user);
-        Optional<User> maybeUser = userService.requestPasswordReset("invalid.login@localhost");
-        assertThat(maybeUser).isNotPresent();
-
-        maybeUser = userService.requestPasswordReset(user.getEmail());
-        assertThat(maybeUser).isPresent();
-        assertThat(maybeUser.orElse(null).getEmail()).isEqualTo(user.getEmail());
-        assertThat(maybeUser.orElse(null).getResetDate()).isNotNull();
-        assertThat(maybeUser.orElse(null).getResetKey()).isNotNull();
-    }
-
-    @Test
-    @Transactional
-    void assertThatOnlyActivatedUserCanRequestPasswordReset() {
-        user.setActivated(false);
-        userRepository.saveAndFlush(user);
-
-        Optional<User> maybeUser = userService.requestPasswordReset(user.getLogin());
-        assertThat(maybeUser).isNotPresent();
-        userRepository.delete(user);
-    }
-
-    @Test
-    @Transactional
-    void assertThatResetKeyMustNotBeOlderThan24Hours() {
-        Instant daysAgo = Instant.now().minus(25, ChronoUnit.HOURS);
-        String resetKey = RandomUtil.generateResetKey();
-        user.setActivated(true);
-        user.setResetDate(daysAgo);
-        user.setResetKey(resetKey);
-        userRepository.saveAndFlush(user);
-
-        Optional<User> maybeUser = userService.completePasswordReset("johndoe2", user.getResetKey());
-        assertThat(maybeUser).isNotPresent();
-        userRepository.delete(user);
-    }
-
-    @Test
-    @Transactional
-    void assertThatResetKeyMustBeValid() {
-        Instant daysAgo = Instant.now().minus(25, ChronoUnit.HOURS);
-        user.setActivated(true);
-        user.setResetDate(daysAgo);
-        user.setResetKey("1234");
-        userRepository.saveAndFlush(user);
-
-        Optional<User> maybeUser = userService.completePasswordReset("johndoe2", user.getResetKey());
-        assertThat(maybeUser).isNotPresent();
-        userRepository.delete(user);
-    }
-
-    @Test
-    @Transactional
-    void assertThatUserCanResetPassword() {
-        String oldPassword = user.getPassword();
-        Instant daysAgo = Instant.now().minus(2, ChronoUnit.HOURS);
-        String resetKey = RandomUtil.generateResetKey();
-        user.setActivated(true);
-        user.setResetDate(daysAgo);
-        user.setResetKey(resetKey);
-        userRepository.saveAndFlush(user);
-
-        Optional<User> maybeUser = userService.completePasswordReset("johndoe2", user.getResetKey());
-        assertThat(maybeUser).isPresent();
-        assertThat(maybeUser.orElse(null).getResetDate()).isNull();
-        assertThat(maybeUser.orElse(null).getResetKey()).isNull();
-        assertThat(maybeUser.orElse(null).getPassword()).isNotEqualTo(oldPassword);
-
-        userRepository.delete(user);
-    }
-
-    @Test
-    @Transactional
-    void assertThatNotActivatedUsersWithNotNullActivationKeyCreatedBefore3DaysAreDeleted() {
-        Instant now = Instant.now();
-        when(dateTimeProvider.getNow()).thenReturn(Optional.of(now.minus(4, ChronoUnit.DAYS)));
-        user.setActivated(false);
-        user.setActivationKey(RandomStringUtils.random(20));
-        User dbUser = userRepository.saveAndFlush(user);
-        dbUser.setCreatedDate(now.minus(4, ChronoUnit.DAYS));
-        userRepository.saveAndFlush(user);
-        Instant threeDaysAgo = now.minus(3, ChronoUnit.DAYS);
-        List<User> users = userRepository.findAllByActivatedIsFalseAndActivationKeyIsNotNullAndCreatedDateBefore(threeDaysAgo);
-        assertThat(users).isNotEmpty();
-        userService.removeNotActivatedUsers();
-        users = userRepository.findAllByActivatedIsFalseAndActivationKeyIsNotNullAndCreatedDateBefore(threeDaysAgo);
-        assertThat(users).isEmpty();
-    }
-
-    @Test
-    @Transactional
-    void assertThatNotActivatedUsersWithNullActivationKeyCreatedBefore3DaysAreNotDeleted() {
-        Instant now = Instant.now();
-        when(dateTimeProvider.getNow()).thenReturn(Optional.of(now.minus(4, ChronoUnit.DAYS)));
-        user.setActivated(false);
-        User dbUser = userRepository.saveAndFlush(user);
-        dbUser.setCreatedDate(now.minus(4, ChronoUnit.DAYS));
-        userRepository.saveAndFlush(user);
-        Instant threeDaysAgo = now.minus(3, ChronoUnit.DAYS);
-        List<User> users = userRepository.findAllByActivatedIsFalseAndActivationKeyIsNotNullAndCreatedDateBefore(threeDaysAgo);
-        assertThat(users).isEmpty();
-        userService.removeNotActivatedUsers();
-        Optional<User> maybeDbUser = userRepository.findById(dbUser.getId());
-        assertThat(maybeDbUser).contains(dbUser);
-    }
-}
diff --git a/pamapi/src/test/java/com/pollex/pam/service/mapper/UserMapperTest.java b/pamapi/src/test/java/com/pollex/pam/service/mapper/UserMapperTest.java
deleted file mode 100644
index e4514c7..0000000
--- a/pamapi/src/test/java/com/pollex/pam/service/mapper/UserMapperTest.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package com.pollex.pam.service.mapper;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import com.pollex.pam.domain.User;
-import com.pollex.pam.service.dto.AdminUserDTO;
-import com.pollex.pam.service.dto.UserDTO;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import org.apache.commons.lang3.RandomStringUtils;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-/**
- * Unit tests for {@link UserMapper}.
- */
-class UserMapperTest {
-
-    private static final String DEFAULT_LOGIN = "johndoe";
-    private static final Long DEFAULT_ID = 1L;
-
-    private UserMapper userMapper;
-    private User user;
-    private AdminUserDTO userDto;
-
-    @BeforeEach
-    public void init() {
-        userMapper = new UserMapper();
-        user = new User();
-        user.setLogin(DEFAULT_LOGIN);
-        user.setPassword(RandomStringUtils.random(60));
-        user.setActivated(true);
-        user.setEmail("johndoe@localhost");
-        user.setFirstName("john");
-        user.setLastName("doe");
-        user.setImageUrl("image_url");
-        user.setLangKey("en");
-
-        userDto = new AdminUserDTO(user);
-    }
-
-    @Test
-    void usersToUserDTOsShouldMapOnlyNonNullUsers() {
-        List<User> users = new ArrayList<>();
-        users.add(user);
-        users.add(null);
-
-        List<UserDTO> userDTOS = userMapper.usersToUserDTOs(users);
-
-        assertThat(userDTOS).isNotEmpty().size().isEqualTo(1);
-    }
-
-    @Test
-    void userDTOsToUsersShouldMapOnlyNonNullUsers() {
-        List<AdminUserDTO> usersDto = new ArrayList<>();
-        usersDto.add(userDto);
-        usersDto.add(null);
-
-        List<User> users = userMapper.userDTOsToUsers(usersDto);
-
-        assertThat(users).isNotEmpty().size().isEqualTo(1);
-    }
-
-    @Test
-    void userDTOsToUsersWithAuthoritiesStringShouldMapToUsersWithAuthoritiesDomain() {
-        Set<String> authoritiesAsString = new HashSet<>();
-        authoritiesAsString.add("ADMIN");
-        userDto.setAuthorities(authoritiesAsString);
-
-        List<AdminUserDTO> usersDto = new ArrayList<>();
-        usersDto.add(userDto);
-
-        List<User> users = userMapper.userDTOsToUsers(usersDto);
-
-        assertThat(users).isNotEmpty().size().isEqualTo(1);
-        assertThat(users.get(0).getAuthorities()).isNotNull();
-        assertThat(users.get(0).getAuthorities()).isNotEmpty();
-        assertThat(users.get(0).getAuthorities().iterator().next().getName()).isEqualTo("ADMIN");
-    }
-
-    @Test
-    void userDTOsToUsersMapWithNullAuthoritiesStringShouldReturnUserWithEmptyAuthorities() {
-        userDto.setAuthorities(null);
-
-        List<AdminUserDTO> usersDto = new ArrayList<>();
-        usersDto.add(userDto);
-
-        List<User> users = userMapper.userDTOsToUsers(usersDto);
-
-        assertThat(users).isNotEmpty().size().isEqualTo(1);
-        assertThat(users.get(0).getAuthorities()).isNotNull();
-        assertThat(users.get(0).getAuthorities()).isEmpty();
-    }
-
-    @Test
-    void userDTOToUserMapWithAuthoritiesStringShouldReturnUserWithAuthorities() {
-        Set<String> authoritiesAsString = new HashSet<>();
-        authoritiesAsString.add("ADMIN");
-        userDto.setAuthorities(authoritiesAsString);
-
-        User user = userMapper.userDTOToUser(userDto);
-
-        assertThat(user).isNotNull();
-        assertThat(user.getAuthorities()).isNotNull();
-        assertThat(user.getAuthorities()).isNotEmpty();
-        assertThat(user.getAuthorities().iterator().next().getName()).isEqualTo("ADMIN");
-    }
-
-    @Test
-    void userDTOToUserMapWithNullAuthoritiesStringShouldReturnUserWithEmptyAuthorities() {
-        userDto.setAuthorities(null);
-
-        User user = userMapper.userDTOToUser(userDto);
-
-        assertThat(user).isNotNull();
-        assertThat(user.getAuthorities()).isNotNull();
-        assertThat(user.getAuthorities()).isEmpty();
-    }
-
-    @Test
-    void userDTOToUserMapWithNullUserShouldReturnNull() {
-        assertThat(userMapper.userDTOToUser(null)).isNull();
-    }
-
-    @Test
-    void testUserFromId() {
-        assertThat(userMapper.userFromId(DEFAULT_ID).getId()).isEqualTo(DEFAULT_ID);
-        assertThat(userMapper.userFromId(null)).isNull();
-    }
-}
diff --git a/pamapi/src/test/java/com/pollex/pam/web/rest/AccountResourceIT.java b/pamapi/src/test/java/com/pollex/pam/web/rest/AccountResourceIT.java
index 9ff6565..eace069 100644
--- a/pamapi/src/test/java/com/pollex/pam/web/rest/AccountResourceIT.java
+++ b/pamapi/src/test/java/com/pollex/pam/web/rest/AccountResourceIT.java
@@ -6,17 +6,16 @@
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
 
 import com.pollex.pam.IntegrationTest;
-import com.pollex.pam.config.Constants;
-import com.pollex.pam.domain.User;
-import com.pollex.pam.repository.AuthorityRepository;
-import com.pollex.pam.repository.UserRepository;
-import com.pollex.pam.security.AuthoritiesConstants;
-import com.pollex.pam.service.UserService;
-import com.pollex.pam.service.dto.AdminUserDTO;
-import com.pollex.pam.service.dto.PasswordChangeDTO;
-import com.pollex.pam.service.dto.UserDTO;
-import com.pollex.pam.web.rest.vm.KeyAndPasswordVM;
-import com.pollex.pam.web.rest.vm.ManagedUserVM;
+import com.pollex.pam.business.config.Constants;
+import com.pollex.pam.business.domain.User;
+import com.pollex.pam.business.repository.AuthorityRepository;
+import com.pollex.pam.business.repository.UserRepository;
+import com.pollex.pam.business.security.AuthoritiesConstants;
+import com.pollex.pam.business.service.UserService;
+import com.pollex.pam.business.service.dto.AdminUserDTO;
+import com.pollex.pam.business.service.dto.PasswordChangeDTO;
+import com.pollex.pam.business.web.vm.KeyAndPasswordVM;
+import com.pollex.pam.business.web.vm.ManagedUserVM;
 import java.time.Instant;
 import java.util.*;
 import org.apache.commons.lang3.RandomStringUtils;
diff --git a/pamapi/src/test/java/com/pollex/pam/web/rest/PublicUserResourceIT.java b/pamapi/src/test/java/com/pollex/pam/web/rest/PublicUserResourceIT.java
index 72ece3d..092b58b 100644
--- a/pamapi/src/test/java/com/pollex/pam/web/rest/PublicUserResourceIT.java
+++ b/pamapi/src/test/java/com/pollex/pam/web/rest/PublicUserResourceIT.java
@@ -6,9 +6,9 @@
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
 
 import com.pollex.pam.IntegrationTest;
-import com.pollex.pam.domain.User;
-import com.pollex.pam.repository.UserRepository;
-import com.pollex.pam.security.AuthoritiesConstants;
+import com.pollex.pam.business.domain.User;
+import com.pollex.pam.business.repository.UserRepository;
+import com.pollex.pam.business.security.AuthoritiesConstants;
 import javax.persistence.EntityManager;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/pamapi/src/test/java/com/pollex/pam/web/rest/UserJWTControllerIT.java b/pamapi/src/test/java/com/pollex/pam/web/rest/UserJWTControllerIT.java
index 094e9ce..1eda30e 100644
--- a/pamapi/src/test/java/com/pollex/pam/web/rest/UserJWTControllerIT.java
+++ b/pamapi/src/test/java/com/pollex/pam/web/rest/UserJWTControllerIT.java
@@ -10,9 +10,9 @@
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 
 import com.pollex.pam.IntegrationTest;
-import com.pollex.pam.domain.User;
-import com.pollex.pam.repository.UserRepository;
-import com.pollex.pam.web.rest.vm.LoginVM;
+import com.pollex.pam.business.domain.User;
+import com.pollex.pam.business.repository.UserRepository;
+import com.pollex.pam.business.web.vm.LoginVM;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
diff --git a/pamapi/src/test/java/com/pollex/pam/web/rest/UserResourceIT.java b/pamapi/src/test/java/com/pollex/pam/web/rest/UserResourceIT.java
index 9efe6d2..b1357ef 100644
--- a/pamapi/src/test/java/com/pollex/pam/web/rest/UserResourceIT.java
+++ b/pamapi/src/test/java/com/pollex/pam/web/rest/UserResourceIT.java
@@ -7,13 +7,13 @@
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
 
 import com.pollex.pam.IntegrationTest;
-import com.pollex.pam.domain.Authority;
-import com.pollex.pam.domain.User;
-import com.pollex.pam.repository.UserRepository;
-import com.pollex.pam.security.AuthoritiesConstants;
-import com.pollex.pam.service.dto.AdminUserDTO;
-import com.pollex.pam.service.mapper.UserMapper;
-import com.pollex.pam.web.rest.vm.ManagedUserVM;
+import com.pollex.pam.business.domain.Authority;
+import com.pollex.pam.business.domain.User;
+import com.pollex.pam.business.repository.UserRepository;
+import com.pollex.pam.business.security.AuthoritiesConstants;
+import com.pollex.pam.business.service.dto.AdminUserDTO;
+import com.pollex.pam.business.service.mapper.UserMapper;
+import com.pollex.pam.business.web.vm.ManagedUserVM;
 import java.time.Instant;
 import java.util.*;
 import java.util.function.Consumer;
diff --git a/pamapi/src/test/java/com/pollex/pam/web/rest/errors/ExceptionTranslatorIT.java b/pamapi/src/test/java/com/pollex/pam/web/rest/errors/ExceptionTranslatorIT.java
deleted file mode 100644
index 057057c..0000000
--- a/pamapi/src/test/java/com/pollex/pam/web/rest/errors/ExceptionTranslatorIT.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package com.pollex.pam.web.rest.errors;
-
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-
-import com.pollex.pam.IntegrationTest;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.http.MediaType;
-import org.springframework.security.test.context.support.WithMockUser;
-import org.springframework.test.web.servlet.MockMvc;
-
-/**
- * Integration tests {@link ExceptionTranslator} controller advice.
- */
-@WithMockUser
-@AutoConfigureMockMvc
-@IntegrationTest
-class ExceptionTranslatorIT {
-
-    @Autowired
-    private MockMvc mockMvc;
-
-    @Test
-    void testConcurrencyFailure() throws Exception {
-        mockMvc
-            .perform(get("/api/exception-translator-test/concurrency-failure"))
-            .andExpect(status().isConflict())
-            .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON))
-            .andExpect(jsonPath("$.message").value(ErrorConstants.ERR_CONCURRENCY_FAILURE));
-    }
-
-    @Test
-    void testMethodArgumentNotValid() throws Exception {
-        mockMvc
-            .perform(post("/api/exception-translator-test/method-argument").content("{}").contentType(MediaType.APPLICATION_JSON))
-            .andExpect(status().isBadRequest())
-            .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON))
-            .andExpect(jsonPath("$.message").value(ErrorConstants.ERR_VALIDATION))
-            .andExpect(jsonPath("$.fieldErrors.[0].objectName").value("test"))
-            .andExpect(jsonPath("$.fieldErrors.[0].field").value("test"))
-            .andExpect(jsonPath("$.fieldErrors.[0].message").value("must not be null"));
-    }
-
-    @Test
-    void testMissingServletRequestPartException() throws Exception {
-        mockMvc
-            .perform(get("/api/exception-translator-test/missing-servlet-request-part"))
-            .andExpect(status().isBadRequest())
-            .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON))
-            .andExpect(jsonPath("$.message").value("error.http.400"));
-    }
-
-    @Test
-    void testMissingServletRequestParameterException() throws Exception {
-        mockMvc
-            .perform(get("/api/exception-translator-test/missing-servlet-request-parameter"))
-            .andExpect(status().isBadRequest())
-            .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON))
-            .andExpect(jsonPath("$.message").value("error.http.400"));
-    }
-
-    @Test
-    void testAccessDenied() throws Exception {
-        mockMvc
-            .perform(get("/api/exception-translator-test/access-denied"))
-            .andExpect(status().isForbidden())
-            .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON))
-            .andExpect(jsonPath("$.message").value("error.http.403"))
-            .andExpect(jsonPath("$.detail").value("test access denied!"));
-    }
-
-    @Test
-    void testUnauthorized() throws Exception {
-        mockMvc
-            .perform(get("/api/exception-translator-test/unauthorized"))
-            .andExpect(status().isUnauthorized())
-            .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON))
-            .andExpect(jsonPath("$.message").value("error.http.401"))
-            .andExpect(jsonPath("$.path").value("/api/exception-translator-test/unauthorized"))
-            .andExpect(jsonPath("$.detail").value("test authentication failed!"));
-    }
-
-    @Test
-    void testMethodNotSupported() throws Exception {
-        mockMvc
-            .perform(post("/api/exception-translator-test/access-denied"))
-            .andExpect(status().isMethodNotAllowed())
-            .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON))
-            .andExpect(jsonPath("$.message").value("error.http.405"))
-            .andExpect(jsonPath("$.detail").value("Request method 'POST' not supported"));
-    }
-
-    @Test
-    void testExceptionWithResponseStatus() throws Exception {
-        mockMvc
-            .perform(get("/api/exception-translator-test/response-status"))
-            .andExpect(status().isBadRequest())
-            .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON))
-            .andExpect(jsonPath("$.message").value("error.http.400"))
-            .andExpect(jsonPath("$.title").value("test response status"));
-    }
-
-    @Test
-    void testInternalServerError() throws Exception {
-        mockMvc
-            .perform(get("/api/exception-translator-test/internal-server-error"))
-            .andExpect(status().isInternalServerError())
-            .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON))
-            .andExpect(jsonPath("$.message").value("error.http.500"))
-            .andExpect(jsonPath("$.title").value("Internal Server Error"));
-    }
-}
diff --git a/pamapi/src/test/java/com/pollex/pam/web/rest/errors/ExceptionTranslatorTestController.java b/pamapi/src/test/java/com/pollex/pam/web/rest/errors/ExceptionTranslatorTestController.java
deleted file mode 100644
index 131a99d..0000000
--- a/pamapi/src/test/java/com/pollex/pam/web/rest/errors/ExceptionTranslatorTestController.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.pollex.pam.web.rest.errors;
-
-import javax.validation.Valid;
-import javax.validation.constraints.NotNull;
-import org.springframework.dao.ConcurrencyFailureException;
-import org.springframework.http.HttpStatus;
-import org.springframework.security.access.AccessDeniedException;
-import org.springframework.security.authentication.BadCredentialsException;
-import org.springframework.web.bind.annotation.*;
-
-@RestController
-@RequestMapping("/api/exception-translator-test")
-public class ExceptionTranslatorTestController {
-
-    @GetMapping("/concurrency-failure")
-    public void concurrencyFailure() {
-        throw new ConcurrencyFailureException("test concurrency failure");
-    }
-
-    @PostMapping("/method-argument")
-    public void methodArgument(@Valid @RequestBody TestDTO testDTO) {}
-
-    @GetMapping("/missing-servlet-request-part")
-    public void missingServletRequestPartException(@RequestPart String part) {}
-
-    @GetMapping("/missing-servlet-request-parameter")
-    public void missingServletRequestParameterException(@RequestParam String param) {}
-
-    @GetMapping("/access-denied")
-    public void accessdenied() {
-        throw new AccessDeniedException("test access denied!");
-    }
-
-    @GetMapping("/unauthorized")
-    public void unauthorized() {
-        throw new BadCredentialsException("test authentication failed!");
-    }
-
-    @GetMapping("/response-status")
-    public void exceptionWithResponseStatus() {
-        throw new TestResponseStatusException();
-    }
-
-    @GetMapping("/internal-server-error")
-    public void internalServerError() {
-        throw new RuntimeException();
-    }
-
-    public static class TestDTO {
-
-        @NotNull
-        private String test;
-
-        public String getTest() {
-            return test;
-        }
-
-        public void setTest(String test) {
-            this.test = test;
-        }
-    }
-
-    @ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "test response status")
-    @SuppressWarnings("serial")
-    public static class TestResponseStatusException extends RuntimeException {}
-}

--
Gitblit v1.8.0