Rev 35079 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package com.spice.profitmandi.web.controller;import com.fasterxml.jackson.core.type.TypeReference;import com.fasterxml.jackson.databind.ObjectMapper;import com.spice.profitmandi.dao.entity.Page;import com.spice.profitmandi.dao.entity.dtr.WebListing;import com.spice.profitmandi.dao.repository.dtr.WebListingRepository;import com.spice.profitmandi.service.page.PageRepository;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.http.ResponseEntity;import org.springframework.stereotype.Controller;import org.springframework.transaction.annotation.Transactional;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletRequest;import java.util.*;import java.util.stream.Collectors;@Controller@RequestMapping("/pages")@Transactional(readOnly = true, rollbackFor = Throwable.class)public class PageController {private static final Logger logger = LogManager.getLogger(PageController.class);@Autowiredprivate PageRepository pageRepository;@Autowiredprivate WebListingRepository webListingRepository;private final ObjectMapper objectMapper = new ObjectMapper();@GetMappingpublic ResponseEntity<?> index(HttpServletRequest request) {List<Page> pages = pageRepository.selectAll();List<Map<String, Object>> parsedPages = pages.stream().map(p -> {try {Map<String, Object> data = objectMapper.readValue(p.getSectionData(),new TypeReference<Map<String, Object>>() {});data.put("tabTitle", p.getTabTitle());Map<String, Object> pageMap = new HashMap<>();pageMap.put("id", p.getId());pageMap.put("title", p.getTitle());pageMap.put("slug", p.getSlug());pageMap.put("visibleOn", p.getVisibleOn());pageMap.put("sectionGroup", p.getSectionGroup());pageMap.put("sectionBelow", p.getSectionBelow());pageMap.put("status", p.isStatus());pageMap.put("sectionOrder", p.getSectionOrder());pageMap.put("sectionData", data);return pageMap;} catch (Exception e) {throw new RuntimeException("Failed to parse sectionData", e);}}).collect(Collectors.toList());List<Map<String, Object>> merged = parsedPages.stream().filter(p -> "Parent".equals(p.get("sectionGroup"))) // only parents.map(parent -> {List<Map<String, Object>> children = parsedPages.stream().filter(c -> String.valueOf(parent.get("id")).equals(c.get("sectionGroup"))).collect(Collectors.toList());List<Object> sectionDataList = new ArrayList<>();sectionDataList.add(parent.get("sectionData"));children.forEach(c -> sectionDataList.add(c.get("sectionData")));if (parent.get("sectionBelow") == null && !children.isEmpty()) {Object firstChildBelow = children.get(0).get("sectionBelow");if (firstChildBelow != null) {parent.put("sectionBelow", firstChildBelow);}}try {parent.put("sectionData", objectMapper.writeValueAsString(sectionDataList));} catch (Exception e) {throw new RuntimeException("Failed to serialize sectionData list", e);}return parent;}).sorted(Comparator.comparingInt(p -> (int) p.get("sectionOrder"))).collect(Collectors.toList());return ResponseEntity.ok(merged);}@GetMapping("/{page}")public ResponseEntity<?> getPage(HttpServletRequest request, @PathVariable String page) {Page pageDetail = pageRepository.selectPageBySlug(page);return ResponseEntity.ok(pageDetail);}@GetMapping("/web-listing/{id}")public ResponseEntity<?> webListing(HttpServletRequest request, @PathVariable int id) {WebListing web = webListingRepository.selectById(id);return ResponseEntity.ok(web);}}