Commit 9d941807 authored by Ramu Dosapati's avatar Ramu Dosapati

Retrieving data from mongodb

parent 3f36a8e2
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="16" project-jdk-type="JavaSDK" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11 (2)" project-jdk-type="JavaSDK" />
<component name="ProjectType">
<option name="id" value="jpab" />
</component>
......
This diff is collapsed.
......@@ -19,13 +19,18 @@ repositories {
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb-reactive'
implementation group: 'org.modelmapper', name: 'modelmapper', version: '3.1.0'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-mongodb', version: '2.7.5'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'io.projectreactor:reactor-test'
implementation group: 'io.reactivex', name: 'rxjava', version: '1.3.8'
implementation 'org.springframework.kafka:spring-kafka'
testImplementation 'org.springframework.kafka:spring-kafka-test'
implementation group: 'io.springfox', name: 'springfox-boot-starter', version: '3.0.0'
compileOnly group: 'org.json', name: 'json', version: '20180813'
}
tasks.named('test') {
......
com.safeway.pricing.safeway.SafewayPricingPodApplication
\ No newline at end of file
body {
margin: 0;
padding: 0;
font-family: sans-serif;
font-size: 12pt;
}
body, a, a:visited {
color: #303030;
}
#content {
padding-left: 50px;
padding-right: 50px;
padding-top: 30px;
padding-bottom: 30px;
}
#content h1 {
font-size: 160%;
margin-bottom: 10px;
}
#footer {
margin-top: 100px;
font-size: 80%;
white-space: nowrap;
}
#footer, #footer a {
color: #a0a0a0;
}
#line-wrapping-toggle {
vertical-align: middle;
}
#label-for-line-wrapping-toggle {
vertical-align: middle;
}
ul {
margin-left: 0;
}
h1, h2, h3 {
white-space: nowrap;
}
h2 {
font-size: 120%;
}
ul.tabLinks {
padding-left: 0;
padding-top: 10px;
padding-bottom: 10px;
overflow: auto;
min-width: 800px;
width: auto !important;
width: 800px;
}
ul.tabLinks li {
float: left;
height: 100%;
list-style: none;
padding-left: 10px;
padding-right: 10px;
padding-top: 5px;
padding-bottom: 5px;
margin-bottom: 0;
-moz-border-radius: 7px;
border-radius: 7px;
margin-right: 25px;
border: solid 1px #d4d4d4;
background-color: #f0f0f0;
}
ul.tabLinks li:hover {
background-color: #fafafa;
}
ul.tabLinks li.selected {
background-color: #c5f0f5;
border-color: #c5f0f5;
}
ul.tabLinks a {
font-size: 120%;
display: block;
outline: none;
text-decoration: none;
margin: 0;
padding: 0;
}
ul.tabLinks li h2 {
margin: 0;
padding: 0;
}
div.tab {
}
div.selected {
display: block;
}
div.deselected {
display: none;
}
div.tab table {
min-width: 350px;
width: auto !important;
width: 350px;
border-collapse: collapse;
}
div.tab th, div.tab table {
border-bottom: solid #d0d0d0 1px;
}
div.tab th {
text-align: left;
white-space: nowrap;
padding-left: 6em;
}
div.tab th:first-child {
padding-left: 0;
}
div.tab td {
white-space: nowrap;
padding-left: 6em;
padding-top: 5px;
padding-bottom: 5px;
}
div.tab td:first-child {
padding-left: 0;
}
div.tab td.numeric, div.tab th.numeric {
text-align: right;
}
span.code {
display: inline-block;
margin-top: 0em;
margin-bottom: 1em;
}
span.code pre {
font-size: 11pt;
padding-top: 10px;
padding-bottom: 10px;
padding-left: 10px;
padding-right: 10px;
margin: 0;
background-color: #f7f7f7;
border: solid 1px #d0d0d0;
min-width: 700px;
width: auto !important;
width: 700px;
}
span.wrapped pre {
word-wrap: break-word;
white-space: pre-wrap;
word-break: break-all;
}
label.hidden {
display: none;
}
\ No newline at end of file
#summary {
margin-top: 30px;
margin-bottom: 40px;
}
#summary table {
border-collapse: collapse;
}
#summary td {
vertical-align: top;
}
.breadcrumbs, .breadcrumbs a {
color: #606060;
}
.infoBox {
width: 110px;
padding-top: 15px;
padding-bottom: 15px;
text-align: center;
}
.infoBox p {
margin: 0;
}
.counter, .percent {
font-size: 120%;
font-weight: bold;
margin-bottom: 8px;
}
#duration {
width: 125px;
}
#successRate, .summaryGroup {
border: solid 2px #d0d0d0;
-moz-border-radius: 10px;
border-radius: 10px;
}
#successRate {
width: 140px;
margin-left: 35px;
}
#successRate .percent {
font-size: 180%;
}
.success, .success a {
color: #008000;
}
div.success, #successRate.success {
background-color: #bbd9bb;
border-color: #008000;
}
.failures, .failures a {
color: #b60808;
}
.skipped, .skipped a {
color: #c09853;
}
div.failures, #successRate.failures {
background-color: #ecdada;
border-color: #b60808;
}
ul.linkList {
padding-left: 0;
}
ul.linkList li {
list-style: none;
margin-bottom: 5px;
}
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - Test Summary</title>
<link href="css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="css/style.css" rel="stylesheet" type="text/css"/>
<script src="js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<h1>Test Summary</h1>
<div id="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox" id="tests">
<div class="counter">1</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox" id="failures">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox" id="ignored">
<div class="counter">0</div>
<p>ignored</p>
</div>
</td>
<td>
<div class="infoBox" id="duration">
<div class="counter">0.714s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success" id="successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<div id="tabs">
<ul class="tabLinks">
<li>
<a href="#tab0">Packages</a>
</li>
<li>
<a href="#tab1">Classes</a>
</li>
</ul>
<div id="tab0" class="tab">
<h2>Packages</h2>
<table>
<thead>
<tr>
<th>Package</th>
<th>Tests</th>
<th>Failures</th>
<th>Ignored</th>
<th>Duration</th>
<th>Success rate</th>
</tr>
</thead>
<tbody>
<tr>
<td class="success">
<a href="packages/com.safeway.pricing.safeway.html">com.safeway.pricing.safeway</a>
</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.714s</td>
<td class="success">100%</td>
</tr>
</tbody>
</table>
</div>
<div id="tab1" class="tab">
<h2>Classes</h2>
<table>
<thead>
<tr>
<th>Class</th>
<th>Tests</th>
<th>Failures</th>
<th>Ignored</th>
<th>Duration</th>
<th>Success rate</th>
</tr>
</thead>
<tbody>
<tr>
<td class="success">
<a href="classes/com.safeway.pricing.safeway.SafewayPricingPodApplicationTests.html">com.safeway.pricing.safeway.SafewayPricingPodApplicationTests</a>
</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.714s</td>
<td class="success">100%</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="http://www.gradle.org">Gradle 7.4</a> at 22-Nov-2022, 1:47:24 PM</p>
</div>
</div>
</body>
</html>
(function (window, document) {
"use strict";
var tabs = {};
function changeElementClass(element, classValue) {
if (element.getAttribute("className")) {
element.setAttribute("className", classValue);
} else {
element.setAttribute("class", classValue);
}
}
function getClassAttribute(element) {
if (element.getAttribute("className")) {
return element.getAttribute("className");
} else {
return element.getAttribute("class");
}
}
function addClass(element, classValue) {
changeElementClass(element, getClassAttribute(element) + " " + classValue);
}
function removeClass(element, classValue) {
changeElementClass(element, getClassAttribute(element).replace(classValue, ""));
}
function initTabs() {
var container = document.getElementById("tabs");
tabs.tabs = findTabs(container);
tabs.titles = findTitles(tabs.tabs);
tabs.headers = findHeaders(container);
tabs.select = select;
tabs.deselectAll = deselectAll;
tabs.select(0);
return true;
}
function getCheckBox() {
return document.getElementById("line-wrapping-toggle");
}
function getLabelForCheckBox() {
return document.getElementById("label-for-line-wrapping-toggle");
}
function findCodeBlocks() {
var spans = document.getElementById("tabs").getElementsByTagName("span");
var codeBlocks = [];
for (var i = 0; i < spans.length; ++i) {
if (spans[i].className.indexOf("code") >= 0) {
codeBlocks.push(spans[i]);
}
}
return codeBlocks;
}
function forAllCodeBlocks(operation) {
var codeBlocks = findCodeBlocks();
for (var i = 0; i < codeBlocks.length; ++i) {
operation(codeBlocks[i], "wrapped");
}
}
function toggleLineWrapping() {
var checkBox = getCheckBox();
if (checkBox.checked) {
forAllCodeBlocks(addClass);
} else {
forAllCodeBlocks(removeClass);
}
}
function initControls() {
if (findCodeBlocks().length > 0) {
var checkBox = getCheckBox();
var label = getLabelForCheckBox();
checkBox.onclick = toggleLineWrapping;
checkBox.checked = false;
removeClass(label, "hidden");
}
}
function switchTab() {
var id = this.id.substr(1);
for (var i = 0; i < tabs.tabs.length; i++) {
if (tabs.tabs[i].id === id) {
tabs.select(i);
break;
}
}
return false;
}
function select(i) {
this.deselectAll();
changeElementClass(this.tabs[i], "tab selected");
changeElementClass(this.headers[i], "selected");
while (this.headers[i].firstChild) {
this.headers[i].removeChild(this.headers[i].firstChild);
}
var h2 = document.createElement("H2");
h2.appendChild(document.createTextNode(this.titles[i]));
this.headers[i].appendChild(h2);
}
function deselectAll() {
for (var i = 0; i < this.tabs.length; i++) {
changeElementClass(this.tabs[i], "tab deselected");
changeElementClass(this.headers[i], "deselected");
while (this.headers[i].firstChild) {
this.headers[i].removeChild(this.headers[i].firstChild);
}
var a = document.createElement("A");
a.setAttribute("id", "ltab" + i);
a.setAttribute("href", "#tab" + i);
a.onclick = switchTab;
a.appendChild(document.createTextNode(this.titles[i]));
this.headers[i].appendChild(a);
}
}
function findTabs(container) {
return findChildElements(container, "DIV", "tab");
}
function findHeaders(container) {
var owner = findChildElements(container, "UL", "tabLinks");
return findChildElements(owner[0], "LI", null);
}
function findTitles(tabs) {
var titles = [];
for (var i = 0; i < tabs.length; i++) {
var tab = tabs[i];
var header = findChildElements(tab, "H2", null)[0];
header.parentNode.removeChild(header);
if (header.innerText) {
titles.push(header.innerText);
} else {
titles.push(header.textContent);
}
}
return titles;
}
function findChildElements(container, name, targetClass) {
var elements = [];
var children = container.childNodes;
for (var i = 0; i < children.length; i++) {
var child = children.item(i);
if (child.nodeType === 1 && child.nodeName === name) {
if (targetClass && child.className.indexOf(targetClass) < 0) {
continue;
}
elements.push(child);
}
}
return elements;
}
// Entry point.
window.onload = function() {
initTabs();
initControls();
};
} (window, window.document));
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - Package com.safeway.pricing.safeway</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<h1>Package com.safeway.pricing.safeway</h1>
<div class="breadcrumbs">
<a href="../index.html">all</a> &gt; com.safeway.pricing.safeway</div>
<div id="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox" id="tests">
<div class="counter">1</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox" id="failures">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox" id="ignored">
<div class="counter">0</div>
<p>ignored</p>
</div>
</td>
<td>
<div class="infoBox" id="duration">
<div class="counter">0.714s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success" id="successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<div id="tabs">
<ul class="tabLinks">
<li>
<a href="#tab0">Classes</a>
</li>
</ul>
<div id="tab0" class="tab">
<h2>Classes</h2>
<table>
<thread>
<tr>
<th>Class</th>
<th>Tests</th>
<th>Failures</th>
<th>Ignored</th>
<th>Duration</th>
<th>Success rate</th>
</tr>
</thread>
<tr>
<td class="success">
<a href="../classes/com.safeway.pricing.safeway.SafewayPricingPodApplicationTests.html">SafewayPricingPodApplicationTests</a>
</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.714s</td>
<td class="success">100%</td>
</tr>
</table>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="http://www.gradle.org">Gradle 7.4</a> at 22-Nov-2022, 1:47:24 PM</p>
</div>
</div>
</body>
</html>
server.port=8789
spring.mvc.pathmatch.matching-strategy = ANT_PATH_MATCHER
client.host=http://localhost:8789
spring.username = ${userName}
server.port=8788
spring.mvc.pathmatch.matching-strategy = ANT_PATH_MATCHER
client.host=http://safeway.com
#spring.active.profiles=prod
server.port=8789
spring.mvc.pathmatch.matching-strategy = ANT_PATH_MATCHER
client.host=http://localhost:8789
spring.data.mongodb.database=pricingdb
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
\ No newline at end of file
spring:
data:
mongodb:
database: pricingdb
host: localhost
port: 27017
\ No newline at end of file
Manifest-Version: 1.0
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.safeway.pricing.safeway.SafewayPricingPodApplication
Spring-Boot-Version: 2.7.5
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Spring-Boot-Layers-Index: BOOT-INF/layers.idx
Manifest-Version: 1.0
package com.safeway.pricing.safeway;
import com.safeway.pricing.safeway.client.SafewayClient;
/*import com.safeway.pricing.safeway.entity.PriceDetails;
import com.safeway.pricing.safeway.filereader.ExcelReader;
import com.safeway.pricing.safeway.kafka.SendKafkaMessage;*/
import lombok.extern.slf4j.Slf4j;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import reactor.core.publisher.Flux;
import java.io.FileInputStream;
@SpringBootApplication
public class SafewayPricingPodApplication {
public class SafewayPricingPodApplication {
public static void main(String[] args) {
SpringApplication.run(SafewayPricingPodApplication.class, args);
}
@Bean
public ModelMapper modelMapper(){
return new ModelMapper();
}
}
package com.safeway.pricing.safeway.client;
import com.safeway.pricing.safeway.entity.PriceDetails;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Flux;
@Component
public class SafewayClient {
@Value("${client.host}")
private String clientHost;
WebClient client = WebClient.create(clientHost);
public Flux<PriceDetails> getAllPricingDetails() {
return client.get().uri("/safeway/pricingdetails").accept(MediaType.APPLICATION_JSON).retrieve()
.bodyToFlux(PriceDetails.class);
}
}
package com.safeway.pricing.safeway.config;
import org.springframework.context.annotation.Bean;
import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.server.RouterFunction;
import static org.springframework.web.reactive.function.server.RequestPredicates.GET;
import static org.springframework.web.reactive.function.server.RequestPredicates.accept;
import static org.springframework.web.reactive.function.server.RouterFunctions.route;
//@Configuration
public class RouteConfig {
@Bean
RouterFunction<?> routerFunction(RouterHandlers routerHandlers){
return route(GET("/safeway/storedetails/{storeName}").and(accept(MediaType.APPLICATION_JSON)),routerHandlers::getStoreDetails).
andRoute(GET("/safeway/pricingdetails").and(accept(MediaType.APPLICATION_JSON)),routerHandlers::getPricingDetails);
}
}
package com.safeway.pricing.safeway.config;
import com.safeway.pricing.safeway.entity.PriceDetails;
import com.safeway.pricing.safeway.entity.StoreDetails;
import com.safeway.pricing.safeway.service.PricingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.time.Duration;
import java.util.List;
import java.util.stream.Collectors;
@Component
public class RouterHandlers {
@Autowired
private PricingService pricingService;
public Mono<ServerResponse> getStoreDetails(ServerRequest serverRequest){
pricingService.getStoreDetails(serverRequest.pathVariable("storeName"));
return ServerResponse.ok().body(pricingService.getStoreDetailsMany().asFlux(),StoreDetails.class);
}
public Mono<ServerResponse> getPricingDetails(ServerRequest serverRequest){
return ServerResponse.ok().body(pricingService.getPricingDetails(),PriceDetails.class);
}
}
package com.safeway.pricing.safeway.controller;
import com.safeway.pricing.safeway.dto.ItemDetailsDTO;
import com.safeway.pricing.safeway.dto.SaleDetailsDTO;
import com.safeway.pricing.safeway.dto.StoreGroupDTO;
import com.safeway.pricing.safeway.entity.PriceAreaDetails;
import com.safeway.pricing.safeway.entity.PriceDetails;
import com.safeway.pricing.safeway.entity.StoreDetails;
import com.safeway.pricing.safeway.service.PricingService;
import com.safeway.pricing.safeway.util.AppUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.core.publisher.Sinks;
import rx.Observable;
import rx.Observer;
import java.util.List;
@RestController
@RequestMapping("/safeway")
......@@ -20,19 +27,40 @@ public class PricingController {
@Autowired
private PricingService pricingService;
@GetMapping("/storedetails/{storeName}")
@GetMapping(value="/storedetails/{storeName}",produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<StoreDetails> getStoreDetails(@PathVariable String storeName){
return pricingService.getStoreDetails(storeName);
pricingService.getStoreDetails(storeName);
return pricingService.getStoreDetailsMany().asFlux();
}
@GetMapping("/pricingdetails")
@GetMapping(value="/pricingdetails")
public Flux<PriceDetails> getPricingDetails(){
return pricingService.getPricingDetails();
}
@GetMapping("/priceareadetails")
public Mono<PriceAreaDetails> getPriceAreaDetails(){
return pricingService.getPriceAreaDetails();
@PostMapping(value="/addstoredetails")
public Mono<StoreDetails> addStoreDetails(@RequestBody StoreDetails storeDetails){
return pricingService.addStoreDetails(storeDetails);
}
@GetMapping("/allItemDetails")
public Flux<ItemDetailsDTO> allItemDetails() {
return this.pricingService.getItemDetails();
}
@GetMapping("/allStoreGroup")
public Flux<StoreGroupDTO> allStoreGroup() {
return this.pricingService.getStoreGroups();
}
@GetMapping("/allSaleDetails")
public Flux<SaleDetailsDTO> allSaleDetails() {
return this.pricingService.getSalesDetails();
}
}
package com.safeway.pricing.safeway.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DivisionDetailsDTO {
private String divisionId;
private String division;
private int pinCode;
private String city;
}
package com.safeway.pricing.safeway.dto;
public class ItemDetails {
}
package com.safeway.pricing.safeway.dto;
import com.safeway.pricing.safeway.entity.SaleDetails;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ItemDetailsDTO {
private String itemId;
private String department;
private String category;
private String subCategory;
private double currentPrice;
private SaleDetails saleDetails;
}
package com.safeway.pricing.safeway.dto;
import com.safeway.pricing.safeway.entity.DivisionDetails;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class PriceAreaDTO {
private String priceAreaId;
private DivisionDetails divisionDetails;
private double price;
private List<String> storeGroupId;
}
package com.safeway.pricing.safeway.dto;
import com.safeway.pricing.safeway.entity.PriceArea;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class PriceAreaDetailsDTO {
private List<PriceArea> priceAreas;
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment