Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
32367 tejbeer 1
package com.spice.profitmandi.web.controller;
2
 
3
import java.security.Key;
32440 tejbeer 4
import java.time.LocalDate;
5
import java.time.LocalDateTime;
6
import java.time.ZoneId;
7
import java.time.format.DateTimeFormatter;
8
import java.util.Arrays;
32367 tejbeer 9
import java.util.HashMap;
32440 tejbeer 10
import java.util.List;
32367 tejbeer 11
import java.util.Map;
12
 
13
import javax.servlet.http.HttpServletRequest;
14
 
32440 tejbeer 15
import org.apache.http.Header;
16
import org.apache.http.HttpResponse;
32367 tejbeer 17
import org.apache.http.conn.HttpHostConnectException;
18
import org.apache.logging.log4j.LogManager;
19
import org.apache.logging.log4j.Logger;
32440 tejbeer 20
import org.json.JSONObject;
32367 tejbeer 21
import org.springframework.beans.factory.annotation.Autowired;
22
import org.springframework.beans.factory.annotation.Value;
23
import org.springframework.http.MediaType;
24
import org.springframework.http.ResponseEntity;
25
import org.springframework.stereotype.Controller;
26
import org.springframework.transaction.annotation.Transactional;
27
import org.springframework.web.bind.annotation.RequestBody;
28
import org.springframework.web.bind.annotation.RequestMapping;
29
import org.springframework.web.bind.annotation.RequestMethod;
30
import org.springframework.web.bind.annotation.RequestParam;
31
 
32440 tejbeer 32
import com.google.gson.Gson;
32367 tejbeer 33
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
34
import com.spice.profitmandi.common.web.client.RestClient;
35
import com.spice.profitmandi.common.web.util.ResponseSender;
32440 tejbeer 36
import com.spice.profitmandi.dao.entity.fofo.Campaign;
32367 tejbeer 37
import com.spice.profitmandi.dao.entity.fofo.Customer;
32440 tejbeer 38
import com.spice.profitmandi.dao.entity.fofo.ThriweMembers;
32367 tejbeer 39
import com.spice.profitmandi.dao.model.thriwe.benefit.BenefitGroup;
32440 tejbeer 40
import com.spice.profitmandi.dao.model.thriwe.benefit.BenefitResponse;
41
import com.spice.profitmandi.dao.model.thriwe.benefitConfiguration.BenefitConfigurationResponse;
42
import com.spice.profitmandi.dao.repository.fofo.CampaignRepository;
32367 tejbeer 43
import com.spice.profitmandi.dao.repository.fofo.CustomerRepository;
32440 tejbeer 44
import com.spice.profitmandi.dao.repository.fofo.ThriweMemberRepository;
32367 tejbeer 45
 
32440 tejbeer 46
import io.jsonwebtoken.Jwts;
47
import io.jsonwebtoken.security.Keys;
32367 tejbeer 48
import io.swagger.annotations.ApiImplicitParam;
49
import io.swagger.annotations.ApiImplicitParams;
50
import io.swagger.annotations.ApiOperation;
51
 
