diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..bfc71e1
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..63e9001
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..712ab9d
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..67e1e61
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..e96534f
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 4cea3b2..9d1c71b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -71,6 +71,23 @@
reactor-test
test
+
+ com.vaadin.external.google
+ android-json
+ 0.0.20131108.vaadin1
+
+
+ jakarta.validation
+ jakarta.validation-api
+ 2.0.2
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+ 3.1.1
+
+
+
@@ -78,6 +95,7 @@
org.springframework.boot
spring-boot-maven-plugin
+ 2.5.4
diff --git a/src/main/java/com/codejam/demo/DemoApplication.java b/src/main/java/com/codejam/demo/DemoApplication.java
index d6133f9..3f9a594 100644
--- a/src/main/java/com/codejam/demo/DemoApplication.java
+++ b/src/main/java/com/codejam/demo/DemoApplication.java
@@ -2,8 +2,10 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
+@EnableFeignClients
public class DemoApplication {
public static void main(String[] args) {
diff --git a/src/main/java/com/codejam/demo/config/FeignConfig.java b/src/main/java/com/codejam/demo/config/FeignConfig.java
new file mode 100644
index 0000000..f3b5560
--- /dev/null
+++ b/src/main/java/com/codejam/demo/config/FeignConfig.java
@@ -0,0 +1,54 @@
+package com.codejam.demo.config;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import feign.Logger;
+import feign.Response;
+import feign.codec.Encoder;
+import feign.codec.ErrorDecoder;
+import feign.form.FormEncoder;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.ObjectFactory;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
+import org.springframework.cloud.openfeign.support.SpringEncoder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Primary;
+import org.springframework.context.annotation.Scope;
+
+import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE;
+
+@Slf4j
+public class FeignConfig {
+
+ private final ObjectMapper objectMapper;
+
+ public FeignConfig(){
+ objectMapper = new ObjectMapper();
+ }
+
+ @Bean
+ @Primary
+ @Scope(SCOPE_PROTOTYPE)
+ Encoder feignFormEncoder(ObjectFactory messageConverters) {
+ return new FormEncoder(new SpringEncoder(messageConverters));
+ }
+
+ @Bean
+ public ErrorDecoder errorDecoder() {
+ return new CustomErrorDecoder();
+ }
+
+ public class CustomErrorDecoder implements ErrorDecoder {
+
+ private final ErrorDecoder defaultErrorDecoder = new Default();
+
+ @Override
+ public Exception decode(String methodKey, Response response) {
+ return defaultErrorDecoder.decode(methodKey, response);
+ }
+ }
+
+ @Bean
+ Logger.Level feignLoggerLevel() {
+ return Logger.Level.FULL;
+ }
+}
diff --git a/src/main/java/com/codejam/demo/constants/MessageConstants.java b/src/main/java/com/codejam/demo/constants/MessageConstants.java
new file mode 100644
index 0000000..e2a6a2d
--- /dev/null
+++ b/src/main/java/com/codejam/demo/constants/MessageConstants.java
@@ -0,0 +1,14 @@
+package com.codejam.demo.constants;
+
+public class MessageConstants {
+
+ // Schedule Configuration
+ public static final String SCHEDULE_SAVE = "Schedule save successfully";
+ public static final String SCHEDULE_UPDATE = "Schedule update successfully";
+ public static final String SCHEDULE_EXIST = "Schedule Already Exists!";
+
+ // Revenue Configuration
+ public static final String REVENUE_SAVE = "Revenue save successfully";
+ public static final String REVENUE_UPDATE = "Revenue update successfully";
+ public static final String REVENUE_EXIST = "Revenue Already Exists!";
+}
diff --git a/src/main/java/com/codejam/demo/constants/ResponseStatus.java b/src/main/java/com/codejam/demo/constants/ResponseStatus.java
new file mode 100644
index 0000000..31554ad
--- /dev/null
+++ b/src/main/java/com/codejam/demo/constants/ResponseStatus.java
@@ -0,0 +1,8 @@
+package com.codejam.demo.constants;
+
+public class ResponseStatus {
+
+ public static final String SUCCESS = "success";
+ public static final String ERROR = "error";
+
+}
diff --git a/src/main/java/com/codejam/demo/controller/PersonalInformationController.java b/src/main/java/com/codejam/demo/controller/PersonalInformationController.java
new file mode 100644
index 0000000..ee27d43
--- /dev/null
+++ b/src/main/java/com/codejam/demo/controller/PersonalInformationController.java
@@ -0,0 +1,49 @@
+package com.codejam.demo.controller;
+
+import com.codejam.demo.model.PersonalInformation;
+import com.codejam.demo.repository.PersonalInformationRepository;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Optional;
+
+@RestController
+@RequiredArgsConstructor
+@RequestMapping(path = "demo")
+public class PersonalInformationController {
+
+ @Autowired
+ private PersonalInformationRepository personalInformationRepository;
+
+ @GetMapping("/information/all")
+ public List getAllInformation() {
+ return personalInformationRepository.findAll();
+ }
+
+ @GetMapping("/information/{id}")
+ public Optional getInformation(@PathVariable("id") Integer id) {
+ return personalInformationRepository.findById(id);
+ }
+
+ @PostMapping("/information/save")
+ public PersonalInformation savePersonalInformation(@RequestBody PersonalInformation personalInformation) {
+ return personalInformationRepository.save(personalInformation);
+ }
+
+ @PostMapping("/information/update")
+ public PersonalInformation updatePersonalInformation(@RequestBody PersonalInformation personalInformation) {
+ return personalInformationRepository.save(personalInformation);
+ }
+
+ @GetMapping("/information/{id}/delete")
+ public String deletePersonalInformation(@PathVariable("id") Integer id) {
+ try {
+ personalInformationRepository.deleteById(id);
+ } catch (Exception e) {
+ return "Failed";
+ }
+ return "Successful";
+ }
+}
diff --git a/src/main/java/com/codejam/demo/controller/RevenueController.java b/src/main/java/com/codejam/demo/controller/RevenueController.java
new file mode 100644
index 0000000..bab92e3
--- /dev/null
+++ b/src/main/java/com/codejam/demo/controller/RevenueController.java
@@ -0,0 +1,49 @@
+package com.codejam.demo.controller;
+
+import com.codejam.demo.model.Revenue;
+import com.codejam.demo.repository.RevenueRepository;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Optional;
+
+@RestController
+@RequiredArgsConstructor
+@RequestMapping(path = "demo")
+public class RevenueController {
+
+ @Autowired
+ private RevenueRepository revenueRepository;
+
+ @GetMapping("/revenue/all")
+ public List getAllRevenue() {
+ return revenueRepository.findAll();
+ }
+
+ @GetMapping("/revenue/{id}")
+ public Optional getRevenue(@PathVariable("id") Integer id) {
+ return revenueRepository.findById(id);
+ }
+
+ @PostMapping("/revenue/save")
+ public Revenue saveRevenue(@RequestBody Revenue revenue) {
+ return revenueRepository.save(revenue);
+ }
+
+ @PostMapping("/revenue/update")
+ public Revenue updateRevenue(@RequestBody Revenue revenue) {
+ return revenueRepository.save(revenue);
+ }
+
+ @GetMapping("/revenue/{revenue_id}/delete")
+ public String deleteRevenue(@PathVariable("revenue_id") Integer id) {
+ try {
+ revenueRepository.deleteById(id);
+ } catch (Exception e) {
+ return "Failed";
+ }
+ return "Successful";
+ }
+}
diff --git a/src/main/java/com/codejam/demo/controller/ScheduleController.java b/src/main/java/com/codejam/demo/controller/ScheduleController.java
new file mode 100644
index 0000000..355662f
--- /dev/null
+++ b/src/main/java/com/codejam/demo/controller/ScheduleController.java
@@ -0,0 +1,148 @@
+package com.codejam.demo.controller;
+
+import com.codejam.demo.model.Schedule;
+import com.codejam.demo.repository.ScheduleRepository;
+import com.codejam.demo.service.ScheduleService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Optional;
+
+@RestController
+@RequiredArgsConstructor
+@RequestMapping(path = "demo")
+public class ScheduleController {
+
+ private final ScheduleService service;
+ private final String[] sortable = {"id", "venue"};
+ @Autowired
+ private ScheduleRepository scheduleRepository;
+
+ @GetMapping("/schedule/all")
+ public List getAllSchedule() {
+ return scheduleRepository.findAll();
+ }
+
+// @GetMapping("/schedule/all")
+// public ResponseEntity findAll(
+// @RequestParam(value = "sortBy", defaultValue = "") String sortBy) {
+// Map filterMap = new HashMap<>();
+//
+// List responses = service.findAll(sortable, sortBy, filterMap)
+// .stream()
+// .map(ScheduleDto::from)
+// .collect(Collectors.toList());
+//
+// return ok(success(responses).getJson());
+// }
+
+ @GetMapping("/schedule/{id}")
+ public Optional getSchedule(@PathVariable("id") Integer id) {
+ return scheduleRepository.findById(id);
+ }
+
+ @PostMapping("/schedule/save")
+ public Schedule saveSchedule(@RequestBody Schedule schedule) {
+ return scheduleRepository.save(schedule);
+ }
+
+ @PostMapping("/schedule/update")
+ public Schedule updateSchedule(@RequestBody Schedule schedule) {
+ return scheduleRepository.save(schedule);
+ }
+
+ @GetMapping("/schedule/{schedule_id}/delete")
+ public String deleteSchedule(@PathVariable("schedule_id") Integer id) {
+ try {
+ scheduleRepository.deleteById(id);
+ } catch (Exception e) {
+ return "Failed";
+ }
+ return "Successful";
+ }
+
+/*
+ private final ScheduleRepository repository;
+
+ private final ScheduleService service;
+
+ private final CommonDataHelper helper;
+
+ private final ScheduleValidator validator;
+
+ private final String[] sortable = {"schedule_id", "venue"};
+
+ @PostMapping("/schedule/save")
+ public ResponseEntity save(@Valid @RequestBody ScheduleDto scheduleDto, BindingResult bindingResult) {
+
+ // ValidationUtils.invokeValidator(validator, scheduleDto, bindingResult);
+
+// if (bindingResult.hasErrors()) {
+// return badRequest().body(error(fieldError(bindingResult)).getJson());
+// }
+ Schedule schedule = service.save(scheduleDto);
+ return ok(success(ScheduleDto.from(schedule), SCHEDULE_SAVE).getJson());
+ }
+
+ @PutMapping("/schedule/update")
+ public ResponseEntity update(@Valid @RequestBody ScheduleDto scheduleDto, BindingResult bindingResult) {
+
+// if (bindingResult.hasErrors()) {
+// return badRequest().body(error(fieldError(bindingResult)).getJson());
+// }
+ Schedule schedule = service.update(scheduleDto, RecordStatus.DRAFT);
+ return ok(success(ScheduleDto.from(schedule), SCHEDULE_UPDATE).getJson());
+ }
+
+ @GetMapping("/schedule/find/{id}")
+ public ResponseEntity findById(@PathVariable Integer id) {
+
+ Schedule schedule = service.findById(id)
+ .orElseThrow(() -> new ResourceNotFoundException("Course Id: " + id));
+
+ return ok(success(ScheduleDto.from(schedule)).getJson());
+ }
+
+ @GetMapping("/schedule/all")
+ public ResponseEntity findAll(
+ @RequestParam(value = "sortBy", defaultValue = "") String sortBy) {
+ Map filterMap = new HashMap<>();
+
+ List responses = service.findAll(sortable, sortBy, filterMap)
+ .stream()
+ .map(ScheduleDto::from)
+ .collect(Collectors.toList());
+
+ return ok(success(responses).getJson());
+ }
+
+ @GetMapping("/schedule/list")
+ public ResponseEntity getList(
+ @RequestParam(value = "page", defaultValue = "1") Integer page,
+ @RequestParam(value = "size", defaultValue = "10") Integer size,
+ @RequestParam(value = "sortBy", defaultValue = "") String sortBy,
+ @RequestParam(value = "venue", defaultValue = "") String venue
+ ) {
+ PaginatedResponse response = new PaginatedResponse();
+
+ Map scheduleMap = service.getList(venue, page, size, sortBy);
+ List schedules = (List) scheduleMap.get("lists");
+ List responses = schedules
+ .stream()
+ .map(ScheduleDto::from)
+ .collect(Collectors.toList());
+
+ helper.getCommonData(page, size, scheduleMap, response, responses);
+
+ return ok(success(response).getJson());
+ }
+
+ @PutMapping("/schedule/change-record-status/{schedule_id}/{status}")
+ public ResponseEntity changeRecordStatus(@PathVariable Integer schedule_id, @PathVariable RecordStatus status) {
+
+ service.updateRecordStatus(schedule_id, status);
+ return ok(success(null, status.toString().toLowerCase() + " successfully").getJson());
+ }*/
+}
diff --git a/src/main/java/com/codejam/demo/dto/ScheduleDto.java b/src/main/java/com/codejam/demo/dto/ScheduleDto.java
new file mode 100644
index 0000000..f21aade
--- /dev/null
+++ b/src/main/java/com/codejam/demo/dto/ScheduleDto.java
@@ -0,0 +1,44 @@
+package com.codejam.demo.dto;
+
+import com.codejam.demo.model.Schedule;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.beans.BeanUtils;
+
+
+@Data
+@NoArgsConstructor
+public class ScheduleDto {
+
+ private Integer schedule_id;
+
+ private String venue;
+
+ private String event_name;
+
+ private String schedule_date_time;
+
+ public static ScheduleDto from(Schedule schedule) {
+
+ ScheduleDto scheduleDto = new ScheduleDto();
+
+ scheduleDto.setSchedule_id(schedule.getId());
+ scheduleDto.setEvent_name(schedule.getEvent_name());
+ scheduleDto.setVenue(schedule.getVenue());
+ scheduleDto.setSchedule_date_time(schedule.getDate_time());
+ return scheduleDto;
+ }
+
+ public Schedule to() {
+ Schedule schedule = new Schedule();
+ BeanUtils.copyProperties(this, schedule);
+ return schedule;
+ }
+
+ public void update(ScheduleDto dto, Schedule schedule) {
+ BeanUtils.copyProperties(dto, schedule);
+ }
+
+}
+
+
diff --git a/src/main/java/com/codejam/demo/dto/ServiceDto.java b/src/main/java/com/codejam/demo/dto/ServiceDto.java
new file mode 100644
index 0000000..78c0ce0
--- /dev/null
+++ b/src/main/java/com/codejam/demo/dto/ServiceDto.java
@@ -0,0 +1,12 @@
+package com.codejam.demo.dto;
+
+import lombok.Data;
+
+@Data
+public class ServiceDto {
+
+ private Integer userId;
+ private Integer id;
+ private String title;
+ private Boolean completed;
+}
diff --git a/src/main/java/com/codejam/demo/enums/RecordStatus.java b/src/main/java/com/codejam/demo/enums/RecordStatus.java
new file mode 100644
index 0000000..958759f
--- /dev/null
+++ b/src/main/java/com/codejam/demo/enums/RecordStatus.java
@@ -0,0 +1,18 @@
+package com.codejam.demo.enums;
+
+public enum RecordStatus {
+
+ DRAFT(0),
+ ACTIVE(1),
+ DELETED(2);
+
+ private final Integer label;
+
+ RecordStatus(Integer label) {
+ this.label = label;
+ }
+
+ public Integer getLabel() {
+ return label;
+ }
+}
diff --git a/src/main/java/com/codejam/demo/exception/ApiError.java b/src/main/java/com/codejam/demo/exception/ApiError.java
new file mode 100644
index 0000000..34b83f0
--- /dev/null
+++ b/src/main/java/com/codejam/demo/exception/ApiError.java
@@ -0,0 +1,31 @@
+package com.codejam.demo.exception;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.FieldError;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Data
+@NoArgsConstructor
+public class ApiError implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ public static Map fieldError(BindingResult bindingResult) {
+ Map fieldErrors = new HashMap<>();
+ if (bindingResult.hasErrors()) {
+ List errors = bindingResult.getFieldErrors();
+ errors.forEach(e -> {
+ fieldErrors.put(e.getField(), e.getDefaultMessage());
+ });
+ }
+ return fieldErrors;
+ }
+}
+
+
diff --git a/src/main/java/com/codejam/demo/exception/ResourceNotFoundException.java b/src/main/java/com/codejam/demo/exception/ResourceNotFoundException.java
new file mode 100644
index 0000000..1124496
--- /dev/null
+++ b/src/main/java/com/codejam/demo/exception/ResourceNotFoundException.java
@@ -0,0 +1,29 @@
+package com.codejam.demo.exception;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+@ResponseStatus(value = HttpStatus.NOT_FOUND)
+public class ResourceNotFoundException extends RuntimeException {
+
+ private static final long serialVersionUID = 1L;
+
+ public ResourceNotFoundException() {
+ }
+
+ public ResourceNotFoundException(String s) {
+ super(s);
+ }
+
+ public ResourceNotFoundException(String s, Throwable throwable) {
+ super(s, throwable);
+ }
+
+ public ResourceNotFoundException(Throwable throwable) {
+ super(throwable);
+ }
+
+ protected ResourceNotFoundException(String s, Throwable throwable, boolean b, boolean b1) {
+ super(s, throwable, b, b1);
+ }
+}
diff --git a/src/main/java/com/codejam/demo/helper/GetListHelper.java b/src/main/java/com/codejam/demo/helper/GetListHelper.java
new file mode 100644
index 0000000..9b9203b
--- /dev/null
+++ b/src/main/java/com/codejam/demo/helper/GetListHelper.java
@@ -0,0 +1,135 @@
+package com.codejam.demo.helper;
+
+import com.codejam.demo.enums.RecordStatus;
+import com.codejam.demo.service.BaseService;
+import com.codejam.demo.utils.PaginationParameters;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+
+import javax.persistence.EntityManager;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.*;
+
+import static com.codejam.demo.utils.StringUtils.isNotEmpty;
+
+public class GetListHelper extends BaseService {
+
+ final Class typeParameterClass;
+ private final EntityManager em;
+
+ public GetListHelper(EntityManager em, Class typeParameterClass) {
+ this.em = em;
+ this.typeParameterClass = typeParameterClass;
+ }
+
+ public Pageable getPageable(String sortBy, int page, int size) {
+ Pageable pageable;
+ if (sortBy.isEmpty()) pageable = PageRequest.of(page - 1, size);
+ else {
+ String[] parts = sortBy.split(",");
+ pageable = PageRequest.of(page - 1, size, Sort.by(parts[0]));
+ if (parts[1].equals("desc")) pageable = PageRequest.of(page - 1, size, Sort.by(parts[0]).descending());
+ }
+ return pageable;
+ }
+
+ public Map getList(Page result, Integer page, Integer size) {
+ Long total = result.getTotalElements();
+ Map maps = new HashMap<>();
+ PaginationParameters.getdata(maps, page, total, size, result.getContent());
+ return maps;
+ }
+
+ public List findAll(String[] sortable, String sortBy) {
+
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+ CriteriaQuery query = cb.createQuery(typeParameterClass);
+ Root root = query.from(typeParameterClass);
+ query.select(root);
+
+ if (isNotEmpty(sortBy)) {
+ String[] sortByArr = sortBy.split(",");
+ logger.info(String.valueOf(sortByArr[1].equals("desc")));
+ if (sortByArr.length <= 2 && Arrays.asList(sortable).contains(sortByArr[0])) {
+ if (sortByArr[1].equals("desc")) {
+ query.orderBy(cb.desc(root.get(sortByArr[0])));
+ } else {
+ query.orderBy(cb.asc(root.get(sortByArr[0])));
+ }
+ }
+ }
+
+ TypedQuery tQuery = em.createQuery(query);
+
+ return tQuery.getResultList();
+ }
+
+ public List findAll(String[] sortable, String sortBy, Map filterMap) {
+
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+ CriteriaQuery query = cb.createQuery(typeParameterClass);
+ Root root = query.from(typeParameterClass);
+ query.select(root);
+
+ List predicates = new ArrayList<>();
+
+ deleteParam(cb, query, root, predicates);
+
+ if (filterMap.size() > 0) {
+ for (String key : filterMap.keySet()) {
+ if ((filterMap.get(key)) instanceof Integer) {
+ if (!filterMap.get(key).equals(0))
+ predicates.add(cb.equal(root.get(key), filterMap.get(key)));
+ } else if ((filterMap.get(key)) instanceof Double) {
+ if (!filterMap.get(key).equals(0))
+ predicates.add(cb.equal(root.get(key), filterMap.get(key)));
+ } else if ((filterMap.get(key)) instanceof Long) {
+ if (!filterMap.get(key).equals(0))
+ predicates.add(cb.equal(root.get(key), filterMap.get(key)));
+ } else if ((filterMap.get(key)) instanceof String) {
+ if (!filterMap.get(key).equals(""))
+ predicates.add(cb.equal(root.get(key), String.valueOf(filterMap.get(key))));
+ } else if ((filterMap.get(key)) instanceof Enum) {
+ if (!filterMap.get(key).equals(""))
+ predicates.add(cb.equal(root.get(key), filterMap.get(key)));
+ }
+ }
+ if ((filterMap.get("date")) instanceof Date) {
+ if (!filterMap.get("date").equals("")) {
+
+ predicates.add(cb.between(root.get("date"), new Date(), new Date()));
+ cb.between(root.get("dateEntry"), new Date(), new Date());
+ }
+// predicates.add(cb.equal(root.get(key), filterMap.get(key)));
+ }
+ query.where(cb.and(predicates.toArray(new Predicate[]{})));
+ }
+
+ if (isNotEmpty(sortBy)) {
+ String[] sortByArr = sortBy.split(",");
+ logger.info(String.valueOf(sortByArr[1].equals("desc")));
+ if (sortByArr.length <= 2 && Arrays.asList(sortable).contains(sortByArr[0])) {
+ if (sortByArr[1].equals("desc")) {
+ query.orderBy(cb.desc(root.get(sortByArr[0])));
+ } else {
+ query.orderBy(cb.asc(root.get(sortByArr[0])));
+ }
+ }
+ }
+
+ TypedQuery tQuery = em.createQuery(query);
+
+ return tQuery.getResultList();
+ }
+
+ public void deleteParam(CriteriaBuilder cb, CriteriaQuery> query, Root> root, List predicates) {
+ predicates.add(cb.notEqual(root.get("recordStatus"), RecordStatus.DELETED));
+ query.where(cb.and(predicates.toArray(new Predicate[]{})));
+ }
+}
diff --git a/src/main/java/com/codejam/demo/model/PersonalInformation.java b/src/main/java/com/codejam/demo/model/PersonalInformation.java
new file mode 100644
index 0000000..267c135
--- /dev/null
+++ b/src/main/java/com/codejam/demo/model/PersonalInformation.java
@@ -0,0 +1,37 @@
+package com.codejam.demo.model;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+
+import javax.persistence.*;
+
+@Data
+@Entity
+@DynamicInsert
+@DynamicUpdate
+@Table(name = "PERSONAL_INFORMATION")
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+public class PersonalInformation{
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "ID")
+ private Integer id;
+
+ @Column(name = "REAL_NAME", columnDefinition = "varchar(50)")
+ private String real_name;
+
+ @Column(name = "IDOL_NAME", columnDefinition = "varchar(60)")
+ private String idol_name;
+
+ @Column(name = "ADDRESS", columnDefinition = "varchar(255)")
+ private String address;
+
+ @Column(name = "IDOL_STATUS", columnDefinition = "varchar(25)")
+ private String idol_status;
+
+}
diff --git a/src/main/java/com/codejam/demo/model/Revenue.java b/src/main/java/com/codejam/demo/model/Revenue.java
new file mode 100644
index 0000000..21302eb
--- /dev/null
+++ b/src/main/java/com/codejam/demo/model/Revenue.java
@@ -0,0 +1,31 @@
+package com.codejam.demo.model;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+
+import javax.persistence.*;
+
+@Data
+@Entity
+@DynamicInsert
+@DynamicUpdate
+//@Table(name = "REVENUE")
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+public class Revenue {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ //@Column(name = "REVENUE_ID")
+ private Integer id;
+
+ //@Column(name = "MONTHLY_RATE", columnDefinition = "varchar(50)")
+ private String monthly_rate;
+
+ //@Temporal(TemporalType.TIMESTAMP)
+ //@Column(name = "REVENUE_DATE_TIME", columnDefinition = "varchar(50)")
+ private String date_time;
+}
diff --git a/src/main/java/com/codejam/demo/model/Schedule.java b/src/main/java/com/codejam/demo/model/Schedule.java
new file mode 100644
index 0000000..7d8eb62
--- /dev/null
+++ b/src/main/java/com/codejam/demo/model/Schedule.java
@@ -0,0 +1,34 @@
+package com.codejam.demo.model;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+
+import javax.persistence.*;
+
+@Data
+@Entity
+@DynamicInsert
+@DynamicUpdate
+//@Table(name = "SCHEDULE")
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+public class Schedule {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ //@Column(name = "ID")
+ private Integer id;
+
+ //@Column(name = "VENUE", columnDefinition = "varchar(50)")
+ private String venue;
+
+ //@Column(name = "EVENT_NAME", columnDefinition = "varchar(60)")
+ private String event_name;
+
+ //@Temporal(TemporalType.TIMESTAMP)
+ //@Column(name = "SCHEDULE_DATE_TIME", columnDefinition = "varchar(50)")
+ private String date_time;
+}
diff --git a/src/main/java/com/codejam/demo/repository/DemoServiceRepositiry.java b/src/main/java/com/codejam/demo/repository/DemoServiceRepositiry.java
new file mode 100644
index 0000000..32c009d
--- /dev/null
+++ b/src/main/java/com/codejam/demo/repository/DemoServiceRepositiry.java
@@ -0,0 +1,16 @@
+package com.codejam.demo.repository;
+
+import com.codejam.demo.config.FeignConfig;
+import com.codejam.demo.dto.ServiceDto;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestHeader;
+
+@FeignClient(name = "serviceRepository", configuration = FeignConfig.class, url = "${demoService}", decode404 = true)
+public interface DemoServiceRepositiry {
+
+ @GetMapping("demo/find/demoService/{id}")
+ ServiceDto findInstituteById(@RequestHeader("authorization") String authorization,
+ @PathVariable("id") Integer id);
+}
diff --git a/src/main/java/com/codejam/demo/repository/PersonalInformationRepository.java b/src/main/java/com/codejam/demo/repository/PersonalInformationRepository.java
new file mode 100644
index 0000000..62f1259
--- /dev/null
+++ b/src/main/java/com/codejam/demo/repository/PersonalInformationRepository.java
@@ -0,0 +1,9 @@
+package com.codejam.demo.repository;
+
+import com.codejam.demo.model.PersonalInformation;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface PersonalInformationRepository extends JpaRepository {
+}
diff --git a/src/main/java/com/codejam/demo/repository/RevenueRepository.java b/src/main/java/com/codejam/demo/repository/RevenueRepository.java
new file mode 100644
index 0000000..43d2401
--- /dev/null
+++ b/src/main/java/com/codejam/demo/repository/RevenueRepository.java
@@ -0,0 +1,9 @@
+package com.codejam.demo.repository;
+
+import com.codejam.demo.model.Revenue;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface RevenueRepository extends JpaRepository {
+}
diff --git a/src/main/java/com/codejam/demo/repository/ScheduleRepository.java b/src/main/java/com/codejam/demo/repository/ScheduleRepository.java
new file mode 100644
index 0000000..3d51674
--- /dev/null
+++ b/src/main/java/com/codejam/demo/repository/ScheduleRepository.java
@@ -0,0 +1,19 @@
+package com.codejam.demo.repository;
+
+import com.codejam.demo.model.Schedule;
+import org.springframework.data.domain.Page;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+import org.springframework.data.domain.Pageable;
+
+import java.util.Optional;
+
+@Repository
+public interface ScheduleRepository extends JpaRepository {
+
+ Optional findByVenue(String venue);
+
+ @Query("SELECT q FROM Schedule q WHERE LOWER(q.venue) LIKE LOWER(CONCAT('%', :venue, '%'))")
+ Page searchSchedule(String venue, Pageable pageable);
+}
diff --git a/src/main/java/com/codejam/demo/service/BaseService.java b/src/main/java/com/codejam/demo/service/BaseService.java
new file mode 100644
index 0000000..883f26b
--- /dev/null
+++ b/src/main/java/com/codejam/demo/service/BaseService.java
@@ -0,0 +1,9 @@
+package com.codejam.demo.service;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class BaseService {
+
+ public Logger logger = LoggerFactory.getLogger(BaseService.class);
+}
diff --git a/src/main/java/com/codejam/demo/service/PersonalInformationService.java b/src/main/java/com/codejam/demo/service/PersonalInformationService.java
new file mode 100644
index 0000000..b0e604c
--- /dev/null
+++ b/src/main/java/com/codejam/demo/service/PersonalInformationService.java
@@ -0,0 +1,6 @@
+/*
+package com.codejam.demo.service;
+
+public interface PersonalInformationService {
+}
+*/
diff --git a/src/main/java/com/codejam/demo/service/RevenueService.java b/src/main/java/com/codejam/demo/service/RevenueService.java
new file mode 100644
index 0000000..d88a931
--- /dev/null
+++ b/src/main/java/com/codejam/demo/service/RevenueService.java
@@ -0,0 +1,25 @@
+package com.codejam.demo.service;
+
+import com.codejam.demo.enums.RecordStatus;
+import com.codejam.demo.model.Revenue;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+public interface RevenueService {
+
+ Revenue save(Revenue revenue);
+
+ Revenue update(Revenue revenue, RecordStatus status);
+
+ Optional findById(int id);
+
+ Optional findByMonthlyRate(String monthly_rate);
+
+ List findAll(String[] sortable, String sortBy, Map filterMap);
+
+ Map getList(String monthly_rate, Integer page, Integer size, String sortBy);
+
+ //void updateRecordStatus(Integer schedule_id, RecordStatus status);
+}
diff --git a/src/main/java/com/codejam/demo/service/ScheduleService.java b/src/main/java/com/codejam/demo/service/ScheduleService.java
new file mode 100644
index 0000000..1010fe7
--- /dev/null
+++ b/src/main/java/com/codejam/demo/service/ScheduleService.java
@@ -0,0 +1,26 @@
+package com.codejam.demo.service;
+
+import com.codejam.demo.dto.ScheduleDto;
+import com.codejam.demo.enums.RecordStatus;
+import com.codejam.demo.model.Schedule;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+public interface ScheduleService {
+
+ Schedule save(ScheduleDto scheduleDto);
+
+ Schedule update(ScheduleDto scheduleDto, RecordStatus status);
+
+ Optional findById(int id);
+
+ Optional findByVenue(String venue);
+
+ List findAll(String[] sortable, String sortBy, Map filterMap);
+
+ Map getList(String venue, Integer page, Integer size, String sortBy);
+
+ void updateRecordStatus(Integer schedule_id, RecordStatus status);
+
+}
diff --git a/src/main/java/com/codejam/demo/serviceImplementation/ScheduleServiceImplementation.java b/src/main/java/com/codejam/demo/serviceImplementation/ScheduleServiceImplementation.java
new file mode 100644
index 0000000..af115ce
--- /dev/null
+++ b/src/main/java/com/codejam/demo/serviceImplementation/ScheduleServiceImplementation.java
@@ -0,0 +1,82 @@
+package com.codejam.demo.serviceImplementation;
+
+import com.codejam.demo.dto.ScheduleDto;
+import com.codejam.demo.enums.RecordStatus;
+import com.codejam.demo.exception.ResourceNotFoundException;
+import com.codejam.demo.helper.GetListHelper;
+import com.codejam.demo.model.Schedule;
+import com.codejam.demo.repository.ScheduleRepository;
+import com.codejam.demo.service.ScheduleService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.EntityManager;
+import javax.transaction.Transactional;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+@Service
+@RequiredArgsConstructor
+public class ScheduleServiceImplementation implements ScheduleService {
+
+ private final ScheduleRepository repository;
+
+ private final EntityManager em;
+
+ @Override
+ @Transactional
+ public Schedule save(ScheduleDto scheduleDto) {
+ Schedule schedule = scheduleDto.to();
+ //helper.getSaveData(schedule);
+ Schedule savedSchedule = repository.save(schedule);
+ return savedSchedule;
+ }
+ @Override
+ @Transactional
+ public Schedule update(ScheduleDto dto, RecordStatus status){
+ Schedule schedule = repository.findById(dto.getSchedule_id()).orElseThrow(() -> new ResourceNotFoundException("id: " + dto.getSchedule_id()));
+ dto.update(dto, schedule);
+ //helper.getUpdatedData(schedule, status);
+ Schedule updatedSchedule = repository.save(schedule);
+ return updatedSchedule;
+ }
+
+ @Override
+ public Optional findById(int id) {
+ Optional schedule= repository.findById(id);
+ return schedule;
+ }
+
+ @Override
+ public Optional findByVenue(String venue) {
+ Optional schedule = repository.findByVenue(venue);
+ return schedule;
+ }
+
+
+ @Override
+ public List findAll(String[] sortable, String sortBy, Map filterMap) {
+ return new GetListHelper(em, Schedule.class).findAll(sortable, sortBy);
+ }
+
+ @Override
+ public Map getList(String venue, Integer page, Integer size, String sortBy) {
+ GetListHelper helper = new GetListHelper<>(em, Schedule.class);
+
+ return helper.getList(repository.searchSchedule(venue,
+ helper.getPageable(sortBy, page, size)), page, size);
+ }
+
+
+ @Override
+ @Transactional
+ public void updateRecordStatus(Integer schedule_id, RecordStatus status) {
+ Schedule schedule = repository.findById(schedule_id)
+ .orElseThrow(() -> new ResourceNotFoundException("Schedule Id: " + schedule_id));
+ // helper.getUpdatedData(schedule, status);
+ repository.save(schedule);
+ }
+
+
+}
diff --git a/src/main/java/com/codejam/demo/utils/CommonDataHelper.java b/src/main/java/com/codejam/demo/utils/CommonDataHelper.java
new file mode 100644
index 0000000..652c936
--- /dev/null
+++ b/src/main/java/com/codejam/demo/utils/CommonDataHelper.java
@@ -0,0 +1,30 @@
+package com.codejam.demo.utils;
+
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class CommonDataHelper {
+
+ public void getCommonData(Integer page, Integer size, Map searchResult, PaginatedResponse response, List> list) {
+
+ Integer currentPage = (Integer) searchResult.get("currentPage");
+ Integer nextPage = (Integer) searchResult.get("nextPage");
+ Integer previousPage = (Integer) searchResult.get("previousPage");
+
+ Map meta = new HashMap<>();
+ meta.put("currentPage", currentPage);
+ meta.put("nextPage", nextPage);
+ meta.put("previousPage", previousPage);
+ meta.put("size", searchResult.get("size"));
+ meta.put("total", searchResult.get("total"));
+
+ response.setList(list);
+ response.setMeta(meta);
+ }
+
+}
+
diff --git a/src/main/java/com/codejam/demo/utils/PaginatedResponse.java b/src/main/java/com/codejam/demo/utils/PaginatedResponse.java
new file mode 100644
index 0000000..d5ef1db
--- /dev/null
+++ b/src/main/java/com/codejam/demo/utils/PaginatedResponse.java
@@ -0,0 +1,14 @@
+package com.codejam.demo.utils;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+public class PaginatedResponse {
+
+ public Object list;
+
+ public Object meta;
+
+}
diff --git a/src/main/java/com/codejam/demo/utils/PaginationParameters.java b/src/main/java/com/codejam/demo/utils/PaginationParameters.java
new file mode 100644
index 0000000..9b07afd
--- /dev/null
+++ b/src/main/java/com/codejam/demo/utils/PaginationParameters.java
@@ -0,0 +1,20 @@
+package com.codejam.demo.utils;
+
+import java.util.List;
+import java.util.Map;
+
+public class PaginationParameters {
+
+ public static void getdata(Map map, Integer page, Long total, Integer size, List> lists) {
+
+ Integer nextPage = ((page + 1) < total) ? page + 1 : 0;
+ Integer previousPage = ((page - 1) >= 0) ? page - 1 : 0;
+ map.put("currentPage", page);
+ map.put("nextPage", nextPage);
+ map.put("previousPage", previousPage);
+ map.put("size", size);
+ map.put("total", total);
+ map.put("lists", lists);
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/codejam/demo/utils/Response.java b/src/main/java/com/codejam/demo/utils/Response.java
new file mode 100644
index 0000000..39eca28
--- /dev/null
+++ b/src/main/java/com/codejam/demo/utils/Response.java
@@ -0,0 +1,7 @@
+package com.codejam.demo.utils;
+
+import org.json.JSONObject;
+
+public interface Response {
+ JSONObject getJson();
+}
\ No newline at end of file
diff --git a/src/main/java/com/codejam/demo/utils/ResponseBuilder.java b/src/main/java/com/codejam/demo/utils/ResponseBuilder.java
new file mode 100644
index 0000000..a720708
--- /dev/null
+++ b/src/main/java/com/codejam/demo/utils/ResponseBuilder.java
@@ -0,0 +1,75 @@
+package com.codejam.demo.utils;
+
+import com.codejam.demo.constants.ResponseStatus;
+import lombok.Data;
+import org.json.JSONObject;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Data
+public class ResponseBuilder implements Response {
+
+ private final ResponseType type;
+ private String status = null;
+ private Object data = null;
+ private Object markList = null;
+ private Object meta = null;
+ private String message = null;
+ private Object errors = null;
+
+ public ResponseBuilder(ResponseType type) {
+ this.type = type;
+ }
+
+ public static ResponseBuilder success(Object data) {
+ ResponseBuilder response = new ResponseBuilder(ResponseType.DATA);
+ response.data = data;
+ response.status = ResponseStatus.SUCCESS;
+ return response;
+ }
+
+ public static ResponseBuilder success(Object data, String message) {
+ ResponseBuilder response = new ResponseBuilder(ResponseType.DATA);
+ response.data = data;
+ response.message = message;
+ response.status = ResponseStatus.SUCCESS;
+ return response;
+ }
+
+ public static ResponseBuilder error(Object errors) {
+ ResponseBuilder response = new ResponseBuilder(ResponseType.ERROR);
+ response.errors = errors;
+ response.status = ResponseStatus.ERROR;
+ return response;
+ }
+
+ public static ResponseBuilder error(Object errors, String message) {
+ ResponseBuilder response = new ResponseBuilder(ResponseType.ERROR);
+ response.errors = errors;
+ response.message = message;
+ response.status = ResponseStatus.ERROR;
+ return response;
+ }
+
+ @Override
+ public JSONObject getJson() {
+
+ Map maps = new HashMap();
+
+ switch (this.type) {
+ case DATA:
+ maps.put("status", status);
+ maps.put("data", data);
+ maps.put("meta", meta);
+ maps.put("message", message);
+ case ERROR:
+ maps.put("status", status);
+ maps.put("message", message);
+ maps.put("errors", errors);
+ }
+
+ return new JSONObject(maps);
+ }
+
+}
diff --git a/src/main/java/com/codejam/demo/utils/ResponseType.java b/src/main/java/com/codejam/demo/utils/ResponseType.java
new file mode 100644
index 0000000..e7d732b
--- /dev/null
+++ b/src/main/java/com/codejam/demo/utils/ResponseType.java
@@ -0,0 +1,6 @@
+package com.codejam.demo.utils;
+
+public enum ResponseType {
+ DATA,
+ ERROR
+}
\ No newline at end of file
diff --git a/src/main/java/com/codejam/demo/utils/StringUtils.java b/src/main/java/com/codejam/demo/utils/StringUtils.java
new file mode 100644
index 0000000..a5c548a
--- /dev/null
+++ b/src/main/java/com/codejam/demo/utils/StringUtils.java
@@ -0,0 +1,112 @@
+package com.codejam.demo.utils;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+import java.util.concurrent.ThreadLocalRandom;
+
+public class StringUtils {
+
+ public static boolean isNotEmpty(String str) {
+ return Objects.nonNull(str) && str.trim().length() > 0;
+ }
+
+ public static boolean nonNull(Object boj) {
+ return Objects.nonNull(boj);
+ }
+
+ public static boolean isNotEmpty(Integer integer) {
+ return Objects.nonNull(integer) && integer > 0;
+ }
+
+ public static boolean isEmpty(String str) {
+ return !isNotEmpty(str);
+ }
+
+ public static boolean isEmpty(Integer integer) {
+ return !isNotEmpty(integer);
+ }
+
+ public static boolean isEmptyArr(Set> strArr) {
+ return strArr.size() == 0;
+ }
+
+ public static boolean isNumericString(String code) {
+ return code.matches("[0-9]+");
+ }
+
+ public static boolean isAnyEmpty(String... strings) {
+ return Arrays.stream(strings).anyMatch(StringUtils::isEmpty);
+ }
+
+ public static boolean isAllNotEmpty(String... strings) {
+ return Arrays.stream(strings).noneMatch(StringUtils::isEmpty);
+ }
+
+ public static String joinWithDelimiter(String delimiter, String... values) {
+
+ List elements = Arrays.asList(values);
+
+ StringBuilder sb = new StringBuilder();
+ elements.forEach(s -> {
+ String str = StringUtils.isNotEmpty(s) ? s.trim() : "";
+
+ if (sb.length() > 0) {
+ sb.append(delimiter);
+ }
+ sb.append(str);
+ });
+ return sb.toString();
+ }
+
+ public static String booleanToStr(Boolean bol) {
+ return String.valueOf(bol);
+ }
+
+ public static boolean isNotEmpty(Object obj) {
+ return Objects.nonNull(obj);
+ }
+
+ public static String trim(String str) {
+ return str.trim();
+ }
+
+// public static String objectToJson(Object obj) {
+// return toJson(obj);
+// }
+
+// public static String toJson(Object obj) {
+// Gson gson = new GsonBuilder()
+// .registerTypeAdapterFactory(HibernateProxyTypeAdapter.FACTORY)
+// .create();
+// return gson.toJson(obj);
+// }
+
+ public static String randomString() {
+ return String.valueOf(ThreadLocalRandom.current().nextLong(100000000000L, 899999999999L));
+ }
+
+ public static Long getRecordId(Long previousId) {
+ Long i = previousId == null ? 0 : previousId;
+ i=i+1;
+ return i;
+ }
+
+ /**
+ * A common method for all enums since they can't have another base class
+ * @param Enum type
+ * @param c enum type. All enums must be all caps.
+ * @param string case insensitive
+ * @return corresponding enum, or null
+ */
+ public static > T getEnumFromString(Class c, String string) {
+ if( c != null && string != null ) {
+ try {
+ return Enum.valueOf(c, string.trim().toUpperCase());
+ } catch(IllegalArgumentException ex) {
+ }
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/codejam/demo/validator/ScheduleValidator.java b/src/main/java/com/codejam/demo/validator/ScheduleValidator.java
new file mode 100644
index 0000000..113ded3
--- /dev/null
+++ b/src/main/java/com/codejam/demo/validator/ScheduleValidator.java
@@ -0,0 +1,38 @@
+package com.codejam.demo.validator;
+
+import com.codejam.demo.model.Schedule;
+import com.codejam.demo.service.ScheduleService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+import org.springframework.validation.Errors;
+import org.springframework.validation.Validator;
+
+import java.util.Optional;
+
+import static com.codejam.demo.constants.MessageConstants.SCHEDULE_EXIST;
+import static org.apache.logging.log4j.util.Strings.isNotEmpty;
+
+@Component
+@RequiredArgsConstructor
+public class ScheduleValidator implements Validator {
+
+ private final ScheduleService service;
+
+ @Override
+ public boolean supports(Class> clazz) {
+ return Schedule.class.isAssignableFrom(clazz);
+ }
+
+ @Override
+ public void validate(Object target, Errors error) {
+ Schedule schedule = (Schedule) target;
+
+ if (isNotEmpty(schedule.getEvent_name())) {
+ Optional schedule1 = service.findByVenue(schedule.getEvent_name());
+ if (schedule1.isPresent()) {
+ error.rejectValue("venue", null, SCHEDULE_EXIST);
+ }
+ }
+ }
+
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 9deaf3e..d0db38a 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -7,4 +7,9 @@ spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
#logging level
-logging.level.org.springframework.web=DEBUG
\ No newline at end of file
+logging.level.org.springframework.web=DEBUG
+
+
+#Microservice
+demoService: ${demoServiceBaseUrl:https://jsonplaceholder.typicode.com/todos/1/}
+spring.cloud.compatibility-verifier.enabled=false
\ No newline at end of file
diff --git a/target/classes/Data.sql b/target/classes/Data.sql
new file mode 100644
index 0000000..4156517
--- /dev/null
+++ b/target/classes/Data.sql
@@ -0,0 +1,10 @@
+DROP TABLE IF EXISTS PERSONAL_INFORMATION;
+CREATE TABLE PERSONAL_INFORMATION (id int,real_name varchar(50),idol_name varchar(60),address varchar(255),idol_status varchar(25));
+DROP TABLE IF EXISTS SCHEDULE;
+CREATE TABLE SCHEDULE (id int,venue varchar(50),event_name varchar(60),date_time varchar(50));
+DROP TABLE IF EXISTS REVENUE;
+CREATE TABLE REVENUE (id int,monthly_rate varchar(50),event_name varchar(60),date_time varchar(50));
+
+INSERT INTO PERSONAL_INFORMATION (id, real_name, idol_name, address, idol_status) VALUES ('1', 'rahimi', 'remy', 'Malaysia', 'ACTIVE');
+INSERT INTO SCHEDULE (id, venue, event_name, date_time) VALUES ('1', 'Stadium Bukit Jalil', 'World Tour-2025', '27/05/2025 08:47:59.751000000');
+INSERT INTO REVENUE (id, monthly_rate, date_time) VALUES ('1', '1000000', '27/05/2025 08:47:59.751000000');
\ No newline at end of file
diff --git a/target/classes/application.properties b/target/classes/application.properties
new file mode 100644
index 0000000..d0db38a
--- /dev/null
+++ b/target/classes/application.properties
@@ -0,0 +1,15 @@
+
+#Database H2 config
+spring.datasource.url=jdbc:h2:mem:testdb
+spring.h2.console.enabled=true
+spring.jpa.hibernate.ddl-auto=none
+spring.jpa.show-sql=true
+spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
+
+#logging level
+logging.level.org.springframework.web=DEBUG
+
+
+#Microservice
+demoService: ${demoServiceBaseUrl:https://jsonplaceholder.typicode.com/todos/1/}
+spring.cloud.compatibility-verifier.enabled=false
\ No newline at end of file
diff --git a/target/classes/com/codejam/demo/DemoApplication.class b/target/classes/com/codejam/demo/DemoApplication.class
new file mode 100644
index 0000000..55445b2
Binary files /dev/null and b/target/classes/com/codejam/demo/DemoApplication.class differ
diff --git a/target/classes/com/codejam/demo/config/FeignConfig$CustomErrorDecoder.class b/target/classes/com/codejam/demo/config/FeignConfig$CustomErrorDecoder.class
new file mode 100644
index 0000000..b7eb1ba
Binary files /dev/null and b/target/classes/com/codejam/demo/config/FeignConfig$CustomErrorDecoder.class differ
diff --git a/target/classes/com/codejam/demo/config/FeignConfig.class b/target/classes/com/codejam/demo/config/FeignConfig.class
new file mode 100644
index 0000000..5296cb9
Binary files /dev/null and b/target/classes/com/codejam/demo/config/FeignConfig.class differ
diff --git a/target/classes/com/codejam/demo/constants/MessageConstants.class b/target/classes/com/codejam/demo/constants/MessageConstants.class
new file mode 100644
index 0000000..ae1b5cb
Binary files /dev/null and b/target/classes/com/codejam/demo/constants/MessageConstants.class differ
diff --git a/target/classes/com/codejam/demo/constants/ResponseStatus.class b/target/classes/com/codejam/demo/constants/ResponseStatus.class
new file mode 100644
index 0000000..52c7492
Binary files /dev/null and b/target/classes/com/codejam/demo/constants/ResponseStatus.class differ
diff --git a/target/classes/com/codejam/demo/controller/DemoController.class b/target/classes/com/codejam/demo/controller/DemoController.class
new file mode 100644
index 0000000..e562b33
Binary files /dev/null and b/target/classes/com/codejam/demo/controller/DemoController.class differ
diff --git a/target/classes/com/codejam/demo/controller/PersonalInformationController.class b/target/classes/com/codejam/demo/controller/PersonalInformationController.class
new file mode 100644
index 0000000..575e43f
Binary files /dev/null and b/target/classes/com/codejam/demo/controller/PersonalInformationController.class differ
diff --git a/target/classes/com/codejam/demo/controller/RevenueController.class b/target/classes/com/codejam/demo/controller/RevenueController.class
new file mode 100644
index 0000000..cf71af1
Binary files /dev/null and b/target/classes/com/codejam/demo/controller/RevenueController.class differ
diff --git a/target/classes/com/codejam/demo/controller/ScheduleController.class b/target/classes/com/codejam/demo/controller/ScheduleController.class
new file mode 100644
index 0000000..bd98086
Binary files /dev/null and b/target/classes/com/codejam/demo/controller/ScheduleController.class differ
diff --git a/target/classes/com/codejam/demo/dto/ScheduleDto.class b/target/classes/com/codejam/demo/dto/ScheduleDto.class
new file mode 100644
index 0000000..2514bb7
Binary files /dev/null and b/target/classes/com/codejam/demo/dto/ScheduleDto.class differ
diff --git a/target/classes/com/codejam/demo/dto/ServiceDto.class b/target/classes/com/codejam/demo/dto/ServiceDto.class
new file mode 100644
index 0000000..95482f2
Binary files /dev/null and b/target/classes/com/codejam/demo/dto/ServiceDto.class differ
diff --git a/target/classes/com/codejam/demo/enums/RecordStatus.class b/target/classes/com/codejam/demo/enums/RecordStatus.class
new file mode 100644
index 0000000..bfde985
Binary files /dev/null and b/target/classes/com/codejam/demo/enums/RecordStatus.class differ
diff --git a/target/classes/com/codejam/demo/exception/ApiError.class b/target/classes/com/codejam/demo/exception/ApiError.class
new file mode 100644
index 0000000..f1f4211
Binary files /dev/null and b/target/classes/com/codejam/demo/exception/ApiError.class differ
diff --git a/target/classes/com/codejam/demo/exception/ResourceNotFoundException.class b/target/classes/com/codejam/demo/exception/ResourceNotFoundException.class
new file mode 100644
index 0000000..e9e719a
Binary files /dev/null and b/target/classes/com/codejam/demo/exception/ResourceNotFoundException.class differ
diff --git a/target/classes/com/codejam/demo/helper/GetListHelper.class b/target/classes/com/codejam/demo/helper/GetListHelper.class
new file mode 100644
index 0000000..62431ad
Binary files /dev/null and b/target/classes/com/codejam/demo/helper/GetListHelper.class differ
diff --git a/target/classes/com/codejam/demo/model/PersonalInformation.class b/target/classes/com/codejam/demo/model/PersonalInformation.class
new file mode 100644
index 0000000..d232f8f
Binary files /dev/null and b/target/classes/com/codejam/demo/model/PersonalInformation.class differ
diff --git a/target/classes/com/codejam/demo/model/Revenue.class b/target/classes/com/codejam/demo/model/Revenue.class
new file mode 100644
index 0000000..577d1a6
Binary files /dev/null and b/target/classes/com/codejam/demo/model/Revenue.class differ
diff --git a/target/classes/com/codejam/demo/model/Schedule.class b/target/classes/com/codejam/demo/model/Schedule.class
new file mode 100644
index 0000000..6cd0cba
Binary files /dev/null and b/target/classes/com/codejam/demo/model/Schedule.class differ
diff --git a/target/classes/com/codejam/demo/repository/DemoServiceRepositiry.class b/target/classes/com/codejam/demo/repository/DemoServiceRepositiry.class
new file mode 100644
index 0000000..41ff12d
Binary files /dev/null and b/target/classes/com/codejam/demo/repository/DemoServiceRepositiry.class differ
diff --git a/target/classes/com/codejam/demo/repository/PersonalInformationRepository.class b/target/classes/com/codejam/demo/repository/PersonalInformationRepository.class
new file mode 100644
index 0000000..e83bf00
Binary files /dev/null and b/target/classes/com/codejam/demo/repository/PersonalInformationRepository.class differ
diff --git a/target/classes/com/codejam/demo/repository/RevenueRepository.class b/target/classes/com/codejam/demo/repository/RevenueRepository.class
new file mode 100644
index 0000000..9789bee
Binary files /dev/null and b/target/classes/com/codejam/demo/repository/RevenueRepository.class differ
diff --git a/target/classes/com/codejam/demo/repository/ScheduleRepository.class b/target/classes/com/codejam/demo/repository/ScheduleRepository.class
new file mode 100644
index 0000000..462b7b5
Binary files /dev/null and b/target/classes/com/codejam/demo/repository/ScheduleRepository.class differ
diff --git a/target/classes/com/codejam/demo/service/BaseService.class b/target/classes/com/codejam/demo/service/BaseService.class
new file mode 100644
index 0000000..852a482
Binary files /dev/null and b/target/classes/com/codejam/demo/service/BaseService.class differ
diff --git a/target/classes/com/codejam/demo/service/RevenueService.class b/target/classes/com/codejam/demo/service/RevenueService.class
new file mode 100644
index 0000000..123e4b4
Binary files /dev/null and b/target/classes/com/codejam/demo/service/RevenueService.class differ
diff --git a/target/classes/com/codejam/demo/service/ScheduleService.class b/target/classes/com/codejam/demo/service/ScheduleService.class
new file mode 100644
index 0000000..85e9bb1
Binary files /dev/null and b/target/classes/com/codejam/demo/service/ScheduleService.class differ
diff --git a/target/classes/com/codejam/demo/serviceImplementation/ScheduleServiceImplementation.class b/target/classes/com/codejam/demo/serviceImplementation/ScheduleServiceImplementation.class
new file mode 100644
index 0000000..6f908ab
Binary files /dev/null and b/target/classes/com/codejam/demo/serviceImplementation/ScheduleServiceImplementation.class differ
diff --git a/target/classes/com/codejam/demo/utils/CommonDataHelper.class b/target/classes/com/codejam/demo/utils/CommonDataHelper.class
new file mode 100644
index 0000000..380768a
Binary files /dev/null and b/target/classes/com/codejam/demo/utils/CommonDataHelper.class differ
diff --git a/target/classes/com/codejam/demo/utils/PaginatedResponse.class b/target/classes/com/codejam/demo/utils/PaginatedResponse.class
new file mode 100644
index 0000000..a6913f0
Binary files /dev/null and b/target/classes/com/codejam/demo/utils/PaginatedResponse.class differ
diff --git a/target/classes/com/codejam/demo/utils/PaginationParameters.class b/target/classes/com/codejam/demo/utils/PaginationParameters.class
new file mode 100644
index 0000000..36a05ed
Binary files /dev/null and b/target/classes/com/codejam/demo/utils/PaginationParameters.class differ
diff --git a/target/classes/com/codejam/demo/utils/Response.class b/target/classes/com/codejam/demo/utils/Response.class
new file mode 100644
index 0000000..392ad2a
Binary files /dev/null and b/target/classes/com/codejam/demo/utils/Response.class differ
diff --git a/target/classes/com/codejam/demo/utils/ResponseBuilder$1.class b/target/classes/com/codejam/demo/utils/ResponseBuilder$1.class
new file mode 100644
index 0000000..5d740b6
Binary files /dev/null and b/target/classes/com/codejam/demo/utils/ResponseBuilder$1.class differ
diff --git a/target/classes/com/codejam/demo/utils/ResponseBuilder.class b/target/classes/com/codejam/demo/utils/ResponseBuilder.class
new file mode 100644
index 0000000..4a980dd
Binary files /dev/null and b/target/classes/com/codejam/demo/utils/ResponseBuilder.class differ
diff --git a/target/classes/com/codejam/demo/utils/ResponseType.class b/target/classes/com/codejam/demo/utils/ResponseType.class
new file mode 100644
index 0000000..4b5fc95
Binary files /dev/null and b/target/classes/com/codejam/demo/utils/ResponseType.class differ
diff --git a/target/classes/com/codejam/demo/utils/StringUtils.class b/target/classes/com/codejam/demo/utils/StringUtils.class
new file mode 100644
index 0000000..68b4161
Binary files /dev/null and b/target/classes/com/codejam/demo/utils/StringUtils.class differ
diff --git a/target/classes/com/codejam/demo/validator/ScheduleValidator.class b/target/classes/com/codejam/demo/validator/ScheduleValidator.class
new file mode 100644
index 0000000..3a569be
Binary files /dev/null and b/target/classes/com/codejam/demo/validator/ScheduleValidator.class differ
diff --git a/target/test-classes/com/codejam/demo/DemoApplicationTests.class b/target/test-classes/com/codejam/demo/DemoApplicationTests.class
new file mode 100644
index 0000000..0f6ea62
Binary files /dev/null and b/target/test-classes/com/codejam/demo/DemoApplicationTests.class differ