From c94c7b1b49a3c5ffcee104b9005484c5e1d1a434 Mon Sep 17 00:00:00 2001 From: APU_Mahfuzul Date: Fri, 6 May 2022 19:44:45 +0600 Subject: [PATCH 1/2] Models and controller --- .idea/.gitignore | 8 + .idea/compiler.xml | 19 +++ .idea/encodings.xml | 6 + .idea/jarRepositories.xml | 20 +++ .idea/misc.xml | 12 ++ .idea/uiDesigner.xml | 124 ++++++++++++++ .idea/vcs.xml | 6 + pom.xml | 10 ++ .../demo/constants/MessageConstants.java | 14 ++ .../demo/constants/ResponseStatus.java | 8 + .../PersonalInformationController.java | 49 ++++++ .../demo/controller/RevenueController.java | 49 ++++++ .../demo/controller/ScheduleController.java | 151 ++++++++++++++++++ .../com/codejam/demo/dto/ScheduleDto.java | 44 +++++ .../com/codejam/demo/enums/RecordStatus.java | 18 +++ .../com/codejam/demo/exception/ApiError.java | 31 ++++ .../exception/ResourceNotFoundException.java | 29 ++++ .../codejam/demo/helper/GetListHelper.java | 135 ++++++++++++++++ .../demo/model/PersonalInformation.java | 37 +++++ .../java/com/codejam/demo/model/Revenue.java | 31 ++++ .../java/com/codejam/demo/model/Schedule.java | 34 ++++ .../PersonalInformationRepository.java | 9 ++ .../demo/repository/RevenueRepository.java | 9 ++ .../demo/repository/ScheduleRepository.java | 19 +++ .../com/codejam/demo/service/BaseService.java | 9 ++ .../service/PersonalInformationService.java | 6 + .../codejam/demo/service/RevenueService.java | 6 + .../codejam/demo/service/ScheduleService.java | 26 +++ .../ScheduleServiceImplementation.java | 82 ++++++++++ .../codejam/demo/utils/CommonDataHelper.java | 30 ++++ .../codejam/demo/utils/PaginatedResponse.java | 14 ++ .../demo/utils/PaginationParameters.java | 20 +++ .../java/com/codejam/demo/utils/Response.java | 7 + .../codejam/demo/utils/ResponseBuilder.java | 75 +++++++++ .../com/codejam/demo/utils/ResponseType.java | 6 + .../com/codejam/demo/utils/StringUtils.java | 112 +++++++++++++ .../demo/validator/ScheduleValidator.java | 38 +++++ target/classes/Data.sql | 10 ++ target/classes/application.properties | 10 ++ .../com/codejam/demo/DemoApplication.class | Bin 0 -> 733 bytes .../demo/constants/MessageConstants.class | Bin 0 -> 748 bytes .../demo/constants/ResponseStatus.class | Bin 0 -> 432 bytes .../demo/controller/DemoController.class | Bin 0 -> 854 bytes .../PersonalInformationController.class | Bin 0 -> 2770 bytes .../demo/controller/RevenueController.class | Bin 0 -> 2571 bytes .../demo/controller/ScheduleController.class | Bin 0 -> 2596 bytes .../com/codejam/demo/dto/ScheduleDto.class | Bin 0 -> 3853 bytes .../com/codejam/demo/enums/RecordStatus.class | Bin 0 -> 1533 bytes .../com/codejam/demo/exception/ApiError.class | Bin 0 -> 2835 bytes .../exception/ResourceNotFoundException.class | Bin 0 -> 1283 bytes .../codejam/demo/helper/GetListHelper.class | Bin 0 -> 8829 bytes .../demo/model/PersonalInformation.class | Bin 0 -> 4019 bytes .../com/codejam/demo/model/Revenue.class | Bin 0 -> 2768 bytes .../com/codejam/demo/model/Schedule.class | Bin 0 -> 3178 bytes .../PersonalInformationRepository.class | Bin 0 -> 475 bytes .../demo/repository/RevenueRepository.class | Bin 0 -> 439 bytes .../demo/repository/ScheduleRepository.class | Bin 0 -> 1091 bytes .../codejam/demo/service/BaseService.class | Bin 0 -> 460 bytes .../demo/service/ScheduleService.class | Bin 0 -> 1434 bytes .../ScheduleServiceImplementation.class | Bin 0 -> 6130 bytes .../codejam/demo/utils/CommonDataHelper.class | Bin 0 -> 1782 bytes .../demo/utils/PaginatedResponse.class | Bin 0 -> 1946 bytes .../demo/utils/PaginationParameters.class | Bin 0 -> 1471 bytes .../com/codejam/demo/utils/Response.class | Bin 0 -> 164 bytes .../demo/utils/ResponseBuilder$1.class | Bin 0 -> 746 bytes .../codejam/demo/utils/ResponseBuilder.class | Bin 0 -> 5900 bytes .../com/codejam/demo/utils/ResponseType.class | Bin 0 -> 1162 bytes .../com/codejam/demo/utils/StringUtils.class | Bin 0 -> 5035 bytes .../demo/validator/ScheduleValidator.class | Bin 0 -> 2024 bytes .../codejam/demo/DemoApplicationTests.class | Bin 0 -> 531 bytes 70 files changed, 1323 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 .idea/vcs.xml create mode 100644 src/main/java/com/codejam/demo/constants/MessageConstants.java create mode 100644 src/main/java/com/codejam/demo/constants/ResponseStatus.java create mode 100644 src/main/java/com/codejam/demo/controller/PersonalInformationController.java create mode 100644 src/main/java/com/codejam/demo/controller/RevenueController.java create mode 100644 src/main/java/com/codejam/demo/controller/ScheduleController.java create mode 100644 src/main/java/com/codejam/demo/dto/ScheduleDto.java create mode 100644 src/main/java/com/codejam/demo/enums/RecordStatus.java create mode 100644 src/main/java/com/codejam/demo/exception/ApiError.java create mode 100644 src/main/java/com/codejam/demo/exception/ResourceNotFoundException.java create mode 100644 src/main/java/com/codejam/demo/helper/GetListHelper.java create mode 100644 src/main/java/com/codejam/demo/model/PersonalInformation.java create mode 100644 src/main/java/com/codejam/demo/model/Revenue.java create mode 100644 src/main/java/com/codejam/demo/model/Schedule.java create mode 100644 src/main/java/com/codejam/demo/repository/PersonalInformationRepository.java create mode 100644 src/main/java/com/codejam/demo/repository/RevenueRepository.java create mode 100644 src/main/java/com/codejam/demo/repository/ScheduleRepository.java create mode 100644 src/main/java/com/codejam/demo/service/BaseService.java create mode 100644 src/main/java/com/codejam/demo/service/PersonalInformationService.java create mode 100644 src/main/java/com/codejam/demo/service/RevenueService.java create mode 100644 src/main/java/com/codejam/demo/service/ScheduleService.java create mode 100644 src/main/java/com/codejam/demo/serviceImplementation/ScheduleServiceImplementation.java create mode 100644 src/main/java/com/codejam/demo/utils/CommonDataHelper.java create mode 100644 src/main/java/com/codejam/demo/utils/PaginatedResponse.java create mode 100644 src/main/java/com/codejam/demo/utils/PaginationParameters.java create mode 100644 src/main/java/com/codejam/demo/utils/Response.java create mode 100644 src/main/java/com/codejam/demo/utils/ResponseBuilder.java create mode 100644 src/main/java/com/codejam/demo/utils/ResponseType.java create mode 100644 src/main/java/com/codejam/demo/utils/StringUtils.java create mode 100644 src/main/java/com/codejam/demo/validator/ScheduleValidator.java create mode 100644 target/classes/Data.sql create mode 100644 target/classes/application.properties create mode 100644 target/classes/com/codejam/demo/DemoApplication.class create mode 100644 target/classes/com/codejam/demo/constants/MessageConstants.class create mode 100644 target/classes/com/codejam/demo/constants/ResponseStatus.class create mode 100644 target/classes/com/codejam/demo/controller/DemoController.class create mode 100644 target/classes/com/codejam/demo/controller/PersonalInformationController.class create mode 100644 target/classes/com/codejam/demo/controller/RevenueController.class create mode 100644 target/classes/com/codejam/demo/controller/ScheduleController.class create mode 100644 target/classes/com/codejam/demo/dto/ScheduleDto.class create mode 100644 target/classes/com/codejam/demo/enums/RecordStatus.class create mode 100644 target/classes/com/codejam/demo/exception/ApiError.class create mode 100644 target/classes/com/codejam/demo/exception/ResourceNotFoundException.class create mode 100644 target/classes/com/codejam/demo/helper/GetListHelper.class create mode 100644 target/classes/com/codejam/demo/model/PersonalInformation.class create mode 100644 target/classes/com/codejam/demo/model/Revenue.class create mode 100644 target/classes/com/codejam/demo/model/Schedule.class create mode 100644 target/classes/com/codejam/demo/repository/PersonalInformationRepository.class create mode 100644 target/classes/com/codejam/demo/repository/RevenueRepository.class create mode 100644 target/classes/com/codejam/demo/repository/ScheduleRepository.class create mode 100644 target/classes/com/codejam/demo/service/BaseService.class create mode 100644 target/classes/com/codejam/demo/service/ScheduleService.class create mode 100644 target/classes/com/codejam/demo/serviceImplementation/ScheduleServiceImplementation.class create mode 100644 target/classes/com/codejam/demo/utils/CommonDataHelper.class create mode 100644 target/classes/com/codejam/demo/utils/PaginatedResponse.class create mode 100644 target/classes/com/codejam/demo/utils/PaginationParameters.class create mode 100644 target/classes/com/codejam/demo/utils/Response.class create mode 100644 target/classes/com/codejam/demo/utils/ResponseBuilder$1.class create mode 100644 target/classes/com/codejam/demo/utils/ResponseBuilder.class create mode 100644 target/classes/com/codejam/demo/utils/ResponseType.class create mode 100644 target/classes/com/codejam/demo/utils/StringUtils.class create mode 100644 target/classes/com/codejam/demo/validator/ScheduleValidator.class create mode 100644 target/test-classes/com/codejam/demo/DemoApplicationTests.class 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..ea8522d 100644 --- a/pom.xml +++ b/pom.xml @@ -71,6 +71,16 @@ reactor-test test + + com.vaadin.external.google + android-json + 0.0.20131108.vaadin1 + + + jakarta.validation + jakarta.validation-api + 2.0.2 + 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..b6cd389 --- /dev/null +++ b/src/main/java/com/codejam/demo/controller/ScheduleController.java @@ -0,0 +1,151 @@ +package com.codejam.demo.controller; + +import com.codejam.demo.dto.ScheduleDto; +import com.codejam.demo.enums.RecordStatus; +import com.codejam.demo.exception.ResourceNotFoundException; +import com.codejam.demo.model.Schedule; +import com.codejam.demo.repository.ScheduleRepository; +import com.codejam.demo.service.ScheduleService; +import com.codejam.demo.utils.CommonDataHelper; +import com.codejam.demo.utils.PaginatedResponse; +import com.codejam.demo.validator.ScheduleValidator; +import lombok.RequiredArgsConstructor; +import org.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + +import static com.codejam.demo.constants.MessageConstants.SCHEDULE_SAVE; +import static com.codejam.demo.constants.MessageConstants.SCHEDULE_UPDATE; +import static com.codejam.demo.utils.ResponseBuilder.success; +import static org.springframework.http.ResponseEntity.ok; + +@RestController +@RequiredArgsConstructor +@RequestMapping(path = "demo") +public class ScheduleController { + + @Autowired + private ScheduleRepository scheduleRepository; + + @GetMapping("/schedule/all") + public List getAllSchedule() { + return scheduleRepository.findAll(); + } + + @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/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/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..530e0e1 --- /dev/null +++ b/src/main/java/com/codejam/demo/service/RevenueService.java @@ -0,0 +1,6 @@ +/* +package com.codejam.demo.service; + +public interface RevenueService { +} +*/ 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/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..9deaf3e --- /dev/null +++ b/target/classes/application.properties @@ -0,0 +1,10 @@ + +#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 \ 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 0000000000000000000000000000000000000000..81a8f534c236fac4be799d7d9bf4afac27a5805a GIT binary patch literal 733 zcmah{OHbQC5dJnKIE1v&@P<|@oI(!WOT{G!sRVH{4-u3edRjY++0@>R*6WtP)l(4% zen5Xz)mejtg(B6GXEd*GcD|WEe;*zJe8z_sYM2X9Z=->EhUJO)A$Tfu!Y`tUj2*-L zq0-77G0b)MM**4)A7hj8*o@^wWPB_$!%s+jnNCv`3#W{3p@qc&?Ka-vEkn=Pgy&PM zbaG=wCVv|HokzwvJ}jM;O6p<@%@B3NmzNAuk>~wy70=Llu>O8H3pqC0$vejfM&GEU zup&xjr3JZtxX(}@&MG_goW!YXe+JL~RNuF$l|0K=|=B2*sn6Y zOwxxzCGSYKpAyi)3Rw$S#TtS5;)4Ud&Rf-ZLkW5Y@+8Lm?(6=AZe`ne+S4%`JfUcvV6M*&=df3Axw zh*0?GcusUe$i9AK7NHQ1Eq|t3zAdL>rrL7mGk9SnyeL$^$}kiY*-H|HiqZS5^+&q) z&FGpMp{75~FrvWmCLg#c5tzb_rGg5fX;_!ij$PRa#hgQIS={@3?7G*4%~jLUS-(5f z6l@XND@A-|i)dX_U1_w7FUC;8Hlez(PlM1(>L0aJNfh^P+JxOi@Q;~XkDr^btvj9^#IvyshGOh;rl$Lra7__7 z3%*b0qDvQM`nb;m3g`KRJuWJL{W#w^$nvQRE*36wtsElt9>E%Am|#P4Oo4 z(-ha3pQU(*c{jy%=4Ogp+?f`ClH(pvP?rqkkA8uEE=TS!Z4k#S4mg&%gbUDNli>3U Ijv2iC3zq=0R{#J2 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..52c749237ea69fe446c34c8f88cc346294a81cf5 GIT binary patch literal 432 zcma)&Jx{|h5Qbm3%?F{SrR8&EqaZa48;B(;Q$(c%vOBI-9OVN!4*!b@iGd%$k3w9c zO2Ee8SNGicJ>U8B>-_`36;3?#(04Ex!h+2($@mNRb6#%zRhmg*80;HWDs#)wKc6QK zT!y)*3SU%fneoD3%c3GEYr{)Z`;n}l31n=zX=(;1ehh+T95YPApWd<2s@z;NjDoE* z;dvunjL1|zTCI3!{?BJJV$8y1&h8UO$Q literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e562b336303252cf58dbaf871e03a2ba1ba78a59 GIT binary patch literal 854 zcmb7C%Wl*#6g{5KgAPO6nc-Dl61%n(yy*g|RRt;qAq9}yG81C>zT+;Z#Rn zpuK0T@%sWx8=IpJE(vT!St_G!tfwlKW1VIM*1If8w3E+>4`xuHA8Y@X1Sh)iN4h8z zQa;$&3^EtXB6r5d@108ZY34r2iTAnWp**vNKD6HWFS`QG14;?32FB{wWg2RCqQZop zL6Ai%87XHfeC}-ei75oOgT;fSM)&Y@q;qd5+`&L#IIqKOM_~Eb#8&yzQT)l`IqU^< zwwKoHSi9YQimo4(%rVs?Qy3=j)Y{CeItGEAe-`LehcYyFEY<9+e4+g-mFFyERjXY2 z3Dc1!Oa9Qa<^;!C=_38yR5cs^-JeHQWCD*DR%3VkyuDQXpQ|5B-o6lQ^>%O{9lpWp ztL9~N(Zpq1+YtQe6<_PU9_M!L>EjCR-q|izuu8PX(WIx3A*}|k;u_Z#daiTacn4A7 vCM~{l&K1ApTJg8GzC(PgFU=*o7bIHe5)G`^r*75M1B%=xzC)5T`n!JsvE1Uw literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..575e43fdd4101221eb036ca8f2500afc0c206330 GIT binary patch literal 2770 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6db7ccceda0e060d4ffbd87d7e40f06add85273d GIT binary patch literal 2596 zcmbVNT~ixX7=BKGhL4a^zG|(ufZ8Th*=nJpAQfn-XedY=ZoF_#Hixiuvm5sVWIFyH zZ*j&Mr(QT-`=cD6v)N>qCZ*AfWcTcOKc4q_pYxu-|M}xj0E;LOA%ngw`g0h-6@dlQ ztsACWRmZY!R8`&O!U;Urwv}g;%_CI}ZME6{BrxvBANN(m^{v45&IIn4I>LDE?RJ>N zV`T(`7|LQehY{qup}5ptAbV&z)pgq@o{f?ObYb-@!9~lV7_{ zgRcFp9B$xkfnjc_Ks5nQbxU%P#XABMQHfEiCqJ1gLOO_B0#~-AWvl8SW*Dp-nx^vo z!_Xea9Nx>~{Tx2P9f7gLy;(RNS1rd1)&%+r#RGvG`=Jw9b#-9*R>fB9j^hSW^Wh6D zmt3!A_zll;YKNYzt5er|Zd8S^|b_I~eO>;GSBZs;&s+Ybs!yT0$b9o8&^^ zYRPicv#?%K-glDu*vFD1mR`pn`-3Bk0J_NQQk63CP}!!s{Sl6cTpB|4Yztm z7V=@EDuWacV@Vg9TeNA;j)bebmoz>a9pykDVTKo!=Tu5h?U};8(Q+Wo=ah4N25%*q zU$j{KfkNPIp+^^Wo%*VWkQ;iY+Tv6axZVPn+#m~j6uoYybUR!7WF>JY!0zLyyKBU0 zay0uJ6dQ+-zUVN^n{bYoBF~q;3;Ddum3|iDXAwE{VLrMzNgAKS^S?p7L{{LOs|@bN zmOv37@;%qI!be!(%7|?4M{)Dq`Ix^?zK8JffNzUfVqP8n5hG>z9MRG5y~JpyBm6=X ze!6KEho=J`;!}oNrt^T{qLuTrE;&EP3io;23an}%KJ5j*z#94^6dN&$e2n5+27h7d z)jA)ffaKdi@~q*@1jr*M(q!tQ*LAL_=#2;fxf9srroiL>n0xvE=YH~P?kzlx>po@O zeZ(^v*L^*MUy$7yfA@U+_Bm0q>lnpN+URaivu7agVHP&Zs`IS-8a5(iGqlO`_Z7CI zMoqT)nT#9tHGQ+l>|}AXFWt2kS&2fv>F8F8Sa_TBUu(wTQ)3&L{~fcx@+B?CnFvl( bi~})<40a-`XHjRyX}`<$9)o-vb!Y!yG7*cL literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2514bb7db82b690f1e7dc40d5649fd8bcb1ff7cd GIT binary patch literal 3853 zcma)9>vJ2`75`m%SG$tev14N=N<-s30Nb)7nx;u3CuwTp7uZRP!8G&{*3!mSq8HLC zXRb*#1-PF3*~}; zR-tcVay;Nhewb+JIFgHDaIj=A}F}ZThz2RnxZh14aT=u<9uQn@o zb~zZt5ZAirw_LbVpvu@p4~@WuVFx34NMV5J^EbS*f2Hh}JcWn0Sy}UIh4Q90GUi|p z_ELdHq6(u?8=-t)VxNPbhzXk}*1dAW6JH;8@Kb@Y2@^7Hj5|0ek`5)$yS{hDFO;+nK?e6^$W#1 zBbBREZ(XWYs$R`6cw{^lJ;lY1YhKQujl?eGOs*$*gc%1%kx}Tchw0X_9*Kyzk|WYT zb8rklXBrvg1_L}Ckqg5mV!v>3Ld23@I~l_MrGrz#9&X!;oL*tp!D*afG;?lw{>6q{ zlro7JX!-rTg#K3!&PmDbVw59glEfUIuyEeNyg&_gYAn!Z{dxjj7mR)K7?#JfgC`|t zqfxYob8}d6u!;+GZp*E2J;AEh4X|wClER*jl^_UnjY2W+)snaf!^WDz-j<7Oriu3H z3;8o5@~ne(JV(#mYSk;V(r2QlZdG9<5ZjEfo-g9EKs?{2*^1YXYTEcc4>UcllX=F* zAK4JoK@X9TIMBD5yy>o_FBs*6=HVXOaYi6XR;FQc{?oSh>$wn4R1y z(KUf)2^U0taHUZ8E;LFTUhNroqo|9pl5>meZml5iA=7U8tZ;BA`u4Fz@OJq#K?;X< zYV7o9Xw~z#D)~#Ubf)js>IyMYKFpzWzXS6${#Jn+@kUi*s<6-_O5HZ^3p=^as-zY( z!~bY=hPA-Xt@vABjh!L(kFgN*AC64=BR_X~WhagA}Ex(9Xn z3-qm|r<$;u7?5>$6Qi=Gn%FPvfhG>6Kh{{+_}qs$pL_T{O%Zh;_VRNxj{TUx!?@0! zu>cuGl=x=j5Xz{~&nn+cMK<{IB3)40m8U{i2JgY9E03&9rN6|Z5qrDPN0oybX#j^K zHU?2Ave>Y+HO3u28U&OxE^!sjczT+EpOA_{{7-TPzg{Li7JtVBsSu0uxS{|5@#<=^N}@X{)_&U@eOw0fisgbn)r1~Vj*i% zWFZ?*nIaSa2E%tSkTO&8h|przqR?X2PFW&kheB4$jtDJf6BJs?CQ}I!N`^v-RI(*x z+@;rjx}lT9aZ;Sa%cN|)&oS_KQVD#(HhP6r60g#a6BxAY@36~)`X9zD%<<1Axi=sa zKSH)f(oH7CkQ-f?=Tmf83fz=z$T@?-5j|&6->s&W_P#}L+G)O})68oaS!@|~n-CU( zszbA)`(j_V;8M48BqfIG69K*m;i$V-#jfpe18$XN6+%h*(Fmn;QyS+l4#wJvOMq zGxGiyk literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..bfde985e16c20433e657707c3598337b4da9741c GIT binary patch literal 1533 zcma)5YfsZ)6n@@y-A3tT8#h5z1xVb(C~n(sg|HCn=~9 zjfT(uDC0TpCdKe!P1@7hpDQQj!N&6fnG-gOj1K?1#D#8mX5p9ogWx}^*BB~!&C?O4m0npMqg z?;q(EC#zr(H^UfGF^pRj^U@$sSyS+1&1~x19|RsJedwI2H5yr;qU6|yRn7V%umjis zZ54NLm-1aTEW=q781TDlAq%N8Cw))F7{-aTsqO2gK(8-G!E*GfZf7Hq6-?oN7)hp` z5{O^YZW(cqf}c$rtWc0?CiFlcbsdju0;b9lbVZ;t_MwV7%yU=V$}|L$$y8^3p$fDy z!5j^kKu^)I^w-VWzHaYo`zC3Yuc4IcsOtiWV!fi7Wz9C&SIc40(rV;4;Y+Jkae>$? z-8rluywPm3adexK2|9-c31xzZe!{~>y#r0ZVQJKpu98u;Xbo)gd!?1_8mG!MCeM&Qh2$z`g2A>T>?&quxvfynkvT<_3*-4uxJ8o@ry`6Y ROx=_yQ!n35c_FrM&V0#<0i0xQV^k zN3*>q1dOKZEy((sz=0(2R-i)7z#9UG>u#%5cN=P5wn`1va!cx4O-#Fge$xuQ$zcNf zO}vEz0{wOAEZl2LTVOOcU`uDUbaiE2)q`^3Za)qQpj6A977d=kPYB z3=~XEqbN|=CL7)Gl13-o0=qkb4w0*Y&SqIdA2Ttlad%SoqH0R!a9R1jTvY=&j&}^a zYvMhe5E$$RkqKaKH``3isTa5xr7GbO)<|*3k+8* zM_p;RR+M)$;x$rn>(Z`CawX4rvromvo==o$Sjl9((%T!euSZQ_pz9giX*gjaqB_>g z=)q=()tQ8-CNsC4}ghEyiiL z7S#(!=MqPj7tcY#MStK%ttPO`maUbBoa`oa^0>g6_&@iFU6gbo!P?mGw-B6`U=ovL+ zQ`Q65d%(J7vb(Fll0za^iVQ4Dr(r99vf{cMZF=9ujz?5tr$_N7OFb$6>W7iZm+Qv2 zOIYqP^1QU|suiem9=tYQIMr*6*1En1HcZ^X-8@?1#kI{eN;IC%sJY}g%A2>P?>BhQ+%H0Fiqh@7}$Y1oIx6Ax$`6U z(tIBM72?igq$|@;U!^C-9AUd%zkBfZvV?P#fiCjMBYK&)*)FS^yXG=W097>93m^64peZo~% z5CEv~o5C_huFym(r0?>n=^rdk|AcJjVet=4{D5rwVexlNEYD0o!kghT^N>R6ka-^g zfWhZXsf??*#y$P-I&ScMl&q8Otb3)ggg zoth`7_%|1U}e1xO? z&OAXWjoV$ETzEdt7stIJRurCmSRhnnG(N-UL`&m~(Ds-3icf9vYwoSWf(?f|`Zd?Z IJ^0xB4_KVe6aWAK literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e9e719a2797c202a872c3da0281ce329bafc12b9 GIT binary patch literal 1283 zcmbVL+fEZv6kWSaTRRk6%2jRx0zyG1Mq*4bBnBjEYB5~;z>A)?M>^QfX=YBr-}0%6 z4}O3jW!z^v47Gt5XL4?xwbovHpWWYoe*OZmgKZlL45eXZkwl6xb1ANb(-hu?bKLQ? z+mdg;*JN9}$|Iy+yPm7}2t(@|6+?VrSQ)~^dg+#TqJ7u9*zF;P4I)b@-ht@joHl%Q zEvii!(H5%iQnZ}9Y$-?HWa%8s zKz00@EGvDeI$pgm|9l{QS2Qcq54av@?+*y{fiSYKyg&<2S46WTlU!Hx5W(8#5QJRG z^<=rzs!IRV26tMNJd(b5e!AiOO7kGWm8!sJ3<-ccn8`HxaJRQ;3iMN4Wn zPsr$-g7f9|ac)b@dQ~3hghcf@!9EF#a_AcS3-{J&+q41UQPevXH*h(@H=d`oFg?Vf zUzL=9;RJ2dBwvlAYvq4)u4UD!x?bH8G1lBfnu1v8kyB(GC^N?@8>h=q{~zW^_ICH|5uc0oTv$SlvM*@0nL z$YPFn*&YbIjwN8H695(4d-=i@H)Z{i##?Zw(#sP|0evB literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..62431ad9ef86776ff6ab8ee4931c81cacdf2a86a GIT binary patch literal 8829 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 tD0qO6QG_PuF_VE+ypD!U&Kr^}Kb9{FM$4oDZ}I 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e83bf0032727a9b5d745d86e1636e5afdebf7807 GIT binary patch literal 475 zcmbVJu}T9$5S@*hGtq#pt*ziTTF8lDBSa3A1nehwlVi`_onv-S$uH!SEc^gJN?cQz zpuxgo<_!$IH}B2+$LkvaoWm%Co`TDgoi4ee2A!_Ru@-7Mn8>ow4go^(DM zM~^0$nWY==Ij#Z>3Qo5g36X?2E?Uy-O!Abbf}K=*>1mLrEcG7j!(fF&I7rw}`$K?F DR!^M% literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9789bee876b138251562b1ad6299f13f4a7c70cc GIT binary patch literal 439 zcmbVJO-sW-5Pe&Cq+)8JH_?6Ci$*$-8dy-&R;kc$H z>4sdTr;D14kYK2ADZbKO>y4`(JXwAc|ENm}r0bS8LGN4o0aO^xOywx_o)w<6-_U9H zFW9SWOO}lqo3)~J@&Q5M2e*G%b|!S$gw@X)^6Z7q}3HnUYC|QWqDy)1Fm(>nPZgE6ZVW;>dsE zzz^U@F{~Z(0klI-96Yl0cHe5B-hTh_^&0>@hwTQ`7<59N@=!-O6e*7|)!bmFb7{31 z^B^2xR3zxnjv8>A!RAnm1W$yDxpy(d&^BO&!3%9-o@Yj?_|k|JKWX!kN5Tp|%)}z= zyG+ap8LVGQ6}=gsp(>C;tL4tw16#6n+moZh%7lBFm0F3UOV>C?JJ8XID63gCIfMFW z!qN<6tb{ELF&-_+_{#lDij;IoW-4@FQ_+nag$V~!Wf(-)(7QKE5$RM&#ZN?x;vzw6 zZJAK2yPEw!o& literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..852a4822fca20a5da209af2fb13767c2eaa6b72e GIT binary patch literal 460 zcma)3O;5r=5PefBg<1je1NCO21~|AEZV(TWaBB2`;l39*o9=KfoVl zoC=9XFJ_b3d2ioL-psy#yuJbG;lzc7k^|er7RrQ1D3?-1avq4=X{c3BC=blsmFd`%I~+y1wKVI;Gx-|>G}_N#Ev@UV*}yNkZM5t@H>1bfIX33cDh_01xl z>hw-dBW75wWHgbfDe#80^9Pd=F8u$@*C)8+WRWU8GDXM6kJ&GaA#lnzE#5NmVXvEv x*UWg2(STox?^^d6)NML1s6L_o$c%-3j>Xr2)ix?P;LKaAaflWp!VyOc$De2>YhM5W literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..85e9bb181917de78dddc10b7fa346654f40e5586 GIT binary patch literal 1434 zcmcIk&2H2%5FV$yNw-U(Ers%5phZeA)JqS@jos9%BwoeNO6A5A z@ID-P03Hf4PL?z@DTp3&;0oL?K=Rxf)@^01l&+2UMLx#(8Oark)Gn& zOoZGE!gJ2@mrVW-QQD=cR%cP3)Ie~cjT^lPc>y-ibr0A53i1FU58=@qvf2X^{TSC1Tn1W_Y$EI_ SJiC literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6f908ab6fb11eb9341698a3d79295f7fb538d8f0 GIT binary patch literal 6130 zcmcIo`FGUT8NJUQGccC1@vy|u5`zhNgE16Bf=L=6IC5?eJ zZIiC)O1kfRx}{sv1{0u7)9sg@{!Kl-Ptwe2M#7!LIsIWq(p$doe)rp+^soQic^kk% z{4;|Vw5E~L(1tYvy?MKs%i9HcSuf@avS{ZDo}HV`FUdmLl*c_=phf-l^$$$PmKM3s ztS%m1hqYLjMn*$BG=bx>^{#Z5jl7&HmP}ccmZy7$ZB_TrCd~?D99gnm!?T_10wZw{ zwdty)v(+7=?O2b_G`ciwK)1lY7^YRX3#43qSqkj#pT4Xw>p4@m7IUXBU6y%obRa&I z#zuh$V>;@2QXbf>VGAA*SidN}3fa#Y1%XZExu$8#^5mj)d@HtU*oJortX(jy!m;a9 zT-<+eRAtXFbEiv+VBH+;rti0Fco4k;tyC#6)*olG!SfXZeNhW#D<62PTq>CcF=en5 zeQE5{@DO$jbo;35)C#oQ&V=d8xh2QGDzHC!+UU$wg!HgmsXh| z>s&MIIfk`Z$7j_wX*?|OP%LDYq*;0!AaeUTU(H+9$b`8tFrG>qXG ziBYzWnWn(u{tJ<{p`r1SkUZb>${+$8#&Hc3m}Ep7mN&1MW^ncoOexGKG)&=rBo-5cz-LP^M34R_;YnZ_)rk*Qx zC%;t5K7m4l^yWo3hr)Nr84XY4ELo&+iVT5^{Y@zvjSyQ2!GxhG*)w{H*)K4svj2So z2ckw+WJEV4CHgr$lg4=!M$Za#)eDJQ0}aB?Xr`Xr)+Q1 zE?b3(%1jy`5ZF?a8aVb?*)R*z$>1WMSqojDqvEOFslt(7HJ;Z{0K;O9UMfk8^>A<0 zxca2?3wNDly5b@hm58N=oeA|lzVot%D_{bw_3U6$U}IhF4)ten0hXeUO>|QdzWKHI z5c`Zlqtb9$Ibs}!ZL`|m!bT}D(L^Qu-))=9$JxjQI;Rawo+=kFNoOudxbA5?ubcC_ zW2onFFy$>7#5ozSvG>v6N15Yp^t7=vF1E2Rk@U(IRRd#uHI#aWj%wnCO8hW{XQa1e z7tZLaT6ip;0zGHTESyC-Z@30c9kVPuIG%8>Qf56zw_H7FgLAce_E&++O}HYCl)a+p zGBfhFQ<$Z`G7D{dRm`4NGQzNT{T=Kc@hu60>EED(Mu^x_ZEJOnoA$J*!-$w-PzMF3 zaei}sWLz&*qT_JF`lE4x4K_VamFs4WMT;Cb48&TUqrqt$kBT1cS9A?w&Mj!mrdxX%G+FUj7Q*g3x>&yy`2# zAxvOTJbshTXQc6|=2kYxz)Sx>2AcF7kM%*#h?XdU(I~L0BVu(pp$HAkN9w)*!ZVjp zI9Giq3j%nx!>dxV&D4vR3i_@%{9XGSia^DHgv#5*>4i@3tkboNFB8uu7}eOt?ps}E z);~v08tO>Av(nWP-=6oW^1vfS;^~qv434xtmhN1*nYMHtvu)31rz-_L((PP>-)HbT z-bmvQ8vckksk3%gGpuF%ip)*>WOIkU!2amJskgJU)}HwnzrpL zWQP@eT0MiZY)hSEP8|G_(RSGx#Rb!?)4Vf_IQT zwfA*Sv|yS4>$#jCANaMY7g>tG%BR6#Bd*~(pC|&)5(9qD{73@*-dn+K1 zqRNqmYhx8eaGbSw9?;?o43@Bk*nbObEQd?TVc)1#H_}81jM73@cczK6~l|2q<_xMtnHE!TKtkF1(D-l8p6S z_X0l0|Ic&1Rvq~QM?wZ)=EN8IYr&T|%}*8~2%RGeM2FAbZR~GB9Kj)m!ov{+9aRJ! zxPezFu$^M+5d7yI;g8_^yisObSMR#1UoEh7`qs0>G_-X@R?cOtXH1 zpN3{#rFcblU+C^2Q)a7~qK1PUIrj#a1xXxOa+2ve&F_|{_~q|(#1VZ}OZxCCQ7cFF zh1s!%!KhL?pq)AKDktMP@fdzaRjRDa@T$!29K413!J(T-4-VhN;To185H?1Fv9qeb z)2~=cf2Uuwg5amtc0zv?U0oSfO9@bEnjjBq>9)JLaQ-eXp1+0Xx<9yrOM@#|Sb=d1 z#aev`v`+h4ReEuoZ!0L0r9KpSA{4njDzX%a+;mT=yCYJ!`}GBs^BQ%u;MaJOSEcTM^+>>23jWVVUR4SOkDS?^H zKTW)zb6581(^U*{WvTVwxNiNp%0N|M?#S}nAW>ZvnXm-RKt0O%W*0b*qJylkdM9R%EWsDg(OU5uZ;Kc zfq@SzxP;3BOP$bnI^mAmm%g*3{Ls;iVuv)nKqhMEzKZ){5Gw&AR!Pf?$*4AgQN67r zFIKRm!)n{RDv<^n0*i0J*a&?;3~tFpZmM2iMI^gHCIYi9FHqm5{a7#TciC-r_Xt)X8qZ|dJ$J0Qud5EH#C;Ruv8oMYWsbUbZoSPc z`%@Is%w3)Ek74wK6EkfUCTxVmnB0Xt!CY>#I!{1-O@W&l zMLs{`%Hdn^U1+?7_$~YVF`xP~c&0S@tPBirmByfa4WA&VoyBA1X#*TIE#nnRQ}_$B ztHq`@H(D4?Ykssa|3K~0OPpCP*(J-ci?8rb4i72M*>oSu^R_vX&o!-cnfFL@p=n(h z*W~TO3tY7GcIgGKX!<#5`k#_CaEfR3EYHL$7GaV0Jl1d;n>;TcU;(>0gJ-buGcA6> z*(}xFK{~@!nHVE2XXzi{JSAPh1O85K5JyX&;d7QiODp(-Rh_|en6xW0rccae7{q=; z)Me_g;UQM(TY^iUi^CY#$!ZX71z$48z-paVU(u>oAO#Ry|HVK+5DNI3_Y`jO{w9+) LaEou|!1W#=2RlLFW27Aqq z;RleHJb(nQ1QLRmBJmsgGkBz=XLi^5uv4i@bno1`GiPSb%w7NU|8IW)SVAp<2%-iw z6FOoFxw_jf)!l}@Yqd)ayX}_xp3~};)~y|`Y z)!8Y1vAt{8y^3JQO(Xc8i>)t8U$DZCPDM&Y@ECnodulP<`Ez zsxZgiu-|9S#uj_b)-~P6y4AHmiChA0lkJ{chcU=m-zfW6i%VLxeew z-z48#1Oz~g67%!-1SL*7*N>!`Ca z>TI6rT){GP66Z4ah=eK>e}(#)QUu4LW4`xvU=fCvw4@e=6SzT;m&ye27L{`tnhDO=}V@1b!cogJt#6uHz{G_L_iMu|N z^Y|3^sEeXNLhe)2@ENDz0VN$ZT;Y9;f2+iwMZ$>xhw}y^FEDLjlK*k_0+$0ZaYV)) zlA*~rG$i8|d6Jgt!h&S_s*dSLnd;2%1ig2Cdien)lF<8{5IXmAsV&C$^}&U}lX`yH&l1f<+c AJpcdz literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..36a05edb0df59dd6bf5820f2a55c1c812e7d6645 GIT binary patch literal 1471 zcmb7EO;Zy=5Pd^7*$_4YL6G=?fQTUhq9}+2F_u-9Xb`HfB1eW~42#KbYBQTsZyx*y z-t_L-3w|8@0sbb-vS+hP7C)*mRhjAO>F)RX&Fp;t`Slxs8@QW54hR!z&4YYdUhOgVu#dUYfW^ub^l?1ryfQq+XQ5H~GZ=5<$i8S4q0 zLcfjy1A|C0oa$zjY^%o5Tc@cT|4<>EHZY742EDE7Y(8Tc$*j+mx~V=`A&yaozKZKO z!jfCOCi-v|=X9JmZ~SUK?_?j9K%qk zY=A`fG352Yj$Ga1bUTh~@v<4{v3MM9HB@a|I_7cm{vofCAU>HRjMc32CbuQ8Jg1A~ zt39wG=xt;)<{mJ+W=OPDR`|)s;#A?TXE- zPXrT~p@%^IdO)`oF&cBU%G1nfj%GiBee||xX;j;4oTJg`1Yn+mfnHq2HAGZ0%Rz%q zzIN^qy0-gf_7KUp?_qS7AD~4(V`wGnEvxT*e>L#OvZ*tTY+zkUYaLUu)u7l;6DuHrF?zI?h;I=|Jfdf*jDGB500;Cmxk!24Jm@gS0Re(d)2Hb(TDl+L$6=#M{l_CZUXB2jk?6QbZAxWW}&d`y+n*0&b~dR4s!QiZ76z ngf?1aKQN*rUSwD$*Km|@)w8TPgHS;6z-{{XV2xPZ@vP!68IfgQ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..392ad2a5600eba8b887c83ff46edd14837feeefa GIT binary patch literal 164 zcmXwzF$%&!6h!Ao&8i^SS=z?N-`Lq(1TkPvux>sfOOlmr;^8bjfQJ${h|Mqq!<%`3 zo-Y6gEEFQb*0_d^E5z!C3uzn=eN}tDiod(oi^7z!w)&yD)@{kz&5G#>s+2zUt|e@e v-Pv^|+mJZTv&*k?BrJ0`bVg29ErivdxF2CLfiMX_015*$#G``>8e#qgwR0)S literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5d740b6d7107e0df05113456fa6f0d4e2728ebb5 GIT binary patch literal 746 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4b5fc95537e7773e6fc21129f2ce4474d415782c GIT binary patch literal 1162 zcma)4?@!ZE6g_Wk=~fFHbAn9#0SsM-Qc#F7BZLJbMC#T_s7pK-vO*)T}Ogp!3jFH6STz<@7Qh83G80v zdR@CAy2pXv6}#_`MG6e62@PWupI3G(42!i9cx6dUnn+2aR&6xu4S90Sgo$wmz0j)E z-c*|m_uq~rXCRG?j&T!{$daPt1-@X&6|LG4KjF5={R6wceCZ{ika8OAnT-;FjIriP^k z%okQG3C*Cn^GT#+oHH?x1v!7*Lzkggv_^A)YW?P@+w{{I(lyr?uX>$*5$^JRk4~Qb zqX}yye;Km1z~NqthpyBb2&z8skZ$&>D-4;JB03D(uX#wANQ5+u8XdY6jDjGa3VrT) zKMBIN>vNAG)pQSh9`!=fRf<-N)?~x+1};7wDkQz$7^(TqGSzGbz0eUmuJmDYc!ihc z|KD0A_j9!T%GQkBW`H6sCy>d@m835kP z{4^dQ5#!e=N`{eTr3+lY1e5s0U-%-On0*v1lqg%GTVt?3NGL57lvr$)qC%ha($efX zWFbX89lQ}m}E0amarrRDGivEWFairVhbCQ5Qrph0+JAHDe7c*NG8nA#M#+M zTCG;CTCEkURnba)Ib-Dl4XgTW*ADh-sOj#Rh@&12 zI^qTzVQ5$_mzM(DiIx{N=&t9EmK;aJ+V1R9xJ=L8aWtbvN5a5rv{vmn7WlS1rJIDZ2v%&n5%pztY zvzzg1f!V2{P0c-Gz~mcoE4Jw9HqawjHdXW+v#51#(Z1KJ$5!TcVn^@plUqf)y#}@m zntH(ua?@5Zjvd&k<243u!|i1OtBQednUrvQ_X$P9@I*6_sxl&6C^F^x zOe;O{S_60BPH_lUk&HUZhai`qD!IA9_T2Ol-^$xLGq5s^*n^CYJ_D}~pMib>*+4^CGE!tdVBi1_GDowRwFSej8|5gLk>MN4 zF}=3GWIK7wk7E!utg`pYr^JrjVy&MR~3Qi7Fh#xPfD$e(D1+++JAaxPdq0E?Q+y*!=J* z4Y#TZR2x9ifn{|9_vkoj;4OG7qblTbo|`NAzU2n#@oBmwpY?L4bJTS69u1~Pa~e`r zM!8;8rj9miKQ#AmwjAK)hqrI}pV;0qa0;ycde=G=WIfRc>bi%Adxk|~wn%J76yETP zO~FAyhikyYY*|{FUWn7+5KdOU>=i_G;0r|7%9?6K5g?mP$-tb@w=wXJ&CXi>fLUbU zID>f|_lnT_s`fePmZ-)qRqO%BEEccr5=l>l(VFjK50Z+@!6C=7rc9^bpQ3Nv;NTfy zMHXE>-mL-R?33c`%V${O18jL3TC%oljg|_NmOpMz zIvi=0M?7Krw)h+k)&|oy+tA^bx7-R*o z6$*?g<|{a>WOpHzddsndMR}P}B$N$TL##NdVV!bHA=!!nJD0@tEnAxr>Kc=t=UApY zE*hPNEov6~!>MxXReUZ?IO*{zMD?6mD>c2kuzK&aCI1F3qmc$CX^F z0>{}b)a9>yGTid|v8uBoSsS;Zi9aT+N1xm+6~f>vQV{~;tIR}H^m=>^7r0#$EBx#D264*A6V82; zb0Xh{7=ytuQD)zwOkpjnWi}yrsAaZK$+Qkn;yav=w0lzGbiA^1Jy3=7lv=J&Nu1TV zxQq{*%2Gaus&K+i67dNu=V{sIguS~djrf;X#NA1}Es4nm(gmDe#M`r5`5rgrRpqdnDK_{uD}j4>3@0VIwlE&g;QL~C>a)Nr ztz04X1GQxZpW%E1F5y0+2*&p_QsA|xt{}Pf3KA)9%Dx&b;vE-9w2K6(#~LK@PLdSO zI`qmkM`t*Cnm^#U3Wato(qQ6WJ1)~T+ErhOkwrYm8Bw-6V&gh7%O+Xm*k%5O#ruOq zT-?bREhwHPMPcWzZR~XC5Z^|E7f{!F|0s2O&v`Tm$`2e*(bEqc7k8D=)NS%CcJarl zJNS#zo!H1|AQvJa)Tdp nX$(KXPx&sy{~5<##INyNdG$NIj6dNooQpGuzvA!sC)WKRDoCUR literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..3a569be8aa55157804d07216f331646887ef0b6e GIT binary patch literal 2024 zcma)7+j84f6kW%c$d;WZbQlQubQrDq?bD=I~CNIp1ed;KcB_kaL z(m&}x@WKp)mIsDszKLPFk1QKI4z%Nu&uuU5wb$Nf>#u)){{z4VzSR(6C^Vgp(R5nk zn0Jhp=s2{nJ;`n989T!Bcw1EZ8yaE^H^%@SLR&_?c_doCC3H+c(~w9b37ui;n4fUN z;&$7pSlsg%rcH0l^USu*4=u6nIvs|YZ0(#`DR-bFigX&2xWq8o7P5LGZ26tdJ3;|+ zLx{R`O}kyvF^$U_GHG1F48yYHwhi9p#LKXpcAHGpxN&Uw(j>kCi1_HHx9iAirz=kx zZj3NF;%;4h?+d#rh)@!%*lq*y)5M!?^O~>XIY4{G_ z)o?3~W!z@S1Zf#DVMv{4*xB=y+h@IVWMo>rrZp|YH0X~gi}TIKOBb=obdc^*Ks8=j#cPN zQ0>=DTkQIsL*YJF#ZG$GoF=y#+%?rY+>FU1lR#_ZWf6*TQ9+eR@}|X~J!7~$6l`$E z=xlb>(P_8uZ05XiIloEv(>p>QIjw!J5+Q|>Jy}}Ir#7bR^`{?l)RI5$(v7icsES>YIYpnOr}&J{w`iUY?9|SE znpJ2g&S(KVpeKSVZEoXpnkjED5JQ~CV&P9jcURAldV#6uSkC`~t7`QUH^?wHA3MX+ zb6i@<++msAOB7=GnNTq(V%LcpsGG*IfGO&x3s}T$igX>f0Mbv`G<5Neofc}*xy*!=v)PsjL-`}P|!>6;!zmXCXGr$ tJ^vfl^Mzk=RgsMZWP2)352>gR=;%R02Aa*&M=yeU0DX*aXjI?^@Cvfn78n2k literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..0f6ea62f46a693737769bb95ae9f6d91110ec928 GIT binary patch literal 531 zcma)2O-lnY5PfN@)wbGNy%aon5x>A(#ET+S#nYl-OYhljtXX%HC7V_MmM6i3KfoU) zPNIUK2XlCnnR)MJGH>rMuK*6P)a9n{&UjkU zM+gh$q~)Se+z(1lt&yp0A}^F5Zt&M<_WfQM4uelwSfyt-R^;-**gGB@fr@!ph Date: Fri, 6 May 2022 20:40:47 +0600 Subject: [PATCH 2/2] microservice architecture --- pom.xml | 8 +++ .../com/codejam/demo/DemoApplication.java | 2 + .../com/codejam/demo/config/FeignConfig.java | 54 ++++++++++++++++++ .../demo/controller/ScheduleController.java | 33 +++++------ .../java/com/codejam/demo/dto/ServiceDto.java | 12 ++++ .../repository/DemoServiceRepositiry.java | 16 ++++++ .../codejam/demo/service/RevenueService.java | 23 +++++++- src/main/resources/application.properties | 7 ++- target/classes/application.properties | 7 ++- .../com/codejam/demo/DemoApplication.class | Bin 733 -> 796 bytes .../FeignConfig$CustomErrorDecoder.class | Bin 0 -> 1014 bytes .../com/codejam/demo/config/FeignConfig.class | Bin 0 -> 2176 bytes .../demo/controller/ScheduleController.class | Bin 2596 -> 2856 bytes .../com/codejam/demo/dto/ServiceDto.class | Bin 0 -> 2916 bytes .../repository/DemoServiceRepositiry.class | Bin 0 -> 840 bytes .../codejam/demo/service/RevenueService.class | Bin 0 -> 1312 bytes 16 files changed, 140 insertions(+), 22 deletions(-) create mode 100644 src/main/java/com/codejam/demo/config/FeignConfig.java create mode 100644 src/main/java/com/codejam/demo/dto/ServiceDto.java create mode 100644 src/main/java/com/codejam/demo/repository/DemoServiceRepositiry.java create mode 100644 target/classes/com/codejam/demo/config/FeignConfig$CustomErrorDecoder.class create mode 100644 target/classes/com/codejam/demo/config/FeignConfig.class create mode 100644 target/classes/com/codejam/demo/dto/ServiceDto.class create mode 100644 target/classes/com/codejam/demo/repository/DemoServiceRepositiry.class create mode 100644 target/classes/com/codejam/demo/service/RevenueService.class diff --git a/pom.xml b/pom.xml index ea8522d..9d1c71b 100644 --- a/pom.xml +++ b/pom.xml @@ -81,6 +81,13 @@ jakarta.validation-api 2.0.2 + + org.springframework.cloud + spring-cloud-starter-openfeign + 3.1.1 + + + @@ -88,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/controller/ScheduleController.java b/src/main/java/com/codejam/demo/controller/ScheduleController.java index b6cd389..355662f 100644 --- a/src/main/java/com/codejam/demo/controller/ScheduleController.java +++ b/src/main/java/com/codejam/demo/controller/ScheduleController.java @@ -1,38 +1,22 @@ package com.codejam.demo.controller; -import com.codejam.demo.dto.ScheduleDto; -import com.codejam.demo.enums.RecordStatus; -import com.codejam.demo.exception.ResourceNotFoundException; import com.codejam.demo.model.Schedule; import com.codejam.demo.repository.ScheduleRepository; import com.codejam.demo.service.ScheduleService; -import com.codejam.demo.utils.CommonDataHelper; -import com.codejam.demo.utils.PaginatedResponse; -import com.codejam.demo.validator.ScheduleValidator; import lombok.RequiredArgsConstructor; -import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; -import javax.validation.Valid; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Optional; -import java.util.stream.Collectors; - -import static com.codejam.demo.constants.MessageConstants.SCHEDULE_SAVE; -import static com.codejam.demo.constants.MessageConstants.SCHEDULE_UPDATE; -import static com.codejam.demo.utils.ResponseBuilder.success; -import static org.springframework.http.ResponseEntity.ok; @RestController @RequiredArgsConstructor @RequestMapping(path = "demo") public class ScheduleController { + private final ScheduleService service; + private final String[] sortable = {"id", "venue"}; @Autowired private ScheduleRepository scheduleRepository; @@ -41,6 +25,19 @@ 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); 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/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/service/RevenueService.java b/src/main/java/com/codejam/demo/service/RevenueService.java index 530e0e1..d88a931 100644 --- a/src/main/java/com/codejam/demo/service/RevenueService.java +++ b/src/main/java/com/codejam/demo/service/RevenueService.java @@ -1,6 +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/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/application.properties b/target/classes/application.properties index 9deaf3e..d0db38a 100644 --- a/target/classes/application.properties +++ b/target/classes/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/com/codejam/demo/DemoApplication.class b/target/classes/com/codejam/demo/DemoApplication.class index 81a8f534c236fac4be799d7d9bf4afac27a5805a..55445b21e2f30cc52bf45b305c58a61f2f6e65fe 100644 GIT binary patch delta 94 zcmcc1I){zx)W2Q(7#J8#800o`sWLG$GFVLh$SA6moReRgqMu)onwOTEnVzTbnwOZA vlj;UyJLhDk=9Lsr)?+efimHx~mFgAC9(Sq26Gd_WmX delta 47 zcmbQkc9)gw)W2Q(7#J8#7-TncsWMH@Vlrc7pS+OCo|TJ%oq>DuQzjjDHU>rp83qOb DM;{8M 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 0000000000000000000000000000000000000000..b7eb1baebe5c922d9fe13b213172efee04de58b0 GIT binary patch literal 1014 zcma)5+iuf95Iy5u949U{DJiAgLYsnfr5BRTM0-3(JB&;8)uU`itTFcAb8`G zK%%Mui4WkT5Mw8T2wEvG-ksSqXU^;%|NQms2Y?6IHlQJ+BWoguJmH}m`i>j+ViD zmHzZ#9!yy8Ttw6=p@LN%S52(p8e#1sAj|8glM^1>oxkD_W90?I)~vxB8J&bdBwO`4 z$liNbp2S`lv{_oO-!y)kFXozNBIu25bQ&yv~XH3*Lu zp+Dz2S(YHQ9< zI|&uRd=>;!wZ|fgWTc}`*j&I#Eaf~q>N88=4%?vs;&;{96YL7WvJ$Ve{WZ>)u+Hms zjt-FF9Z+dBPeF|{=#B4KdV7ZDQ&^u<_znIRQ;-b<4cz2-by|d5xXlrlr{wHb-scFp zj}~`fH_f^{=PnsOG8Dq{_e b)8Irxv6X)B;vTPMjy2ey$JJ1)4SiJ0ZE2hCp#hU)-1!oVG*2Gx;c=<;%HuCy!1x z&5z)}@G?voGQ$txM=`AKuBl1QkaYNP(n;EVcK6Zl>d(J^{{z4}o)(Zn)S z1PNJqhhgIkL@m|_k(R->Qc^t0>nS7ToM?t0Ho#M1Z~@~+Uy7Q<4d z`6}V+K98bWHDPo_vu4ugqas$ZMoH*Pm%Mvjh`g&4hYXjRUMQXng0@iK^0rSqB<*m& z#g%8)>1IwJcoBJUCVHqaVm?N)h+*dqE`RK8Gh7Zt6meHj?hl2cx+2eRpF6cE;tX)_6`lZr$eZ1)rhxUp$}x|88=0i1eV{Us^prK z8Gbl7hyRab)qlB&xo-xc_5#uJB9C(AK^RKSwI@Tmkkzr25EELwAXZL9?T1wU6#A{R z%0E+Hz||qCtesV5&!H|w3KK)_4~WNnUr8-BT{tyPG13bdu2oJ2J926+C{FC8Ak#9R zInhYAlkz9osZGaEAA`c494JRLJX2t$#;eA?W(t~|cpQd8#U(9>yYlN@%EB&*jkXyI zC-wjfRPY&kpEA_QsOssjY+eqUCqP1&q|v6;LuBa>C@mj>Eg!?$KSKUj6n>(;3~teQ zktBdw+5#_OYruiC$)}&8G*5i z*Y=#MSKoHr-DbJI9f2*Nl}izv6$rQe`kp@u4Ray zx%AAizTs`N8{M6e&kH(YlAJ1Ia$epV!WeV*E1y$%)bKzeDh&@6 zjUj0sF)8qPD8usqGdwxU;Nq#$Ffp3$NDT=Z2u>ZP$;WBAMaxgnX1R(}T$07}3>(VK zc%UxcGxIsC3~1{HCiOvQ|4QwzYx5sR^BoF4jTeN@5N4Bu$c-iKFPOH&-*6_c$7bDp zD3)>$k+xHZSlDM?gB)9qCBGqzQ-U>MP%;=Yss6@bfpn{4|6nrZxS{h?xqn3PtAHfIMSZIlum{|A$ z{)weOU_3J}EKw?p*?VW^-gE9bvk&fl%zFQNeFKokX~P+u{I_R7>or5CQ0=gpMlnYA3x~QLSlr&?4kK}OeU{{+NYpaX-X6~`qgshl|hdP~YNe!NB|Bs^w7Zf~# vQGPwbWEs`V8{P|&4JHzS#|b^p&#z(lQ%F>F)uA?afb~b*9}}di%{}=Bh88$Y 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 0000000000000000000000000000000000000000..95482f27a163ab4d722e3b739065dfd1e13a667c GIT binary patch literal 2916 zcma)8OK%%h6#lL~FFTXQb@Qkp(3FIbI7tnqwA5}&=-ZH_p=m=~UY*#}coN4BlSx;s z5i2BCNJwm{gt~wVQVApknDCN5|V|#23qLMZD-1GS6obQ}_$AA6v%WnWqU@MIT zk~$OF?Up3k0TTlfD&bV+_MnL@ z4hg897G>=7@CT}28EWUZ%gMFOuUFA1m3W{8)520Q_~UmR`Qa$qb6RG(3&lAcO}4tiI*jS zN`P`zYF;rhg=qnkn)97>yHTSF&zP9S91~{1^?-)Kt`tHdWCjHjui`cO)~wyyd3M6@ zQ(4FB0wW#9gNSo`PQ7ZoX>=z)7;(Y1LHFsCj98)5K{MS(df4V>d|cT$Hcy?NLs; z;7R&%oRJXoJ&`S@BW!j@8hDG$&5k+Mc>`~=s@XAr4!Ao{0%ynC?WX3UfS8u=x@_W# z&zIK>-~^O_ih)I^VK47(uiNf*Ydx5!X2q(nS*|1Zp;GZ`&aS}G#s3-S66a#KGZ({A zR$5~*y~b0tWP7z{b;WY6ZO*1kY?X2H7#Li`o^}mki&RFNbcxJK*IQa+BHto-yrRb= zWS8%1dNtb>=#ynlv<{%@Yuj7hH##zUV{)W% zl&31e`%B@I_YkFoyhQw!w}-#-df?g*(gBUnGIs^8f~%T;1o5Nq_70!YOeNms(+uTB zEO95~Wx!{5@K4ZxpfQ0?un`-~iy$Vrzc)A)8_X*pCOFd@oQ@6Vg%cAz*c;pz8@!CG zEKb&3~ATIF3<8&RObFfUru?9gZE+1<&=GlwLHd)DqY5lT27Td+GAwzqd%wSw20GW zQK!>n(a7o2$q1eFoDp%#7gKb~7t^_vbV`R#sa(3{qO$;hw=CuJw7rrr04Si}1) ze+b{=CQnZS6ZjIhs7oS`FL0ZZg3H*#2b5HL*!Yl=hB_|cBT714EZ}2G2EO7U|AbNs zUz5Q*l+v)6$4Lz6#@{%g!+3&W9SQyn@dSqhG4&r}YZ}+s6h;0W2>X1R3CjUjWjAD< z(L){78O*oZu2W@ovd(b6Z~ATKH<&6O8SyzGbOP;UN@tXLznP<%QjM)NGBfv~&+X&b z9jPBLD$d$pmn-tFA+k1;TWHS#|}&=YLRRN0e-Uvd1_Bb>;-v5!--HTx)K n&j#|ilotY-rc>E-fjlYo7bx%JQt$N{{bVeJ91A%97;XLw!({Z^ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..41ff12d56b6784761c0d2c370a301fa72a8cd808 GIT binary patch literal 840 zcma)4O>Yx15FKyRh7?*TU!?^u2qd^*kRmwb1XQJwQc)#R4{&nUldZ$9z1Xvaw7XWnOQ5zBguTxjZ)M=cmLTW6W^jNxJ$oaY4 zV}FExW>Oq3qQ=kL&=PQKs%A>&%4YJ@c#0_r*qRut`!R$y-RR4>BbLIYEz;aoTDlVL1Wjh;e*AvO4O-&rEz48n-G?QWuy%Mmsk0N4RleEI zvx`e!AexdjnoF)!J{Pe0^ej%hnK93|qcO^~`>MOb@)c_W7|IsgtjASYW3SC#CxL76 z$7h|-Cd01tx$y-=fDQHmwi6EAjKRQIme#`TKmuEQoxtrn^)ZLG?%qCzaw_dTeKM%mT1EOHm!_h*kn6oEz>>2 zY>_rrXRfwoTzF8r*RT%jI`bj9AJMU}K@}Zr{t0c}gdS7q37*bE>r2?C&@(#EZ&F@R d%1gYOrF2>_)vxKip<_}jkhetW9a$FM{{|T2fr$VB literal 0 HcmV?d00001