Subversion Repositories SmartDukaan

Rev

Rev 26923 | Rev 27025 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
26607 amit.gupta 1
package com.spice.profitmandi.web.controller;
2
 
26628 amit.gupta 3
import java.time.LocalTime;
26607 amit.gupta 4
import java.util.ArrayList;
5
import java.util.Arrays;
26745 amit.gupta 6
import java.util.Comparator;
26607 amit.gupta 7
import java.util.HashMap;
8
import java.util.HashSet;
9
import java.util.List;
10
import java.util.Map;
26745 amit.gupta 11
import java.util.Optional;
26607 amit.gupta 12
import java.util.Set;
13
import java.util.stream.Collectors;
14
 
15
import javax.servlet.http.HttpServletRequest;
16
 
17
import org.apache.commons.lang3.StringUtils;
18
import org.apache.http.conn.HttpHostConnectException;
19
import org.apache.logging.log4j.LogManager;
20
import org.apache.logging.log4j.Logger;
21
import org.json.JSONArray;
22
import org.json.JSONObject;
23
import org.springframework.beans.factory.annotation.Autowired;
24
import org.springframework.beans.factory.annotation.Value;
26745 amit.gupta 25
import org.springframework.cache.annotation.Cacheable;
26607 amit.gupta 26
import org.springframework.http.MediaType;
27
import org.springframework.http.ResponseEntity;
28
import org.springframework.stereotype.Controller;
29
import org.springframework.transaction.annotation.Transactional;
26923 amit.gupta 30
import org.springframework.web.bind.annotation.GetMapping;
26662 amit.gupta 31
import org.springframework.web.bind.annotation.PathVariable;
26923 amit.gupta 32
import org.springframework.web.bind.annotation.PostMapping;
26607 amit.gupta 33
import org.springframework.web.bind.annotation.RequestBody;
34
import org.springframework.web.bind.annotation.RequestMapping;
35
import org.springframework.web.bind.annotation.RequestMethod;
36
import org.springframework.web.bind.annotation.RequestParam;
37
 
38
import com.eclipsesource.json.JsonObject;
26774 amit.gupta 39
import com.fasterxml.jackson.annotation.JsonProperty;
26745 amit.gupta 40
import com.google.common.collect.Ordering;
26607 amit.gupta 41
import com.google.gson.Gson;
42
import com.google.gson.reflect.TypeToken;
43
import com.spice.profitmandi.common.enumuration.SchemeType;
44
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
26923 amit.gupta 45
import com.spice.profitmandi.common.model.CreatePendingOrderItem;
26648 amit.gupta 46
import com.spice.profitmandi.common.model.CreatePendingOrderRequest;
26651 amit.gupta 47
import com.spice.profitmandi.common.model.CustomRetailer;
26855 tejbeer 48
import com.spice.profitmandi.common.model.CustomerOrderDetail;
26607 amit.gupta 49
import com.spice.profitmandi.common.model.ProfitMandiConstants;
50
import com.spice.profitmandi.common.model.UserInfo;
51
import com.spice.profitmandi.common.solr.SolrService;
52
import com.spice.profitmandi.common.web.client.RestClient;
53
import com.spice.profitmandi.common.web.util.ResponseSender;
54
import com.spice.profitmandi.dao.entity.catalog.Item;
55
import com.spice.profitmandi.dao.entity.catalog.TagListing;
26745 amit.gupta 56
import com.spice.profitmandi.dao.entity.dtr.WebListing;
26607 amit.gupta 57
import com.spice.profitmandi.dao.entity.fofo.CurrentInventorySnapshot;
26774 amit.gupta 58
import com.spice.profitmandi.dao.entity.fofo.Customer;
26857 amit.gupta 59
import com.spice.profitmandi.dao.entity.fofo.CustomerAddress;
26855 tejbeer 60
import com.spice.profitmandi.dao.entity.fofo.PendingOrder;
61
import com.spice.profitmandi.dao.entity.fofo.PendingOrderItem;
26715 amit.gupta 62
import com.spice.profitmandi.dao.entity.fofo.PincodePartner;
26630 amit.gupta 63
import com.spice.profitmandi.dao.enumuration.dtr.OtpType;
26607 amit.gupta 64
import com.spice.profitmandi.dao.model.AddCartRequest;
65
import com.spice.profitmandi.dao.model.CartItem;
66
import com.spice.profitmandi.dao.model.CartItemResponseModel;
67
import com.spice.profitmandi.dao.model.CartResponse;
68
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
69
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
26718 amit.gupta 70
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
26745 amit.gupta 71
import com.spice.profitmandi.dao.repository.dtr.WebListingRepository;
72
import com.spice.profitmandi.dao.repository.dtr.WebProductListingRepository;
26607 amit.gupta 73
import com.spice.profitmandi.dao.repository.fofo.CurrentInventorySnapshotRepository;
26788 amit.gupta 74
import com.spice.profitmandi.dao.repository.fofo.CustomerAddressRepository;
26774 amit.gupta 75
import com.spice.profitmandi.dao.repository.fofo.CustomerRepository;
26855 tejbeer 76
import com.spice.profitmandi.dao.repository.fofo.PendingOrderItemRepository;
77
import com.spice.profitmandi.dao.repository.fofo.PendingOrderRepository;
26648 amit.gupta 78
import com.spice.profitmandi.dao.repository.fofo.PendingOrderService;
26715 amit.gupta 79
import com.spice.profitmandi.dao.repository.fofo.PincodePartnerRepository;
26607 amit.gupta 80
import com.spice.profitmandi.dao.repository.inventory.ItemAvailabilityCacheRepository;
26784 amit.gupta 81
import com.spice.profitmandi.service.CustomerService;
26607 amit.gupta 82
import com.spice.profitmandi.service.authentication.RoleManager;
26923 amit.gupta 83
import com.spice.profitmandi.service.inventory.AvailabilityModel;
26607 amit.gupta 84
import com.spice.profitmandi.service.inventory.FofoAvailabilityInfo;
85
import com.spice.profitmandi.service.inventory.FofoCatalogResponse;
26923 amit.gupta 86
import com.spice.profitmandi.service.inventory.InventoryService;
26909 amit.gupta 87
import com.spice.profitmandi.service.inventory.SaholicInventoryService;
26683 amit.gupta 88
import com.spice.profitmandi.service.scheme.SchemeService;
26651 amit.gupta 89
import com.spice.profitmandi.service.user.RetailerService;
26630 amit.gupta 90
import com.spice.profitmandi.web.processor.OtpProcessor;
26607 amit.gupta 91
import com.spice.profitmandi.web.res.DealBrands;
92
import com.spice.profitmandi.web.res.DealObjectResponse;
93
import com.spice.profitmandi.web.res.DealsResponse;
94
import com.spice.profitmandi.web.res.ValidateCartResponse;
95
 