52
@Controller
53
@Transactional(rollbackFor = Throwable.class)
54
public class ThriweController {
55
 
56
    @Autowired
57
    private ResponseSender<?> responseSender;
58
 
59
    @Autowired
32440 tejbeer 60
    private CustomerRepository customerRepository;
61
 
62
    @Autowired
32367 tejbeer 63
    RestClient restClient;
64
 
32440 tejbeer 65
   // @Value("${thriwe.account.token}")
32367 tejbeer 66
    private String token;
67
 
68
    @Autowired
32440 tejbeer 69
    CampaignRepository campaignRepository;
32367 tejbeer 70
 
32440 tejbeer 71
    @Autowired
72
    private ThriweMemberRepository thriweMemberRepository;
32367 tejbeer 73
 
32440 tejbeer 74
    @Autowired
75
    private Gson gson;
76
 
77
 
32367 tejbeer 78
    private static final Logger LOGGER = LogManager.getLogger(ThriweController.class);
79
 
80
 
32440 tejbeer 81
    @RequestMapping(value = "/thriwe/validate/customer", method = RequestMethod.GET)
32367 tejbeer 82
    public ResponseEntity<?> validateCustomer(HttpServletRequest request) throws HttpHostConnectException, ProfitMandiBusinessException {
83
 
32440 tejbeer 84
        List<Campaign> campaigns = campaignRepository.selectAll();
85
        String memberShipId = null;
86
        if (!campaigns.isEmpty()) {
32367 tejbeer 87
 
32440 tejbeer 88
            Campaign campaign = campaigns.get(0);
89
            Customer customer = customerRepository.selectById(32697);
32367 tejbeer 90
 
32440 tejbeer 91
            Map<String, String> params = new HashMap<String, String>();
92
            String userName = customer.getId() + "-" + campaign.getId();
93
            LOGGER.info("token {}", token);
32367 tejbeer 94
 
95
 
32440 tejbeer 96
            String secretKey = "smartdukan@thriwe_123smartdukaan";
32367 tejbeer 97
 
32440 tejbeer 98
            JSONObject jsonObject = new JSONObject();
99
            jsonObject.put("exp", LocalDateTime.now().plusDays(4).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() / 1000);
100
            jsonObject.put("iat", LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() / 1000);
101
            jsonObject.put("userName", userName);
102
            jsonObject.put("email", customer.getEmailId());
103
            jsonObject.put("mobileNumber", customer.getMobileNumber());
104
            jsonObject.put("firstName", customer.getFirstName());
105
            jsonObject.put("lastName", customer.getLastName());
106
            jsonObject.put("expiryDate", LocalDate.now().plusDays(4).format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));
32367 tejbeer 107
 
32440 tejbeer 108
            LOGGER.info("jsonObject {}", jsonObject.toString());
32367 tejbeer 109
 
32440 tejbeer 110
            Map<String, Object> headersjwt = new HashMap<>();
111
            headersjwt.put("alg", "HS256");
112
            headersjwt.put("typ", "JWT");
32367 tejbeer 113
 
32440 tejbeer 114
            Key key = Keys.hmacShaKeyFor(secretKey.getBytes());
32367 tejbeer 115
 
32440 tejbeer 116
            String jwt = Jwts.builder().setHeaderParam("alg", "HS256").setHeaderParam("typ", "JWT").setPayload(jsonObject.toString()).signWith(key).compact();
32367 tejbeer 117
 
32440 tejbeer 118
            LOGGER.info("jwt {}", jwt);
32367 tejbeer 119
 
120
 
32440 tejbeer 121
            Map<String, String> headers = new HashMap<String, String>();
122
            headers.put("Project-Code", "SMART_DUKAAN");
123
            headers.put("X-Auth-Token", jwt);
124
            String url = "https://staging-india-api-gateway.thriwe.com/validate-user";
125
            HttpResponse response = restClient.getResponse(url, params, headers);
126
            LOGGER.info("response {}", response);
32367 tejbeer 127
 
128
 
32440 tejbeer 129
            Header[] authToken = response.getHeaders("Authorization");
130
            LOGGER.info("authToken {}", Arrays.asList(authToken).get(0).getValue());
32367 tejbeer 131
 
32440 tejbeer 132
            ThriweMembers thriweMember = thriweMemberRepository.selectByUsername(userName, campaign.getStartDate(), campaign.getEndDate());
133
            LOGGER.info("thriweMembers {}", thriweMember);
32367 tejbeer 134
 
32440 tejbeer 135
            if (thriweMember != null) {
32367 tejbeer 136
 
32440 tejbeer 137
                thriweMember.setAuthToken(Arrays.asList(authToken).get(0).getValue());
138
 
139
                try {
140
                    String responseString = restClient.toString(response.getEntity().getContent());
141
                    LOGGER.info("responseString {}", new JSONObject(responseString).get("membershipId"));
142
                    JSONObject responseJson = new JSONObject(responseString);
143
                    String membershipId = responseJson.getString("membershipId");
144
                    thriweMember.setMembershipId(membershipId);
145
                    memberShipId = thriweMember.getMembershipId();
146
                } catch (Exception e) {
147
                    // TODO: handle exception
148
                }
149
 
150
 
151
            }
152
        }
153
 
154
        return responseSender.ok(memberShipId);
32367 tejbeer 155
    }
