Subversion Repositories SmartDukaan

Rev

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

package com.spice.profitmandi.web.v2.controller;

import com.spice.profitmandi.common.model.EmailPassword;
import com.spice.profitmandi.common.model.GoogleLoginRequest;
import com.spice.profitmandi.common.model.UserInfo;
import com.spice.profitmandi.dao.entity.dtr.User;
import com.spice.profitmandi.dao.enumuration.dtr.RefferalStatus;
import com.spice.profitmandi.dao.model.CreateRefferalRequest;
import com.spice.profitmandi.dao.repository.dtr.UserRepository;
import com.spice.profitmandi.web.controller.UserController;
import com.spice.profitmandi.web.req.UserRequest;
import com.spice.profitmandi.web.v2.response.ApiResponse;
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.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

@RestController
@RequestMapping("/v2")
public class V2UserController extends V2BaseController {

    @Autowired
    private UserController userController;

    @Autowired
    private UserRepository userRepository;

    private static final Logger logger = LogManager.getLogger(V2UserController.class);

    private static final String PREF_REACT = "react";
    private static final String PREF_ANGULAR = "angular";

    @PostMapping("/user/googleLogin")
    public ResponseEntity<ApiResponse<?>> googleLogin(HttpServletRequest request,
                                                      @RequestBody GoogleLoginRequest loginRequest) throws Throwable {
        return wrapResponse(userController.googleLogin(request, loginRequest));
    }

    @GetMapping("/user/token/unregistered")
    public ResponseEntity<ApiResponse<?>> unregisteredToken() throws Throwable {
        return wrapResponse(userController.unregisteredToken());
    }

    @GetMapping("/app/update")
    public ResponseEntity<ApiResponse<?>> checkForUpdate(HttpServletRequest request,
                                                         @RequestParam int version) throws Throwable {
        return wrapResponse(userController.checkForUpdate(request, version));
    }

    @GetMapping("/store/token/{storeCode}")
    public ResponseEntity<ApiResponse<?>> googleLogin(HttpServletRequest request,
                                                      @PathVariable String storeCode) throws Throwable {
        return wrapResponse(userController.googleLogin(request, storeCode));
    }

    @PostMapping("/user/forgot-password")
    public ResponseEntity<ApiResponse<?>> forgotPassword(@RequestBody GoogleLoginRequest loginRequest) throws Throwable {
        return wrapResponse(userController.forgotPassword(loginRequest));
    }

    @PostMapping("/user/change-password")
    public ResponseEntity<ApiResponse<?>> changePassword(@RequestBody EmailPassword emailPassword) throws Throwable {
        return wrapResponse(userController.changePassword(emailPassword));
    }

    @GetMapping("/user/token/isExpired")
    public ResponseEntity<ApiResponse<?>> tokenIsExpired(HttpServletRequest request,
                                                         @RequestParam(name = "token") String token) throws Throwable {
        return wrapResponse(userController.tokenIsExpired(request, token));
    }

    @GetMapping("/user/detail/token")
    public ResponseEntity<ApiResponse<?>> tokenInfo(HttpServletRequest request) throws Throwable {
        return wrapResponse(userController.tokenInfo(request));
    }

    @PostMapping("/user")
    public ResponseEntity<ApiResponse<?>> createUser(HttpServletRequest request,
                                                     @RequestBody UserRequest userRequest) throws Throwable {
        return wrapResponse(userController.createUser(request, userRequest));
    }

    @GetMapping("/user/id")
    public ResponseEntity<ApiResponse<?>> getById(HttpServletRequest request,
                                                  @RequestParam(name = "id") int id) throws Throwable {
        return wrapResponse(userController.getById(request, id));
    }

    @GetMapping("/user/mobileNumber")
    public ResponseEntity<ApiResponse<?>> getByMobileNumber(HttpServletRequest request,
                                                            @RequestParam(name = "mobileNumber") String mobileNumber) throws Throwable {
        return wrapResponse(userController.getByMobileNumber(request, mobileNumber));
    }

    @PostMapping("/user/activate")
    public ResponseEntity<ApiResponse<?>> activateUser(HttpServletRequest request,
                                                       @RequestParam(name = "activationCode") String activationCode) throws Throwable {
        return wrapResponse(userController.activateUser(request, activationCode));
    }

    @GetMapping("/user/isExist/mobileNumber")
    public ResponseEntity<ApiResponse<?>> isMobileNumberExist(HttpServletRequest request,
                                                              @RequestParam(name = "mobileNumber") String mobileNumber) throws Throwable {
        return wrapResponse(userController.isMobileNumberExist(request, mobileNumber));
    }

    @GetMapping("/user/emailId")
    public ResponseEntity<ApiResponse<?>> getByEmailId(HttpServletRequest request,
                                                       @RequestParam(name = "emailId") String emailId) throws Throwable {
        return wrapResponse(userController.getByEmailId(request, emailId));
    }

    @GetMapping("/user/role/all")
    public ResponseEntity<ApiResponse<?>> getAllRoles(HttpServletRequest request,
                                                     @RequestParam(name = "id") int id) throws Throwable {
        return wrapResponse(userController.getAllRoles(request, id));
    }

