Subversion Repositories SmartDukaan

Rev

Rev 23273 | Rev 23984 | Go to most recent revision | View as "text/plain" | Blame | Compare with Previous | Last modification | View Log | RSS feed

package com.spice.profitmandi.service.user;

import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
import com.spice.profitmandi.common.model.ProfitMandiConstants;
import com.spice.profitmandi.dao.entity.dtr.ActivationCode;
import com.spice.profitmandi.dao.entity.dtr.Retailer;
import com.spice.profitmandi.dao.entity.dtr.Role;
import com.spice.profitmandi.dao.entity.dtr.User;
import com.spice.profitmandi.dao.entity.dtr.UserAccount;
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
import com.spice.profitmandi.dao.enumuration.dtr.AccountType;
import com.spice.profitmandi.dao.enumuration.dtr.RoleType;
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
import com.spice.profitmandi.dao.repository.dtr.RetailerRepository;
import com.spice.profitmandi.dao.repository.dtr.RoleRepository;
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
import com.spice.profitmandi.dao.repository.dtr.UserRepository;
import com.spice.profitmandi.dao.repository.dtr.UserRoleRepository;
import com.spice.profitmandi.thrift.clients.TransactionClient;

import in.shop2020.model.v1.order.TransactionService;

@Component
@Transactional(rollbackFor=Throwable.class)
public class UserServiceImpl implements UserService {

        @Autowired
        private SessionFactory sessionFactory;

        @Autowired
        @Qualifier(value = "userRepository")
        private UserRepository userRepository;

        @Autowired
        private RetailerRepository retailerRepo;
        
        @Autowired
        private FofoStoreRepository fofoStoreRepository;
        
        @Autowired
        private UserAccountRepository userAccountRepository;
        
        @Autowired
        private UserRoleRepository userRoleRepository;
        
        @Autowired
        private RoleRepository roleRepository;
        

        @SuppressWarnings("deprecation")
        @Override
        public boolean updateActivation(int userId, int retailerId, String activationCode) throws Throwable {
                
                TransactionClient transactionServiceClient = new TransactionClient();
                TransactionService.Client tsc = transactionServiceClient.getClient();
                boolean registered = tsc.registerRsa(retailerId, activationCode);

                Session session = sessionFactory.getCurrentSession();

                if(!registered){
                        Criteria cr = session.createCriteria(ActivationCode.class);
                        cr.add(Restrictions.eq("code", activationCode)).add(Restrictions.eq("status", true));
                        ActivationCode code = (ActivationCode)cr.uniqueResult();
                        if(code==null) {
                                return false;
                        } else {
                                registered=true;
                                code.setStatus(false);
                                session.update(code);
                        }
                }
        
                if(registered) {
                        User user = userRepository.selectById(userId);
                        user.setActivated(true);
                        user.setActivationTime(LocalDateTime.now());
                        user.setReferrer(activationCode);
                        session.update(user);
                        
                        Retailer retailer = retailerRepo.selectById(retailerId);
                        retailer.setActive(true);
                        session.update(retailer);
                }
                        
                return registered;
        }


        @Override
        public boolean createActivationCode(int userId) throws Throwable {
                // TODO Auto-generated method stub
                return false;
        }
        
        @Override
        public Map<String, String> getEmailsAndFofoStoreCodeByUserId(int userId) throws ProfitMandiBusinessException {
                User user = userRepository.selectById(userId);
                UserAccount userAccount = userAccountRepository.selectByUserIdType(userId, AccountType.saholic);
                Role role = roleRepository.selectByName(RoleType.FOFO.toString());
                Map<String, String> map = new HashMap<>();
                map.put(ProfitMandiConstants.EMAIL_ID, user.getEmailId());
                map.put(ProfitMandiConstants.SECONDRY_EMAIL_ID, user.getSecondryEmailId());
                userRoleRepository.selectByUserIdAndRoleId(userId, role.getId());
                FofoStore fofoStore = fofoStoreRepository.selectByRetailerId(userAccount.getAccountKey());
                map.put(ProfitMandiConstants.CODE, fofoStore.getCode());
                return map;
        }
        
}