diff --git a/src/main/java/com/lawtk/lawtkschedulerbe/controller/JobController.java b/src/main/java/com/lawtk/lawtkschedulerbe/controller/JobController.java
index 728ff8f8138ee6400ad3420572b79adf77b7d6b4..180afec07dcc84645d05612f27d1dedd8e7061c2 100644
--- a/src/main/java/com/lawtk/lawtkschedulerbe/controller/JobController.java
+++ b/src/main/java/com/lawtk/lawtkschedulerbe/controller/JobController.java
@@ -11,7 +11,7 @@ import java.util.List;
 
 @Slf4j
 @RestController
-@RequestMapping(value = "api")
+@RequestMapping(value = "api/job")
 public class JobController {
     private final JobInfoService schedulerService;
 
diff --git a/src/main/java/com/lawtk/lawtkschedulerbe/controller/ScheduleController.java b/src/main/java/com/lawtk/lawtkschedulerbe/controller/ScheduleController.java
index 49de36415f6476d3ce64d9138b26b8be3d997e55..feeaaa3600760d41e894af8a26415efca79a9c0c 100644
--- a/src/main/java/com/lawtk/lawtkschedulerbe/controller/ScheduleController.java
+++ b/src/main/java/com/lawtk/lawtkschedulerbe/controller/ScheduleController.java
@@ -1,6 +1,7 @@
 package com.lawtk.lawtkschedulerbe.controller;
 
 import com.lawtk.lawtkschedulerbe.entity.Schedule;
+import com.lawtk.lawtkschedulerbe.repository.ScheduleRepository;
 import com.lawtk.lawtkschedulerbe.service.ScheduleService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -13,10 +14,12 @@ import java.util.List;
 @RequestMapping(value = "api")
 public class ScheduleController {
     private final ScheduleService service;
+    private final ScheduleRepository scheduleRepository;
 
     @Autowired
-    public ScheduleController(ScheduleService service){
+    public ScheduleController(ScheduleService service, ScheduleRepository scheduleRepository){
         this.service = service;
+        this.scheduleRepository = scheduleRepository;
     }
 
     @PostMapping(value = "/scheduler")
@@ -35,12 +38,19 @@ public class ScheduleController {
     }
 
     @PutMapping(value = "/scheduler/{id}")
-    public Schedule updateSchedule(@PathVariable Integer id){
-        return service.updateSchedule(service.retrieveScheduleById(id));
+    public Schedule updateSchedule(@PathVariable Integer id,
+                                   @RequestBody Schedule inputSchedule){
+        Schedule schedule = scheduleRepository.findById(id).get();
+        schedule.setScheduleTime(inputSchedule.getScheduleTime());
+        schedule.setScheduleInterval(inputSchedule.getScheduleInterval());
+        schedule.setActivityName(inputSchedule.getActivityName());
+        schedule.setUserId(schedule.getUserId());
+        return service.updateSchedule(schedule);
     }
 
     @DeleteMapping(value = "/scheduler/{id}")
     public void deleteSchedule(@PathVariable Integer id){
+
         service.deleteSchedule(service.retrieveScheduleById(id));
     }
 }
diff --git a/src/main/java/com/lawtk/lawtkschedulerbe/entity/JobInfo.java b/src/main/java/com/lawtk/lawtkschedulerbe/entity/JobInfo.java
index c211bdce34fc0b991c4ff792fc9678d2b99dea79..889cc03d035f1c51823621585d924c75c1e65f2b 100644
--- a/src/main/java/com/lawtk/lawtkschedulerbe/entity/JobInfo.java
+++ b/src/main/java/com/lawtk/lawtkschedulerbe/entity/JobInfo.java
@@ -8,6 +8,8 @@ import lombok.NoArgsConstructor;
 import org.springframework.data.relational.core.mapping.Table;
 
 import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
 import javax.persistence.Id;
 
 @EqualsAndHashCode(callSuper = true)
@@ -18,6 +20,7 @@ import javax.persistence.Id;
 @Table("job_info")
 public class JobInfo extends AbstractEntity<JobInfo, Integer> {
     @Id
+//    @GeneratedValue(strategy= GenerationType.IDENTITY)
     private Integer id;
 
     private String jobName;
@@ -26,8 +29,7 @@ public class JobInfo extends AbstractEntity<JobInfo, Integer> {
     private String jobClass;
     private String cronExpression;
     private String description;
-    private String interfaceName;
-    private Long repeatTime;
     private Boolean cronJob;
     private Integer scheduleId;
+    private String baseJobName;
 }
diff --git a/src/main/java/com/lawtk/lawtkschedulerbe/entity/Schedule.java b/src/main/java/com/lawtk/lawtkschedulerbe/entity/Schedule.java
index 25ff549db0c076db7033c2c763ede40db45ea5f3..0654388de9e04f9728e975db4eb9e38f913eddda 100644
--- a/src/main/java/com/lawtk/lawtkschedulerbe/entity/Schedule.java
+++ b/src/main/java/com/lawtk/lawtkschedulerbe/entity/Schedule.java
@@ -8,6 +8,8 @@ import lombok.NoArgsConstructor;
 import org.springframework.data.relational.core.mapping.Table;
 
 import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
 import javax.persistence.Id;
 
 @EqualsAndHashCode(callSuper = true)
@@ -18,6 +20,7 @@ import javax.persistence.Id;
 @Table("schedule")
 public class Schedule extends AbstractEntity<Schedule, Integer> {
     @Id
+    @GeneratedValue(strategy= GenerationType.IDENTITY)
     private Integer id;
 
     private String activityName;
diff --git a/src/main/java/com/lawtk/lawtkschedulerbe/quartz/component/JobScheduleCreator.java b/src/main/java/com/lawtk/lawtkschedulerbe/quartz/component/JobScheduleCreator.java
index e99534df1312026836d9a4b6f5559fd2f32526a2..2d98bb78fc8e2b8c212d318cf950a870b9d26e26 100644
--- a/src/main/java/com/lawtk/lawtkschedulerbe/quartz/component/JobScheduleCreator.java
+++ b/src/main/java/com/lawtk/lawtkschedulerbe/quartz/component/JobScheduleCreator.java
@@ -39,10 +39,16 @@ public class JobScheduleCreator {
 
     public CronTrigger createCronTrigger(String triggerName, Date startTime, String cronExpression, int misFireInstruction) {
         CronTriggerFactoryBean factoryBean = new CronTriggerFactoryBean();
+        JobDataMap jobDataMap = new JobDataMap();
+        jobDataMap.put("name", triggerName);
+        jobDataMap.put("cron", cronExpression);
+
         factoryBean.setName(triggerName);
         factoryBean.setStartTime(startTime);
         factoryBean.setCronExpression(cronExpression);
         factoryBean.setMisfireInstruction(misFireInstruction);
+        factoryBean.setJobDataMap(jobDataMap);
+
         try {
             factoryBean.afterPropertiesSet();
         } catch (ParseException e) {
@@ -50,16 +56,5 @@ public class JobScheduleCreator {
         }
         return factoryBean.getObject();
     }
-
-    public SimpleTrigger createSimpleTrigger(String triggerName, Date startTime, Long repeatTime, int misFireInstruction) {
-        SimpleTriggerFactoryBean factoryBean = new SimpleTriggerFactoryBean();
-        factoryBean.setName(triggerName);
-        factoryBean.setStartTime(startTime);
-        factoryBean.setRepeatInterval(repeatTime);
-        factoryBean.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
-        factoryBean.setMisfireInstruction(misFireInstruction);
-        factoryBean.afterPropertiesSet();
-        return factoryBean.getObject();
-    }
 }
 
diff --git a/src/main/java/com/lawtk/lawtkschedulerbe/quartz/job/SampleCronJob.java b/src/main/java/com/lawtk/lawtkschedulerbe/quartz/job/SampleCronJob.java
index 3749a5f3f86cf8c568183f7896a04bbd3afe0184..cfca5bdefb01bf3aae7b8a3811de743350d23fd9 100644
--- a/src/main/java/com/lawtk/lawtkschedulerbe/quartz/job/SampleCronJob.java
+++ b/src/main/java/com/lawtk/lawtkschedulerbe/quartz/job/SampleCronJob.java
@@ -6,6 +6,7 @@ import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 import org.springframework.scheduling.quartz.QuartzJobBean;
 
+import java.util.Date;
 import java.util.stream.IntStream;
 
 @Slf4j
@@ -13,8 +14,11 @@ import java.util.stream.IntStream;
 public class SampleCronJob extends QuartzJobBean {
     @Override
     protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
+        Date currentTime = new Date();
+        log.info(String.valueOf(currentTime));
         log.info("SampleCronJob Start................");
-        String jobName = context.getJobDetail().getJobDataMap().getString("name");
+        String jobName = context.getTrigger().getJobDataMap().getString("name");
+        log.info("the cron exp is: " + context.getTrigger().getJobDataMap().getString("cron"));
         log.info("It's time for " + jobName);
         log.info("SampleCronJob End................");
     }
diff --git a/src/main/java/com/lawtk/lawtkschedulerbe/service/JobInfoServiceImpl.java b/src/main/java/com/lawtk/lawtkschedulerbe/service/JobInfoServiceImpl.java
index 7bb8aae5376c0b7a8b45d48137c505ee5ceb7a6c..d867b79e7a18fb731298b6fe720d648f72094e22 100644
--- a/src/main/java/com/lawtk/lawtkschedulerbe/service/JobInfoServiceImpl.java
+++ b/src/main/java/com/lawtk/lawtkschedulerbe/service/JobInfoServiceImpl.java
@@ -53,7 +53,6 @@ public class JobInfoServiceImpl implements JobInfoService {
         } else {
             jobInfo.setJobClass(SimpleJob.class.getName());
             jobInfo.setCronJob(false);
-            jobInfo.setRepeatTime((long) 1);
         }
         if (jobInfo.getId() != null) {
             log.info("Job Info: {}", jobInfo);
@@ -62,7 +61,6 @@ public class JobInfoServiceImpl implements JobInfoService {
             updateScheduleJob(jobInfo);
         }
         jobInfo.setDescription("i am job number " + jobInfo.getId());
-        jobInfo.setInterfaceName("interface_" + jobInfo.getId());
         log.info(">>>>> jobName = [" + jobInfo.getJobName() + "]" + " created.");
         return jobInfo;
     }
@@ -79,15 +77,9 @@ public class JobInfoServiceImpl implements JobInfoService {
                         (Class<? extends QuartzJobBean>) Class.forName(jobInfo.getJobClass()), false, context,
                         jobInfo.getJobName(), jobInfo.getJobGroup());
 
-                Trigger trigger;
+                Trigger trigger = scheduleCreator.createCronTrigger(jobInfo.getJobName(), new Date(),
+                        jobInfo.getCronExpression(), SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW);
 
-                if (jobInfo.getCronJob()) {
-                    trigger = scheduleCreator.createCronTrigger(jobInfo.getJobName(), new Date(),
-                            jobInfo.getCronExpression(), SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW);
-                } else {
-                    trigger = scheduleCreator.createSimpleTrigger(jobInfo.getJobName(), new Date(),
-                            jobInfo.getRepeatTime(), SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW);
-                }
                 scheduler.scheduleJob(jobDetail, trigger);
                 jobInfo.setJobStatus("SCHEDULED");
                 jobInfoRepository.save(EntityUtils.persistable(jobInfo, true));
@@ -103,16 +95,12 @@ public class JobInfoServiceImpl implements JobInfoService {
     }
 
     public JobInfo updateScheduleJob(JobInfo jobInfo){
-        Trigger newTrigger;
-        if (jobInfo.getCronJob()) {
-            newTrigger = scheduleCreator.createCronTrigger(jobInfo.getJobName(), new Date(),
-                    jobInfo.getCronExpression(), SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW);
-        } else {
-            newTrigger = scheduleCreator.createSimpleTrigger(jobInfo.getJobName(), new Date(), jobInfo.getRepeatTime(),
-                    SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW);
-        }
+        Trigger newTrigger = scheduleCreator.createCronTrigger(jobInfo.getJobName(),
+                new Date(),
+                jobInfo.getCronExpression(),
+                SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW);
         try {
-            schedulerFactoryBean.getScheduler().rescheduleJob(TriggerKey.triggerKey(jobInfo.getJobName()), newTrigger);
+            schedulerFactoryBean.getScheduler().rescheduleJob(TriggerKey.triggerKey(jobInfo.getBaseJobName()), newTrigger);
             jobInfo.setJobStatus("EDITED & SCHEDULED");
             jobInfoRepository.save(jobInfo);
             log.info(">>>>> jobName = [" + jobInfo.getJobName() + "]" + " updated and scheduled.");
@@ -125,10 +113,10 @@ public class JobInfoServiceImpl implements JobInfoService {
 
     public void deleteJob(JobInfo jobInfo){
         try {
-            JobInfo getJobInfo = jobInfoRepository.findByJobName(jobInfo.getJobName());
-            jobInfoRepository.delete(getJobInfo);
             log.info(">>>>> jobName = [" + jobInfo.getJobName() + "]" + " deleted.");
-            schedulerFactoryBean.getScheduler().deleteJob(new JobKey(jobInfo.getJobName(), jobInfo.getJobGroup()));
+
+            schedulerFactoryBean.getScheduler().deleteJob(new JobKey(jobInfo.getBaseJobName(), jobInfo.getJobGroup()));
+            jobInfoRepository.delete(jobInfo);
         } catch (SchedulerException e) {
             log.error("Failed to delete job - {}", jobInfo.getJobName(), e);
         }
diff --git a/src/main/java/com/lawtk/lawtkschedulerbe/service/ScheduleServiceImpl.java b/src/main/java/com/lawtk/lawtkschedulerbe/service/ScheduleServiceImpl.java
index 8011f994095d4f3dba06a69563a1e20c1cb5d4ca..e938bd4f8adea08ab5926055cf443e2d03d17413 100644
--- a/src/main/java/com/lawtk/lawtkschedulerbe/service/ScheduleServiceImpl.java
+++ b/src/main/java/com/lawtk/lawtkschedulerbe/service/ScheduleServiceImpl.java
@@ -1,6 +1,8 @@
 package com.lawtk.lawtkschedulerbe.service;
 
+import com.lawtk.lawtkschedulerbe.entity.JobInfo;
 import com.lawtk.lawtkschedulerbe.entity.Schedule;
+import com.lawtk.lawtkschedulerbe.repository.JobInfoRepository;
 import com.lawtk.lawtkschedulerbe.repository.ScheduleRepository;
 import com.lawtk.lawtkschedulerbe.util.EntityUtils;
 import lombok.extern.slf4j.Slf4j;
@@ -8,17 +10,45 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.transaction.Transactional;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.util.Date;
 import java.util.List;
 
 @Slf4j
 @Service
-@Transactional
+//@Transactional
 public class ScheduleServiceImpl implements ScheduleService {
     @Autowired
     ScheduleRepository scheduleRepository;
 
+    @Autowired
+    JobInfoService jobInfoService;
+
+    @Autowired
+    JobInfoRepository jobInfoRepository;
+
     public Schedule addSchedule(Schedule schedule){
-        return scheduleRepository.save(EntityUtils.persistable(schedule, true));
+        JobInfo jobInfo = new JobInfo();
+        scheduleRepository.save(EntityUtils.persistable(schedule, true));
+
+        jobInfo.setId(schedule.getId());
+        jobInfo.setJobName(schedule.getActivityName());
+        jobInfo.setJobGroup("CronJob");
+        jobInfo.setJobStatus("NORMAL");
+        jobInfo.setJobClass("CronJob");
+        jobInfo.setDescription("Job for activity: " + schedule.getActivityName());
+        jobInfo.setCronJob(true);
+        jobInfo.setScheduleId(schedule.getId());
+        jobInfo.setBaseJobName(schedule.getActivityName());
+
+        String cronExpression = createCronExpression(schedule.getScheduleTime(), schedule.getScheduleInterval());
+
+        jobInfo.setCronExpression(cronExpression);
+
+        jobInfoService.saveOrUpdate(jobInfo);
+
+        return schedule;
     }
 
     public Schedule retrieveScheduleById(Integer id){
@@ -30,10 +60,80 @@ public class ScheduleServiceImpl implements ScheduleService {
     }
 
     public Schedule updateSchedule(Schedule schedule){
-        return scheduleRepository.save(schedule);
+        scheduleRepository.save(schedule);
+
+        JobInfo jobInfo = jobInfoRepository.findById(schedule.getId()).get();
+
+        //template cron, need affirmation//
+//        String cronExpression = "0/10 * * * * ?";
+
+        String cronExpression = createCronExpression(schedule.getScheduleTime(), schedule.getScheduleInterval());
+
+        jobInfo.setCronExpression(cronExpression);
+        jobInfo.setJobName(schedule.getActivityName());
+        jobInfo.setCronJob(true);
+        jobInfoService.updateScheduleJob(jobInfo);
+
+        return schedule;
     }
 
     public void deleteSchedule(Schedule schedule){
+
+        JobInfo jobInfo = jobInfoRepository.findById(schedule.getId()).get();
+        jobInfoService.deleteJob(jobInfo);
         scheduleRepository.delete(schedule);
     }
+
+    public String createCronExpression(Integer time, String interval){
+        String cronExpression = "";
+        Date date = new Date();
+        LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+        int day   = localDate.getDayOfMonth();
+        int month = localDate.getMonthValue();
+
+
+        switch (interval) {
+            case "Minutes":
+                if (time >= 0 && time<= 60){
+                    cronExpression = String.format("0 */%d * ? * *", time);
+                }else{
+                    System.out.println("ERROR");
+                }
+                break;
+            case "Hours":
+                if (time >= 0 && time<= 24){
+                    cronExpression = String.format("0 0 */%d ? * *", time);
+                }else{
+                    System.out.println("ERROR");
+                }
+                break;
+            case "Days":
+                if (time >= 1 && time<= 31){
+                    cronExpression = String.format("0 0 0 %d/%d * ?",day, time);
+                }else{
+                    System.out.println("ERROR");
+                }
+                break;
+            case "Weeks":
+                if (time >= 1 && time<= 4){
+                    cronExpression = String.format("0 0 0 %d/%d * ?",day, time*7);
+                }else{
+                    System.out.println("ERROR");
+                }
+                break;
+            case "Months":
+                if (time >= 1 && time<= 12){
+                    cronExpression = String.format("0 0 0 %d %d/%d ?", day, month, time);
+                }else{
+                    System.out.println("ERROR");
+                }
+                break;
+        }
+
+        if (cronExpression.equals("")){
+            cronExpression = "ERROR";
+        }
+
+        return cronExpression;
+    }
 }
diff --git a/src/main/resources/db/migration/V2__remindme_db_init.sql b/src/main/resources/db/migration/V2__remindme_db_init.sql
index eb6e07e0d6a330e39ab7aa611a3098849c3b200f..409c335716e4aa99b44b9986158ed283b9082bc0 100644
--- a/src/main/resources/db/migration/V2__remindme_db_init.sql
+++ b/src/main/resources/db/migration/V2__remindme_db_init.sql
@@ -32,10 +32,9 @@ CREATE TABLE IF NOT EXISTS job_info (
   job_class varchar(255) NOT NULL,
   cron_expression varchar(255) NOT NULL,
   description varchar(255) NOT NULL,
-  interface_name varchar(255) NOT NULL,
-  repeat_time BIGINT NOT NULL,
   cron_job BOOLEAN NOT NULL,
   schedule_id int(11) NOT NULL,
+  base_job_name varchar(255) NULL,
   PRIMARY KEY (id),
   FOREIGN KEY (schedule_id)
   REFERENCES schedule(id)