    @GetMapping("/user/registeredEmailAndFofoStoreCode")
    public ResponseEntity<ApiResponse<?>> getSecondryEmailAndStoreCode(HttpServletRequest request) throws Throwable {
        return wrapResponse(userController.getSecondryEmailAndStoreCode(request));
    }

    @PutMapping("/user/secondryEmail")
    public ResponseEntity<ApiResponse<?>> updateSecondryEmailId(HttpServletRequest request,
                                                                @RequestParam(name = "secondryEmailId") String secondryEmailId) throws Throwable {
        return wrapResponse(userController.updateSecondryEmailId(request, secondryEmailId));
    }

    @PostMapping("/user/admin")
    public ResponseEntity<ApiResponse<?>> getAdminToken(HttpServletRequest request,
                                                        @RequestParam(name = "adminToken") String adminToken,
                                                        @RequestParam(name = "emailId") String emailId) throws Throwable {
        return wrapResponse(userController.getAdminToken(request, adminToken, emailId));
    }

    @PostMapping("/mobileappsettings1")
    public ResponseEntity<ApiResponse<?>> mobileAppSettings1(HttpServletRequest request,
                                                             @RequestParam(name = "t") int timestamp,
                                                             @RequestParam(name = "imeinumber") String imeinumber) throws Throwable {
        return wrapResponse(userController.mobileAppSettings1(request, timestamp, imeinumber));
    }

    @GetMapping("/getPartners")
    public ResponseEntity<ApiResponse<?>> getPartners(HttpServletRequest request,
                                                      @RequestParam(name = "gmailId", required = false) String gmailId,
                                                      @RequestParam(value = "offset", defaultValue = "0") int offset,
                                                      @RequestParam(value = "limit", defaultValue = "100") int limit) throws Throwable {
        if (gmailId == null || gmailId.isEmpty()) {
            UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
            gmailId = userInfo.getEmail();
        }
        logger.info("Fetching partners for gmailId: {}, offset: {}, limit: {}", gmailId, offset, limit);
        return wrapResponse(userController.getPartners(request, gmailId, offset, limit));
    }

    @PostMapping("/user/refferal")
    public ResponseEntity<ApiResponse<?>> RefferalUser(HttpServletRequest request,
                                                       @RequestBody CreateRefferalRequest createRefferalRequest) throws Throwable {
        return wrapResponse(userController.RefferalUser(request, createRefferalRequest));
    }

    @GetMapping("/user/refferalAmount")
    public ResponseEntity<ApiResponse<?>> RefferalAmount(HttpServletRequest request,
                                                         @RequestParam String refereeEmail) throws Throwable {
        return wrapResponse(userController.RefferalAmount(request, refereeEmail));
    }

    @GetMapping("/user/getReferals")
    public ResponseEntity<ApiResponse<?>> getReferals(HttpServletRequest request,
                                                      @RequestParam RefferalStatus status) throws Throwable {
        return wrapResponse(userController.getReferals(request, status));
    }

    @GetMapping("/user/partnerTarget")
    public ResponseEntity<ApiResponse<?>> PartnerTarget(HttpServletRequest request) throws Throwable {
        return wrapResponse(userController.PartnerTarget(request));
    }

    @GetMapping("/user/authUser")
    public ResponseEntity<ApiResponse<?>> authUserDetail(HttpServletRequest request,
                                                         @RequestParam int userId) throws Throwable {
        return wrapResponse(userController.authUserDetail(request, userId));
    }

    // Server-side "preferred app" so the user's New/Classic choice follows them
    // across browsers and devices. Cookies alone lose the value on a new device
    // or after a browser clears storage; both apps now call this on login and
    // hand off to the other origin if the stored value disagrees.

    /** Returns {@code { preferredApp: 'react' | 'angular' | null }}. */
    @GetMapping("/user/preferred-app")
    @Transactional(readOnly = true, rollbackFor = Throwable.class)
    public ResponseEntity<ApiResponse<?>> getPreferredApp(HttpServletRequest request) throws Throwable {
        int userId = (int) request.getAttribute("userId");
        User user = userRepository.selectById(userId);
        Map<String, Object> body = new HashMap<>();
        body.put("preferredApp", user.getPreferredApp());
        return ResponseEntity.ok(ApiResponse.success(body));
    }

    /**
     * Persists the current user's preferred app. Only {@code react} or
     * {@code angular} are accepted; anything else is a 400.
     */
    @PutMapping("/user/preferred-app")
    @Transactional(rollbackFor = Throwable.class)
    public ResponseEntity<ApiResponse<?>> setPreferredApp(HttpServletRequest request,
                                                          @RequestParam("value") String value) throws Throwable {
        if (value == null || !(PREF_REACT.equals(value) || PREF_ANGULAR.equals(value))) {
            return ResponseEntity.badRequest().body(
                    ApiResponse.error(400, "preferredApp must be 'react' or 'angular'", null));
        }
        int userId = (int) request.getAttribute("userId");
        User user = userRepository.selectById(userId);
        user.setPreferredApp(value);
        userRepository.persist(user);
        return ResponseEntity.ok(ApiResponse.success(Collections.singletonMap("preferredApp", value)));
    }
}