Subversion Repositories SmartDukaan

Rev

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