96
import io.swagger.annotations.ApiImplicitParam;
97
import io.swagger.annotations.ApiImplicitParams;
98
import io.swagger.annotations.ApiOperation;
99
 
100
@Controller
101
@Transactional(rollbackFor = Throwable.class)
102
public class StoreController {
103
 
104
	private static final Logger logger = LogManager.getLogger(StoreController.class);
26630 amit.gupta 105
 
26628 amit.gupta 106
	private static final LocalTime CUTOFF_TIME = LocalTime.of(15, 0);
26745 amit.gupta 107
 
108
	private static final List<Integer> TAG_IDS = Arrays.asList(4);
109
 
26717 amit.gupta 110
	private static final int DEFAULT_STORE = 171912487;
26833 amit.gupta 111
 
26788 amit.gupta 112
	@Autowired
113
	CustomerAddressRepository customerAddressRepository;
26607 amit.gupta 114
 
26923 amit.gupta 115
	@Autowired
116
	InventoryService inventoryService;
117
 
26607 amit.gupta 118
	@Value("${python.api.host}")
119
	private String host;
26833 amit.gupta 120
 
26784 amit.gupta 121
	@Autowired
122
	CustomerService customerService;
26607 amit.gupta 123
 
124
	@Value("${python.api.port}")
125
	private int port;
26923 amit.gupta 126
 
26909 amit.gupta 127
	@Autowired
128
	private SaholicInventoryService saholicInventoryService;
26607 amit.gupta 129
 
130
	// This is now unused as we are not supporting multiple companies.
131
	@Value("${gadgetCops.invoice.cc}")
132
	private String[] ccGadgetCopInvoiceTo;
133
 
134
	@Autowired
26715 amit.gupta 135
	private PincodePartnerRepository pincodePartnerRepository;
136
 
137
	@Autowired
26718 amit.gupta 138
	private FofoStoreRepository fofoStoreRepository;
26745 amit.gupta 139
 
26718 amit.gupta 140
	@Autowired
26651 amit.gupta 141
	private RetailerService retailerService;
26861 tejbeer 142
 
26857 amit.gupta 143
	@Autowired
144
	private PendingOrderRepository pendingOrderRepository;
26861 tejbeer 145
 
26857 amit.gupta 146
	@Autowired
147
	private PendingOrderItemRepository pendingOrderItemRepository;
26652 amit.gupta 148
 
26651 amit.gupta 149
	@Autowired
26652 amit.gupta 150
	private PendingOrderService pendingOrderService;
26648 amit.gupta 151
 
152
	@Autowired
26774 amit.gupta 153
	private CustomerRepository customerRepository;
154
 
155
	@Autowired
26607 amit.gupta 156
	private SolrService commonSolrService;
157
 
158
	@Autowired
26630 amit.gupta 159
	private OtpProcessor otpProcessor;
160
 
161
	@Autowired
26607 amit.gupta 162
	private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
163
 
26609 amit.gupta 164
	@Autowired
26607 amit.gupta 165
	private ResponseSender<?> responseSender;
166
 
167
	@Autowired
168
	private TagListingRepository tagListingRepository;
169
 
170
	@Autowired
171
	private ItemRepository itemRepository;
26701 amit.gupta 172
 
26683 amit.gupta 173
	@Autowired
174
	private SchemeService schemeService;
26607 amit.gupta 175
 
176
	@Autowired
177
	private ItemAvailabilityCacheRepository itemAvailabilityCacheRepository;
178
 
179
	@Autowired
26745 amit.gupta 180
	private WebListingRepository webListingRepository;
181
 
182
	@Autowired
183
	private WebProductListingRepository webProductListingRepository;
184
 
185
	@Autowired
26607 amit.gupta 186
	private RoleManager roleManagerService;
187
 
188
	List<String> filterableParams = Arrays.asList("brand");
189
 
190
	@ApiImplicitParams({
191
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
192
	@RequestMapping(value = "/store/fofo", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
193
	public ResponseEntity<?> getFofo(HttpServletRequest request,
194
			@RequestParam(value = "categoryId", required = false, defaultValue = "(3 OR 6)") String categoryId,
195
			@RequestParam(value = "offset") String offset, @RequestParam(value = "limit") String limit,
196
			@RequestParam(value = "sort", required = false) String sort,
197
			@RequestParam(value = "brand", required = false) String brand,
198
			@RequestParam(value = "subCategoryId", required = false) int subCategoryId,
199
			@RequestParam(value = "q", required = false) String queryTerm,
200
			@RequestParam(value = "hotDeal", required = false) boolean hotDeal) throws Throwable {
201
		List<FofoCatalogResponse> dealResponse = new ArrayList<>();
202
		UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
203
		if (roleManagerService.isPartner(userInfo.getRoleIds())) {
204
			// UserCart uc = userAccountRepository.getUserCart(userInfo.getUserId());
205
			RestClient rc = new RestClient();
206
			Map<String, String> params = new HashMap<>();
207
			List<String> mandatoryQ = new ArrayList<>();
208
			if (queryTerm != null && !queryTerm.equals("null")) {
209
				mandatoryQ.add(String.format("+(%s)", queryTerm));
210
			} else {
211
				queryTerm = null;
212
			}
213
			if (subCategoryId != 0) {
214
				mandatoryQ
215
						.add(String.format("+(subCategoryId_i:%s) +{!parent which=\"subCategoryId_i:%s\"} tagId_i:(%s)",
26745 amit.gupta 216
								subCategoryId, subCategoryId, StringUtils.join(TAG_IDS, " ")));
26607 amit.gupta 217
			} else if (hotDeal) {
218
				mandatoryQ.add(String.format("+{!parent which=\"hot_deals_b=true\"} tagId_i:(%s)",
26745 amit.gupta 219
						StringUtils.join(TAG_IDS, " ")));
26607 amit.gupta 220
 
221
			} else if (StringUtils.isNotBlank(brand)) {
222
				mandatoryQ.add(
223
						String.format("+(categoryId_i:%s) +(brand_ss:%s) +{!parent which=\"brand_ss:%s\"} tagId_i:(%s)",
26745 amit.gupta 224
								categoryId, brand, brand, StringUtils.join(TAG_IDS, " ")));
26607 amit.gupta 225
 
226
			} else {
227
				mandatoryQ.add(
26745 amit.gupta 228
						String.format("+{!parent which=\"id:catalog*\"} tagId_i:(%s)", StringUtils.join(TAG_IDS, " ")));
26607 amit.gupta 229
			}
230
			params.put("q", StringUtils.join(mandatoryQ, " "));
231
			params.put("fl", "*, [child parentFilter=id:catalog*]");
232
			if (queryTerm == null) {
233
				params.put("sort", "create_s desc");
234
			}
235
			params.put("start", String.valueOf(offset));
236
			params.put("rows", String.valueOf(limit));
237
			params.put("wt", "json");
238
			String response = null;
239
			try {
240
				response = rc.get(SchemeType.HTTP, "50.116.10.120", 8984, "solr/demo/select", params);
241
			} catch (HttpHostConnectException e) {
242
				throw new ProfitMandiBusinessException("", "", "Could not connect to host");
243
			}
244
			JSONObject solrResponseJSONObj = new JSONObject(response).getJSONObject("response");
245
			JSONArray docs = solrResponseJSONObj.getJSONArray("docs");
26909 amit.gupta 246
			dealResponse = getCatalogResponse(docs, false, userInfo.getRetailerId());
26607 amit.gupta 247
			/*
248
			 * if (Mongo.PARTNER_BLoCKED_BRANDS.containsKey(userInfo.getEmail())) {
249
			 * dealResponse.stream() .filter(x ->
250
			 * Mongo.PARTNER_BLoCKED_BRANDS.get(userInfo.getEmail()).contains(x.getBrand()))
251
			 * ; }
252
			 */
253
		} else {
254
			return responseSender.badRequest(
255
					new ProfitMandiBusinessException("Retailer id", userInfo.getUserId(), "NOT_FOFO_RETAILER"));
256
		}
257
		return responseSender.ok(dealResponse);
258
	}
26701 amit.gupta 259
 
26668 amit.gupta 260
	@RequestMapping(value = "/store/entity/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
261
	@ApiImplicitParams({
262
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
263
	@ApiOperation(value = "Get unit deal object")
264
	public ResponseEntity<?> getUnitFocoDeal(HttpServletRequest request, @PathVariable(value = "id") long id)
265
			throws ProfitMandiBusinessException {
266
		List<FofoCatalogResponse> dealResponse = new ArrayList<>();
267
		List<Integer> tagIds = Arrays.asList(4);
268
		UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
269
		if (roleManagerService.isPartner(userInfo.getRoleIds())) {
270
			String categoryId = "(3 OR 6)";
26745 amit.gupta 271
 
26668 amit.gupta 272
			RestClient rc = new RestClient();
273
			Map<String, String> params = new HashMap<>();
274
			List<String> mandatoryQ = new ArrayList<>();
275
			String catalogString = "catalog" + id;
26607 amit.gupta 276
 
26668 amit.gupta 277
			mandatoryQ.add(String.format("+(categoryId_i:%s) +(id:%s) +{!parent which=\"id:%s\"} tagId_i:(%s)",
278
					categoryId, catalogString, catalogString, StringUtils.join(tagIds, " ")));
279
 
280
			params.put("q", StringUtils.join(mandatoryQ, " "));
281
			params.put("fl", "*, [child parentFilter=id:catalog*]");
282
			params.put("sort", "rank_i asc, create_s desc");
283
			params.put("wt", "json");
284
			String response = null;
285
			try {
286
				response = rc.get(SchemeType.HTTP, "50.116.10.120", 8984, "solr/demo/select", params);
287
			} catch (HttpHostConnectException e) {
288
				throw new ProfitMandiBusinessException("", "", "Could not connect to host");
289
			}
290
			JSONObject solrResponseJSONObj = new JSONObject(response).getJSONObject("response");
291
			JSONArray docs = solrResponseJSONObj.getJSONArray("docs");
26909 amit.gupta 292
			dealResponse = getCatalogResponse(docs, false, userInfo.getRetailerId());
26668 amit.gupta 293
		} else {
294
			return responseSender.badRequest(
295
					new ProfitMandiBusinessException("Retailer id", userInfo.getUserId(), "NOT_FOFO_RETAILER"));
296
		}
297
		return responseSender.ok(dealResponse.get(0));
298
	}
299
 
26607 amit.gupta 300
	private Object toDealObject(JsonObject jsonObject) {
301
		if (jsonObject.get("dealObject") != null && jsonObject.get("dealObject").asInt() == 1) {
302
			return new Gson().fromJson(jsonObject.toString(), DealObjectResponse.class);
303
		}
304
		return new Gson().fromJson(jsonObject.toString(), DealsResponse.class);
305
	}
306
 
307
	@RequestMapping(value = "/store/brands", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
308
	@ApiImplicitParams({
309
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
310
	@ApiOperation(value = "Get brand list and count for category")
311
	public ResponseEntity<?> getBrands(HttpServletRequest request,
312
			@RequestParam(value = "category_id") String category_id) throws ProfitMandiBusinessException {
313
		logger.info("Request " + request.getParameterMap());
314
		String response = null;
315
		// TODO: move to properties
316
		String uri = ProfitMandiConstants.URL_BRANDS;
317
		RestClient rc = new RestClient();
318
		Map<String, String> params = new HashMap<>();
319
		params.put("category_id", category_id);
320
		List<DealBrands> dealBrandsResponse = null;
321
		try {
322
			response = rc.get(SchemeType.HTTP, host, port, uri, params);
323
		} catch (HttpHostConnectException e) {
324
			throw new ProfitMandiBusinessException("", "", "Could not connect to host");
325
		}
326
 
327
		dealBrandsResponse = new Gson().fromJson(response, new TypeToken<List<DealBrands>>() {
328
		}.getType());
329
 
330
		return responseSender.ok(dealBrandsResponse);
331
	}
332
 
26745 amit.gupta 333
	@RequestMapping(value = "/store/listing/{listingUrl}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
334
	public ResponseEntity<?> bestSellers(HttpServletRequest request, @PathVariable String listingUrl) throws Exception {
26654 amit.gupta 335
		List<FofoCatalogResponse> dealResponse = new ArrayList<>();
26909 amit.gupta 336
		UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
26666 amit.gupta 337
		List<Integer> tagIds = Arrays.asList(4);
26745 amit.gupta 338
 
339
		WebListing webListing = webListingRepository.selectByUrl("url");
340
		if (webListing == null) {
341
			throw new ProfitMandiBusinessException("Url", listingUrl, "Could not find the Url");
342
		}
343
		List<Integer> webProducts = webProductListingRepository.selectAllByWebListingId(webListing.getId()).stream()
344
				.filter(x -> x.getRank() > 0).map(x -> x.getEntityId()).collect(Collectors.toList());
345
 
26654 amit.gupta 346
		RestClient rc = new RestClient();
347
		Map<String, String> params = new HashMap<>();
348
		List<String> mandatoryQ = new ArrayList<>();
26745 amit.gupta 349
		mandatoryQ.add(String.format(
350
				"+{!parent which=\"catalogId_i:" + StringUtils.join(webProducts, " ") + "\"} tagId_i:(%s)",
351
				StringUtils.join(tagIds, " ")));
26654 amit.gupta 352
		params.put("q", StringUtils.join(mandatoryQ, " "));
353
		params.put("fl", "*, [child parentFilter=id:catalog*]");
354
		// params.put("sort", "create_s desc");
355
		params.put("start", String.valueOf(0));
356
		params.put("rows", String.valueOf(30));
357
		params.put("wt", "json");
358
		String response = null;
359
		try {
360
			response = rc.get(SchemeType.HTTP, "50.116.10.120", 8984, "solr/demo/select", params);
361
		} catch (HttpHostConnectException e) {
362
			throw new ProfitMandiBusinessException("", "", "Could not connect to host");
363
		}
364
		JSONObject solrResponseJSONObj = new JSONObject(response).getJSONObject("response");
365
		JSONArray docs = solrResponseJSONObj.getJSONArray("docs");
26745 amit.gupta 366
		final Ordering<Integer> rankOrdering = Ordering.explicit(webProducts);
26923 amit.gupta 367
		dealResponse = getCatalogResponse(docs, false, userInfo.getRetailerId()).stream()
368
				.sorted(new Comparator<FofoCatalogResponse>() {
369
					@Override
370
					public int compare(FofoCatalogResponse o1, FofoCatalogResponse o2) {
371
						return rankOrdering.compare(o1.getCatalogId(), o2.getCatalogId());
372
					}
373
				}).collect(Collectors.toList());
26745 amit.gupta 374
		webListing.setFofoCatalogResponses(dealResponse);
375
		return responseSender.ok(webListing);
26654 amit.gupta 376
	}
377
 
26632 amit.gupta 378
	@RequestMapping(value = "/store/otp/generateOTP", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
26783 amit.gupta 379
	public ResponseEntity<?> generateOtp(HttpServletRequest request, @RequestParam String mobile) throws Exception {
26630 amit.gupta 380
 
26857 amit.gupta 381
		return responseSender.ok(otpProcessor.generateOtp(mobile, OtpType.REGISTRATION));
26630 amit.gupta 382
 
383
	}
26652 amit.gupta 384
 
26784 amit.gupta 385
	@RequestMapping(value = "/store/checkmobile/{mobile}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
26833 amit.gupta 386
	public ResponseEntity<?> checkRegistrationUsingMobile(HttpServletRequest request, @PathVariable String mobile)
387
			throws Exception {
26774 amit.gupta 388
		try {
389
			Customer customer = customerRepository.selectByMobileNumber(mobile);
26777 amit.gupta 390
			customer.setPasswordExist(StringUtils.isNotEmpty(customer.getPassword()));
26774 amit.gupta 391
			return responseSender.ok(new CustomerModel(true, customer));
392
		} catch (Exception e) {
393
			return responseSender.ok(new CustomerModel(false, null));
394
		}
395
	}
26833 amit.gupta 396
 
26784 amit.gupta 397
	@RequestMapping(value = "/store/signin", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
398
	public ResponseEntity<?> signIn(HttpServletRequest request, @RequestBody UserModel userModel) throws Exception {
26833 amit.gupta 399
		if (customerService.authenticate(userModel.getMobile(), userModel.getPassword())) {
26784 amit.gupta 400
			return responseSender.ok(true);
401
		} else {
402
			return responseSender.ok(false);
403
		}
404
	}
26923 amit.gupta 405
 
26841 amit.gupta 406
	@RequestMapping(value = "/store/resetPassword", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
26923 amit.gupta 407
	public ResponseEntity<?> resetPassword(HttpServletRequest request, @RequestBody UserModel userModel)
408
			throws Exception {
26843 amit.gupta 409
		customerService.changePassword(userModel.getMobile(), userModel.getPassword());
26841 amit.gupta 410
		return responseSender.ok(true);
411
	}
26774 amit.gupta 412
 
26857 amit.gupta 413
	@RequestMapping(value = "/store/register", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
414
	public ResponseEntity<?> register(HttpServletRequest request, @RequestBody UserModel userModel) throws Exception {
415
		Customer customer = new Customer();
416
		customer.setPassword(userModel.getPassword());
417
		customer.setEmailId(userModel.getEmail());
418
		customer.setFirstName(userModel.getFirstName());
419
		customer.setLastName(userModel.getLastName());
420
		customer.setMobileNumber(userModel.getMobile());
421
		return responseSender.ok(customerService.addCustomer(customer));
422
	}
423
 
26648 amit.gupta 424
	@RequestMapping(value = "/store/confirmOrder", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
26857 amit.gupta 425
	public ResponseEntity<?> confirmOrder(HttpServletRequest request,
26652 amit.gupta 426
			@RequestBody CreatePendingOrderRequest createPendingOrderRequest) throws Exception {
26648 amit.gupta 427
		UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
428
		Integer storeId = userInfo.getRetailerId();
429
		createPendingOrderRequest.setFofoId(storeId);
26923 amit.gupta 430
		List<CreatePendingOrderItem> pendingOrderItems = createPendingOrderRequest.getCreatePendingOrderItem();
431
		List<CartItem> cartItems = new ArrayList<>();
432
		pendingOrderItems.stream().forEach(x -> {
433
			CartItem ci = new CartItem();
434
			ci.setItemId(x.getItemId());
435
			ci.setQuantity(x.getQuantity());
436
			ci.setSellingPrice(x.getSellingPrice());
437
			cartItems.add(ci);
438
		});
439
		CartResponse cr = this.validateCart(storeId, cartItems);
440
		if (cr.getCartMessageChanged() > 0 || cr.getTotalAmount() != createPendingOrderRequest.getTotalAmount()) {
441
			return responseSender.badRequest("Invalid request");
442
		}
443
		return responseSender.ok(this.pendingOrderService.createPendingOrder(createPendingOrderRequest, cr));
26652 amit.gupta 444
 
26648 amit.gupta 445
	}
26630 amit.gupta 446
 
26857 amit.gupta 447
	@RequestMapping(value = "/store/address", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
448
	@ApiImplicitParams({
449
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
450
	@ApiOperation(value = "Get brand list and count for category")
451
	public ResponseEntity<?> getAddress(HttpServletRequest request) throws Exception {
452
		UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
453
		Integer storeId = userInfo.getRetailerId();
454
		CustomRetailer customRetailer = retailerService.getFofoRetailer(storeId);
455
 
456
		return responseSender.ok(customRetailer.getAddress());
457
 
458
	}
459
 
460
	@RequestMapping(value = "/store/address/{pincode}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
461
	@ApiImplicitParams({
462
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
463
	@ApiOperation(value = "Get brand list and count for category")
464
	public ResponseEntity<?> getStoresByPincode(HttpServletRequest request, @PathVariable String pincode)
465
			throws Exception {
466
		List<PincodePartner> pincodePartners = pincodePartnerRepository.selectPartnersByPincode(pincode);
467
		int fofoId = DEFAULT_STORE;
468
		if (pincodePartners.size() > 0) {
469
			fofoId = pincodePartners.get(0).getFofoId();
470
		}
471
		return responseSender.ok(fofoStoreRepository.selectByRetailerId(fofoId).getCode());
472
	}
26923 amit.gupta 473
 
26855 tejbeer 474
	@RequestMapping(value = "/store/order", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
475
	public ResponseEntity<?> getOrderDetail(HttpServletRequest request, @RequestParam(value = "id") int id,
476
			@RequestParam(name = "offset") int offset, @RequestParam(name = "limit") int limit)
477
			throws ProfitMandiBusinessException {
478
		List<CustomerOrderDetail> customerOrderDetails = new ArrayList<>();
479
 
480
		List<PendingOrder> pendingOrders = pendingOrderRepository.selectByCustomerId(id, offset, limit);
481
		if (!pendingOrders.isEmpty()) {
482
			for (PendingOrder po : pendingOrders) {
483
				List<PendingOrderItem> pois = pendingOrderItemRepository.selectByOrderId(po.getId());
484
				for (PendingOrderItem poi : pois) {
485
 
486
					CustomerOrderDetail customerOrderDetail = new CustomerOrderDetail();
487
 
488
					Item item = itemRepository.selectById(poi.getItemId());
489
					customerOrderDetail.setBrand(item.getBrand());
490
					customerOrderDetail.setColor(item.getColor());
491
					customerOrderDetail.setId(poi.getOrderId());
492
					customerOrderDetail.setItemId(poi.getItemId());
493
					customerOrderDetail.setModelName(item.getModelName());
494
					customerOrderDetail.setModelNumber(item.getModelNumber());
495
					customerOrderDetail.setQuantity(poi.getQuantity());
26923 amit.gupta 496
					customerOrderDetail.setStatus(po.getStatus());
26855 tejbeer 497
					customerOrderDetail.setTotalPrice(poi.getSellingPrice());
498
					customerOrderDetail.setPayMethod(po.getPayMethod());
26861 tejbeer 499
					customerOrderDetail.setCreatedTimeStamp(po.getCreateTimestamp());
26855 tejbeer 500
					customerOrderDetails.add(customerOrderDetail);
501
				}
502
			}
503
		}
504
 
505
		return responseSender.ok(customerOrderDetails);
506
	}
507
 
26745 amit.gupta 508
	@RequestMapping(value = "/store/listing", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
509
	@Cacheable(value = "storelisting.all", cacheManager = "thirtyMinsTimeOutCacheManager")
26774 amit.gupta 510
	public ResponseEntity<?> getStoresListing(HttpServletRequest request) throws Exception {
26745 amit.gupta 511
		List<WebListing> webListings = webListingRepository.selectAllWebListing(Optional.of(true));
512
		for (WebListing webListing : webListings) {
26909 amit.gupta 513
			UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
514
			Integer storeId = userInfo.getRetailerId();
26923 amit.gupta 515
 
26745 amit.gupta 516
			List<Integer> webProducts = webProductListingRepository.selectAllByWebListingId(webListing.getId()).stream()
517
					.filter(x -> x.getRank() > 0).map(x -> x.getEntityId()).collect(Collectors.toList());
518
 
519
			RestClient rc = new RestClient();
520
			Map<String, String> params = new HashMap<>();
521
			List<String> mandatoryQ = new ArrayList<>();
522
			mandatoryQ.add(String.format(
523
					"+{!parent which=\"catalogId_i:" + StringUtils.join(webProducts, " ") + "\"} tagId_i:(%s)",
524
					StringUtils.join(TAG_IDS, " ")));
525
			params.put("q", StringUtils.join(mandatoryQ, " "));
526
			params.put("fl", "*, [child parentFilter=id:catalog*]");
527
			// params.put("sort", "create_s desc");
528
			params.put("start", String.valueOf(0));
529
			params.put("rows", String.valueOf(30));
530
			params.put("wt", "json");
531
			String response = null;
532
			try {
533
				response = rc.get(SchemeType.HTTP, "50.116.10.120", 8984, "solr/demo/select", params);
534
			} catch (HttpHostConnectException e) {
535
				throw new ProfitMandiBusinessException("", "", "Could not connect to host");
536
			}
537
			JSONObject solrResponseJSONObj = new JSONObject(response).getJSONObject("response");
538
			JSONArray docs = solrResponseJSONObj.getJSONArray("docs");
539
			final Ordering<Integer> colorOrdering = Ordering.explicit(webProducts);
26909 amit.gupta 540
			List<FofoCatalogResponse> dealResponse = getCatalogResponse(docs, false, userInfo.getRetailerId()).stream()
26745 amit.gupta 541
					.sorted(new Comparator<FofoCatalogResponse>() {
542
						@Override
543
						public int compare(FofoCatalogResponse o1, FofoCatalogResponse o2) {
544
							return colorOrdering.compare(o1.getCatalogId(), o2.getCatalogId());
545
						}
546
					}).collect(Collectors.toList());
547
			webListing.setFofoCatalogResponses(dealResponse);
548
		}
549
		return responseSender.ok(webListings);
550
	}
551
 
26652 amit.gupta 552
	@RequestMapping(value = "/store/cart", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
553
	@ApiImplicitParams({
26651 amit.gupta 554
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
26652 amit.gupta 555
	@ApiOperation(value = "Get brand list and count for category")
556
	public ResponseEntity<?> cart(HttpServletRequest request, @RequestBody AddCartRequest cartRequest)
557
			throws Exception {
26923 amit.gupta 558
		UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
559
		Integer storeId = userInfo.getRetailerId();
560
		ValidateCartResponse vc = new ValidateCartResponse(this.validateCart(storeId, cartRequest.getCartItems()),
561
				"Success", "Items added to cart successfully");
562
		return responseSender.ok(vc);
563
	}
564
 
565
	// Validate Cart for B2C Customers
566
	private CartResponse validateCart(int storeId, List<CartItem> cartItems) throws Exception {
567
		cartItems = cartItems.stream().filter(x -> x.getQuantity() > 0).collect(Collectors.toList());
568
		List<Integer> itemIds = cartItems.stream().map(x -> x.getItemId()).collect(Collectors.toList());
569
		Map<Integer, AvailabilityModel> inventoryItemAvailabilityMap = inventoryService.getStoreAndOurStock(storeId,
570
				itemIds);
26607 amit.gupta 571
		CartResponse cartResponse = new CartResponse();
26612 amit.gupta 572
		List<CartItemResponseModel> cartItemResponseModels = new ArrayList<>();
573
		cartResponse.setCartItems(cartItemResponseModels);
26607 amit.gupta 574
		Set<Integer> itemsIdsSet = new HashSet<>(itemIds);
26668 amit.gupta 575
		logger.info("Store Id {}, Item Ids {}", storeId, itemsIdsSet);
26607 amit.gupta 576
 
577
		Map<Integer, Item> itemsMap = itemRepository.selectByIds(itemsIdsSet).stream()
578
				.collect(Collectors.toMap(x -> x.getId(), x -> x));
579
 
26923 amit.gupta 580
		Map<Integer, TagListing> tagListingMap = tagListingRepository
26607 amit.gupta 581
				.selectByItemIdsAndTagIds(new HashSet<>(itemIds), new HashSet<>(Arrays.asList(4))).stream()
582
				.collect(Collectors.toMap(x -> x.getItemId(), x -> x));
583
 
584
		List<Integer> catalogIds = itemsMap.values().stream().map(x -> x.getCatalogItemId())
585
				.collect(Collectors.toList());
586
 
587
		Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
588
 
589
		// cartResponse.getCartItems()
26923 amit.gupta 590
		int cartMessageChanged = 0;
591
		int cartMessageOOS = 0;
592
		int totalAmount = 0;
593
		int totalQty = 0;
594
		for (CartItem cartItem : cartItems) {
26607 amit.gupta 595
			Item item = itemsMap.get(cartItem.getItemId());
26923 amit.gupta 596
			TagListing tagListing = tagListingMap.get(cartItem.getItemId());
597
			Float cashback = schemeService.getItemSchemeCashBack().get(cartItem.getItemId());
598
			cashback = cashback == null ? 0 : cashback;
599
			float itemSellingPrice = tagListing.getMop() - cashback;
26607 amit.gupta 600
			CartItemResponseModel cartItemResponseModel = new CartItemResponseModel();
26923 amit.gupta 601
			cartItemResponseModel.setSellingPrice(cartItem.getSellingPrice());
602
			if (itemSellingPrice != cartItem.getSellingPrice()) {
603
				cartItemResponseModel.setSellingPrice(itemSellingPrice);
604
				cartMessageChanged++;
605
			}
26628 amit.gupta 606
			int estimate = -2;
26923 amit.gupta 607
			int qtyRequired = (int) cartItem.getQuantity();
608
			AvailabilityModel availabilityModel = inventoryItemAvailabilityMap.get(cartItem.getItemId());
609
			cartItemResponseModel.setMaxQuantity(availabilityModel.getMaxAvailability());
610
			if (availabilityModel.getStoreAvailability() >= qtyRequired) {
611
				estimate = 0;
612
			} else if (availabilityModel.getWarehouseAvailability() >= qtyRequired) {
26628 amit.gupta 613
				estimate = 2;
26923 amit.gupta 614
			} else if (availabilityModel.getStoreAvailability() > 0) {
615
				estimate = 0;
616
				qtyRequired = availabilityModel.getStoreAvailability();
617
				cartMessageChanged++;
618
			} else if (availabilityModel.getWarehouseAvailability() > 0) {
619
				qtyRequired = availabilityModel.getWarehouseAvailability();
620
				estimate = 2;
621
				cartMessageChanged++;
26620 amit.gupta 622
			} else {
26923 amit.gupta 623
				qtyRequired = 0;
26926 amit.gupta 624
				cartMessageChanged++;
26607 amit.gupta 625
			}
26923 amit.gupta 626
			cartItemResponseModel.setQuantity(qtyRequired);
26630 amit.gupta 627
			if (estimate >= 0 && LocalTime.now().isAfter(CUTOFF_TIME)) {
26628 amit.gupta 628
				estimate = estimate + 1;
629
			}
26923 amit.gupta 630
			totalQty += qtyRequired;
631
			totalAmount += qtyRequired * itemSellingPrice;
26628 amit.gupta 632
			cartItemResponseModel.setEstimate(estimate);
26616 amit.gupta 633
			cartItemResponseModel.setTitle(item.getItemDescriptionNoColor());
26614 amit.gupta 634
			cartItemResponseModel.setItemId(cartItem.getItemId());
26615 amit.gupta 635
			cartItemResponseModel.setMinBuyQuantity(1);
26923 amit.gupta 636
			cartItemResponseModel.setQuantity(qtyRequired);
26621 amit.gupta 637
			cartItemResponseModel.setQuantityStep(1);
26923 amit.gupta 638
			cartItemResponseModel.setMaxQuantity(availabilityModel.getMaxAvailability());
26607 amit.gupta 639
			cartItemResponseModel.setCatalogItemId(item.getCatalogItemId());
640
			cartItemResponseModel.setImageUrl(contentMap.get(item.getCatalogItemId()).getString("imageUrl_s"));
641
			cartItemResponseModel.setColor(item.getColor());
26620 amit.gupta 642
			cartItemResponseModels.add(cartItemResponseModel);
26607 amit.gupta 643
		}
26923 amit.gupta 644
		cartResponse.setCartItems(cartItemResponseModels);
645
		cartResponse.setCartMessageChanged(cartMessageChanged);
646
		cartResponse.setCartMessageOOS(cartMessageOOS);
647
		int maxEstimate = cartItemResponseModels.stream().mapToInt(x -> x.getEstimate()).max().getAsInt();
648
		cartResponse.setMaxEstimate(maxEstimate);
649
		cartResponse.setTotalAmount(totalAmount);
650
		cartResponse.setTotalQty(totalQty);
26652 amit.gupta 651
 
26923 amit.gupta 652
		return cartResponse;
653
 
26648 amit.gupta 654
	}
26607 amit.gupta 655
 
26909 amit.gupta 656
	private List<FofoCatalogResponse> getCatalogResponse(JSONArray docs, boolean hotDeal, int fofoId)
26607 amit.gupta 657
			throws ProfitMandiBusinessException {
26909 amit.gupta 658
		Map<Integer, Integer> ourItemAvailabilityMap = null;
659
		Map<Integer, Integer> partnerStockAvailabilityMap = null;
26607 amit.gupta 660
		List<FofoCatalogResponse> dealResponse = new ArrayList<>();
661
		List<Integer> tagIds = Arrays.asList(4);
662
		if (docs.length() > 0) {
663
			HashSet<Integer> itemsSet = new HashSet<>();
664
			for (int i = 0; i < docs.length(); i++) {
665
				JSONObject doc = docs.getJSONObject(i);
666
				if (doc.has("_childDocuments_")) {
667
					for (int j = 0; j < doc.getJSONArray("_childDocuments_").length(); j++) {
668
						JSONObject childItem = doc.getJSONArray("_childDocuments_").getJSONObject(j);
669
						int itemId = childItem.getInt("itemId_i");
670
						itemsSet.add(itemId);
671
					}
672
				}
673
			}
674
			if (itemsSet.size() == 0) {
675
				return dealResponse;
676
			}
26909 amit.gupta 677
			if (hotDeal) {
678
				ourItemAvailabilityMap = saholicInventoryService
679
						.getTotalAvailabilityByItemIds(new ArrayList<>(itemsSet));
680
			} else if (fofoId > 0) {
681
				partnerStockAvailabilityMap = currentInventorySnapshotRepository.selectItemsStock(fofoId).stream()
682
						.collect(Collectors.toMap(x -> x.getItemId(), x -> x.getAvailability()));
683
				ourItemAvailabilityMap = saholicInventoryService
684
						.getTotalAvailabilityByItemIds(new ArrayList<>(itemsSet));
685
			}
26607 amit.gupta 686
		}
687
 
688
		for (int i = 0; i < docs.length(); i++) {
689
			Map<Integer, FofoAvailabilityInfo> fofoAvailabilityInfoMap = new HashMap<>();
690
			JSONObject doc = docs.getJSONObject(i);
691
			FofoCatalogResponse ffdr = new FofoCatalogResponse();
692
			ffdr.setCatalogId(doc.getInt("catalogId_i"));
693
			ffdr.setImageUrl(doc.getString("imageUrl_s"));
694
			ffdr.setTitle(doc.getString("title_s"));
695
			try {
696
				ffdr.setFeature(doc.getString("feature_s"));
697
			} catch (Exception e) {
698
				ffdr.setFeature(null);
699
				logger.info("Could not find Feature_s for {}", ffdr.getCatalogId());
700
			}
701
			ffdr.setBrand(doc.getJSONArray("brand_ss").getString(0));
702
			if (doc.has("_childDocuments_")) {
703
				for (int j = 0; j < doc.getJSONArray("_childDocuments_").length(); j++) {
704
					JSONObject childItem = doc.getJSONArray("_childDocuments_").getJSONObject(j);
705
					int itemId = childItem.getInt("itemId_i");
706
					float sellingPrice = (float) childItem.getDouble("sellingPrice_f");
707
					if (fofoAvailabilityInfoMap.containsKey(itemId)) {
708
						if (fofoAvailabilityInfoMap.get(itemId).getSellingPrice() > sellingPrice) {
709
							fofoAvailabilityInfoMap.get(itemId).setSellingPrice(sellingPrice);
710
							fofoAvailabilityInfoMap.get(itemId).setMop((float) childItem.getDouble("mop_f"));
711
						}
712
					} else {
713
						FofoAvailabilityInfo fdi = new FofoAvailabilityInfo();
26909 amit.gupta 714
						fdi.setSellingPrice(sellingPrice);
715
						fdi.setActive(childItem.getBoolean("active_b"));
716
						fdi.setMrp(childItem.getDouble("mrp_f"));
26607 amit.gupta 717
						fdi.setMop((float) childItem.getDouble("mop_f"));
718
						fdi.setColor(childItem.has("color_s") ? childItem.getString("color_s") : "");
719
						fdi.setTagId(childItem.getInt("tagId_i"));
720
						fdi.setItem_id(itemId);
26909 amit.gupta 721
						Float cashBack = schemeService.getItemSchemeCashBack().get(itemId);
722
						cashBack = cashBack == null ? 0 : cashBack;
723
						fdi.setCashback(cashBack);
26673 amit.gupta 724
						fdi.setMinBuyQuantity(1);
26909 amit.gupta 725
						if (hotDeal) {
26607 amit.gupta 726
							try {
26909 amit.gupta 727
								int totalAvailability = ourItemAvailabilityMap.get(itemId);
728
								if (totalAvailability <= 0) {
729
									continue;
730
								}
731
								fdi.setAvailability(ourItemAvailabilityMap.get(itemId));
26607 amit.gupta 732
							} catch (Exception e) {
733
								continue;
734
							}
26909 amit.gupta 735
						} else if (fofoId == 0) {
736
							// For accessories item availability should at be ordered for Rs.1000
737
							fdi.setAvailability(100);
738
							Item item = itemRepository.selectById(itemId);
739
							// In case its tampered glass moq should be 5
740
							if (item.getCategoryId() == 10020) {
741
								fdi.setMinBuyQuantity(5);
26607 amit.gupta 742
							}
743
						} else {
26909 amit.gupta 744
							int ourStockAvailability = ourItemAvailabilityMap.get(itemId) == null ? 0
745
									: ourItemAvailabilityMap.get(itemId);
746
							int partnerAvailability = partnerStockAvailabilityMap.get(itemId) == null ? 0
747
									: partnerStockAvailabilityMap.get(itemId);
748
							fdi.setAvailability(ourStockAvailability + partnerAvailability);
26607 amit.gupta 749
						}
750
						fdi.setQuantityStep(1);
26909 amit.gupta 751
						fdi.setMaxQuantity(Math.min(fdi.getAvailability(), 100));
26607 amit.gupta 752
						fofoAvailabilityInfoMap.put(itemId, fdi);
753
					}
754
				}
755
			}
756
			if (fofoAvailabilityInfoMap.values().size() > 0) {
26909 amit.gupta 757
				ffdr.setItems(fofoAvailabilityInfoMap.values().stream()
26923 amit.gupta 758
						.sorted((x, y) -> y.getAvailability() - x.getAvailability()).collect(Collectors.toList()));
26607 amit.gupta 759
				dealResponse.add(ffdr);
760
			}
761
		}
762
		return dealResponse;
26909 amit.gupta 763
 
26607 amit.gupta 764
	}
26923 amit.gupta 765
 
766
	@GetMapping(value = "store/order-status/{pendingOrderId}")
767
	public ResponseEntity<?> orderStatus(HttpServletRequest request, @PathVariable int pendingOrderId) throws Exception {
768
		PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderId);
769
		List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectByOrderId(pendingOrder.getId());
770
		List<Integer> catalogIds = new ArrayList<>();
771
		for(PendingOrderItem pendingOrderItem: pendingOrderItems) {
772
			Item item = itemRepository.selectById(pendingOrderItem.getItemId());
773
			pendingOrderItem.setItemName(item.getItemDescription());
774
			catalogIds.add(item.getCatalogItemId());
775
		}
776
		Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
777
		for(PendingOrderItem pendingOrderItem: pendingOrderItems) {
778
			Item item = itemRepository.selectById(pendingOrderItem.getItemId());
779
			JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
780
			pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
781
		}
782
		pendingOrder.setPendingOrderItems(pendingOrderItems);
783
		return responseSender.ok(pendingOrder);
784
	}
785
 
26833 amit.gupta 786
	@RequestMapping(value = "/store/addresses/{customerId}", method = RequestMethod.GET)
787
	public ResponseEntity<?> getAll(HttpServletRequest request, @PathVariable int customerId) throws Throwable {
26788 amit.gupta 788
		return responseSender.ok(customerAddressRepository.selectByCustomerId(customerId));
789
	}
26833 amit.gupta 790
 
26857 amit.gupta 791
	@RequestMapping(value = "/store/address", method = RequestMethod.POST)
792
	public ResponseEntity<?> addAddress(HttpServletRequest request, @RequestBody CustomerAddress customerAddress)
793
			throws Throwable {
794
		customerAddressRepository.persist(customerAddress);
795
		return responseSender.ok(customerAddress);
796
	}
797
 
26861 tejbeer 798
	@RequestMapping(value = "/store/updateCustomer", method = RequestMethod.POST)
799
	public ResponseEntity<?> updateCustomerProfile(HttpServletRequest request, @RequestBody Customer customer)
800
			throws Throwable {
801
		Customer cust = customerRepository.selectById(customer.getId());
802
		cust.setGender(customer.getGender());
26867 tejbeer 803
		cust.setProfileImageId(customer.getProfileImageId());
26861 tejbeer 804
		cust.setDob(customer.getDob());
805
		return responseSender.ok(cust);
806
	}
807
 
26774 amit.gupta 808
}
809
 
26784 amit.gupta 810
class UserModel {
26857 amit.gupta 811
	@JsonProperty(required = true)
26784 amit.gupta 812
	private String mobile;
26857 amit.gupta 813
	@JsonProperty(required = true)
26784 amit.gupta 814
	private String password;
26857 amit.gupta 815
	@JsonProperty(required = false)
816
	private String firstName;
817
	@JsonProperty(required = false)
818
	private String lastName;
819
	@JsonProperty(required = false)
820
	private String email;
26833 amit.gupta 821
 
26784 amit.gupta 822
	@Override
823
	public String toString() {
824
		return "UserModel [mobile=" + mobile + ", password=" + password + "]";
825
	}
26833 amit.gupta 826
 
26784 amit.gupta 827
	public String getMobile() {
828
		return mobile;
829
	}
26833 amit.gupta 830
 
26784 amit.gupta 831
	public void setMobile(String mobile) {
832
		this.mobile = mobile;
833
	}
26833 amit.gupta 834
 
26784 amit.gupta 835
	public String getPassword() {
836
		return password;
837
	}
26833 amit.gupta 838
 
26784 amit.gupta 839
	public void setPassword(String password) {
840
		this.password = password;
841
	}
26857 amit.gupta 842
 
843
	public String getFirstName() {
844
		return firstName;
845
	}
846
 
847
	public void setFirstName(String firstName) {
848
		this.firstName = firstName;
849
	}
850
 
851
	public String getLastName() {
852
		return lastName;
853
	}
854
 
855
	public void setLastName(String lastName) {
856
		this.lastName = lastName;
857
	}
858
 
859
	public String getEmail() {
860
		return email;
861
	}
862
 
863
	public void setEmail(String email) {
864
		this.email = email;
865
	}
866
 
26784 amit.gupta 867
}
868
 
26774 amit.gupta 869
class CustomerModel {
26783 amit.gupta 870
 
26774 amit.gupta 871
	@JsonProperty(required = false)
872
	private Customer customer;
873
	@JsonProperty(required = true)
874
	private boolean exists;
875
 
876
	public CustomerModel(boolean exists, Customer customer) {
877
		super();
878
		this.customer = customer;
879
		this.exists = exists;
880
	}
881
 
882
	@Override
883
	public String toString() {
884
		return "CustomerModel [customer=" + customer + ", exists=" + exists + "]";
885
	}
886
 
887
	public Customer getCustomer() {
888
		return customer;
889
	}
890
 
891
	public void setCustomer(Customer customer) {
892
		this.customer = customer;
893
	}
894
 
895
	public boolean isExists() {
896
		return exists;
897
	}
898
 
899
	public void setExists(boolean exists) {
900
		this.exists = exists;
901
	}
26607 amit.gupta 902
}