156
 
32440 tejbeer 157
    @RequestMapping(value = "/thriwe/benefit-configs", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
32367 tejbeer 158
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
159
    @ApiOperation(value = "")
32440 tejbeer 160
    public ResponseEntity<?> benefitConfigs(HttpServletRequest request, @RequestParam String membershipId) throws HttpHostConnectException, ProfitMandiBusinessException {
32367 tejbeer 161
 
32440 tejbeer 162
 
163
        ThriweMembers thriweMember = thriweMemberRepository.selectByMembershipId(membershipId);
164
 
32367 tejbeer 165
        Map<String, String> params = new HashMap<String, String>();
166
        Map<String, String> headers = new HashMap<String, String>();
167
 
32440 tejbeer 168
        headers.put("Authorization", thriweMember.getAuthToken());
32367 tejbeer 169
        headers.put("Project-Code", "SMART_DUKAAN");
170
 
171
        String url = "https://staging-india-api-gateway.thriwe.com/client/benefit-configs";
32440 tejbeer 172
 
32367 tejbeer 173
        String response = restClient.get(url, params, headers);
174
        LOGGER.info("response {}", response);
175
 
32440 tejbeer 176
        BenefitConfigurationResponse benefitConfigurationResponse = gson.fromJson(response, BenefitConfigurationResponse.class);
177
 
178
        LOGGER.info("benefitConfigurationResponse {}", benefitConfigurationResponse);
179
 
180
        return responseSender.ok(benefitConfigurationResponse);
32367 tejbeer 181
    }
182
 
183
    @RequestMapping(value = "/thriwe/benefits", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
184
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
185
    @ApiOperation(value = "")
32440 tejbeer 186
    public ResponseEntity<?> benefits(HttpServletRequest request, @RequestParam String membershipId, @RequestParam String configId) throws HttpHostConnectException, ProfitMandiBusinessException {
32367 tejbeer 187
 
32440 tejbeer 188
        ThriweMembers thriweMember = thriweMemberRepository.selectByMembershipId(membershipId);
189
 
32367 tejbeer 190
        Map<String, String> params = new HashMap<String, String>();
191
 
192
        params.put("configId", configId);
193
 
194
        Map<String, String> headers = new HashMap<String, String>();
195
 
32440 tejbeer 196
        headers.put("Authorization", thriweMember.getAuthToken());
32367 tejbeer 197
        headers.put("Project-Code", "SMART_DUKAAN");
198
 
32440 tejbeer 199
        String url = "https://staging-india-api-gateway.thriwe.com/client/benefit-items";
32367 tejbeer 200
        String response = restClient.get(url, params, headers);
201
 
32440 tejbeer 202
        BenefitResponse benefitResponse = gson.fromJson(response, BenefitResponse.class);
32367 tejbeer 203
 
32440 tejbeer 204
        LOGGER.info("benefitResponse {}", benefitResponse);
205
 
206
        return responseSender.ok(benefitResponse);
207
 
32367 tejbeer 208
    }
209
 
210
 
211
    @RequestMapping(value = "/thriwe/createBooking", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
212
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
213
    @ApiOperation(value = "")
214
    public ResponseEntity<?> createBooking(HttpServletRequest request, @RequestBody BenefitGroup benefitGroup) throws HttpHostConnectException, ProfitMandiBusinessException {
215
 
32440 tejbeer 216
        ThriweMembers thriweMember = thriweMemberRepository.selectByMembershipId(benefitGroup.getMembershipId());
32367 tejbeer 217
 
218
        Map<String, String> headers = new HashMap<String, String>();
219
 
220
        headers.put("token", token);
221
        headers.put("Project-Code", "SMART_DUKAAN");
222
 
223
        String url = "https://staging-india-api-gateway.thriwe.com/create-booking";
224
        String response = restClient.post(url, benefitGroup.toString(), headers);
225
 
226
        LOGGER.info("response {}", response);
227
        return responseSender.ok(true);
228
    }
229
 
230
 
231
}