Subversion Repositories SmartDukaan

Rev

Rev 35079 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
34950 vikas 1
package com.spice.profitmandi.web.controller;
2
 
3
import com.fasterxml.jackson.core.type.TypeReference;
4
import com.fasterxml.jackson.databind.ObjectMapper;
5
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
6
import com.spice.profitmandi.dao.entity.Page;
7
import com.spice.profitmandi.dao.entity.dtr.WebListing;
8
import com.spice.profitmandi.dao.repository.dtr.WebListingRepository;
9
import com.spice.profitmandi.service.page.PageRepository;
10
import org.apache.logging.log4j.LogManager;
11
import org.apache.logging.log4j.Logger;
12
import org.springframework.beans.factory.annotation.Autowired;
13
import org.springframework.http.ResponseEntity;
14
import org.springframework.stereotype.Controller;
15
import org.springframework.transaction.annotation.Transactional;
16
import org.springframework.web.bind.annotation.GetMapping;
17
import org.springframework.web.bind.annotation.PathVariable;
18
import org.springframework.web.bind.annotation.RequestMapping;
19
 
20
import javax.servlet.http.HttpServletRequest;
21
import java.util.*;
22
import java.util.stream.Collectors;
23
 
24
@Controller
25
@RequestMapping("/pages")
26
@Transactional(rollbackFor = Throwable.class)
27
public class PageController {
28
    private static final Logger logger = LogManager.getLogger(PageController.class);
29
 
30
    @Autowired
31
    private PageRepository pageRepository;
32
 
33
    @Autowired
34
    private WebListingRepository webListingRepository;
35
 
36
    private final ObjectMapper objectMapper = new ObjectMapper();
37
 
38
    @GetMapping
39
    public ResponseEntity<?> index(HttpServletRequest request) {
40
        List<Page> pages = pageRepository.selectAll();
41
        List<Map<String, Object>> parsedPages = pages.stream().map(p -> {
42
            try {
43
                Map<String, Object> data = objectMapper.readValue(
44
                    p.getSectionData(),
45
                    new TypeReference<Map<String, Object>>() {}
46
                );
47
 
48
                data.put("tabTitle", p.getTabTitle());
49
 
50
                Map<String, Object> pageMap = new HashMap<>();
51
                pageMap.put("id", p.getId());
52
                pageMap.put("title", p.getTitle());
53
                pageMap.put("slug", p.getSlug());
54
                pageMap.put("visibleOn", p.getVisibleOn());
55
                pageMap.put("sectionGroup", p.getSectionGroup());
56
                pageMap.put("sectionBelow", p.getSectionBelow());
57
                pageMap.put("status", p.isStatus());
58
                pageMap.put("sectionOrder", p.getSectionOrder());
59
                pageMap.put("sectionData", data);
60
                return pageMap;
61
            } catch (Exception e) {
62
                throw new RuntimeException("Failed to parse sectionData", e);
63
            }
64
        }).collect(Collectors.toList());
65
 
66
        List<Map<String, Object>> merged = parsedPages.stream()
67
        .filter(p -> "Parent".equals(p.get("sectionGroup"))) // only parents
68
        .map(parent -> {
69
 
70
            List<Map<String, Object>> children = parsedPages.stream()
71
                    .filter(c -> String.valueOf(parent.get("id")).equals(c.get("sectionGroup")))
72
                    .collect(Collectors.toList());
73
 
74
            List<Object> sectionDataList = new ArrayList<>();
75
            sectionDataList.add(parent.get("sectionData"));
76
            children.forEach(c -> sectionDataList.add(c.get("sectionData")));
77
 
78
            try {
79
                parent.put("sectionData", objectMapper.writeValueAsString(sectionDataList));
80
            } catch (Exception e) {
81
                throw new RuntimeException("Failed to serialize sectionData list", e);
82
            }
83
 
84
            return parent;
85
        })
86
        .sorted(Comparator.comparingInt(p -> (int) p.get("sectionOrder")))
87
        .collect(Collectors.toList());
88
 
89
        return ResponseEntity.ok(merged);
90
    }
91
 
92
    @GetMapping("/{page}")
93
    public ResponseEntity<?> getPage(HttpServletRequest request, @PathVariable String page) {
94
        Page pageDetail = pageRepository.selectPageBySlug(page);
95
        return ResponseEntity.ok(pageDetail);
96
    }
97
 
98
    @GetMapping("/web-listing/{id}")
99
    public ResponseEntity<?> webListing(HttpServletRequest request, @PathVariable int id) {
100
        WebListing web = webListingRepository.selectById(id);
101
        return ResponseEntity.ok(web);
102
    }
103
}