package com.iconplus.smartproc.service; import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.model.entity.TokenManagement; import com.iconplus.smartproc.model.request.UsersRequest; import com.iconplus.smartproc.repository.*; import com.iconplus.smartproc.util.Constants; import com.iconplus.smartproc.util.EncryptDecryptUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import java.sql.Timestamp; import java.time.Instant; @Service public class CommonService { @Value("${config.password.private-key}") private String privateKey; private RolesRepository rolesRepository; private BidangRepository bidangRepository; private InstansiRepository instansiRepository; private TokenManagementRepository tokenManagementRepository; public CommonService(RolesRepository rolesRepository, BidangRepository bidangRepository, InstansiRepository instansiRepository, TokenManagementRepository tokenManagementRepository) { this.rolesRepository = rolesRepository; this.bidangRepository = bidangRepository; this.instansiRepository = instansiRepository; this.tokenManagementRepository = tokenManagementRepository; } public void validateUserRequst(UsersRequest input) { var roles= rolesRepository.findByIdAndIsDeleteFalse(input.getRoleId()); if (roles.isEmpty()) { throw new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, String.format(Constants.ERR_MSG_10001, "Role", input.getId())); } var bidang= bidangRepository.findByIdAndIsDeleteFalse(input.getBidangId()); if (bidang.isEmpty()) { throw new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, String.format(Constants.ERR_MSG_10001, "Bidang", input.getId())); } var instansi= instansiRepository.findByIdAndIsDeleteFalse(input.getInstansiId()); if (instansi.isEmpty()) { throw new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, String.format(Constants.ERR_MSG_10001, "Instansi", input.getId())); } } public void saveUserToken(TokenManagement tokenManagement, Integer tokenExpiry) { var issuedTime = Timestamp.from(Instant.now()); var expirationTime = Timestamp.from(Instant.now().plusMillis(tokenExpiry * (long) 60000)); if (StringUtils.isNotBlank(tokenManagement.getId())) { tokenManagement.setIssuedTime(issuedTime); tokenManagement.setExpiredTime(expirationTime); tokenManagementRepository.save(tokenManagement); return; } var existToken = tokenManagementRepository.findByUserId(tokenManagement.getUserId()); if (existToken.isPresent()) { existToken.get().setAccessToken(tokenManagement.getAccessToken()); existToken.get().setRefreshToken(tokenManagement.getRefreshToken()); existToken.get().setIsDelete(false); existToken.get().setIssuedTime(issuedTime); existToken.get().setExpiredTime(expirationTime); tokenManagementRepository.save(existToken.get()); } else { tokenManagementRepository.save(TokenManagement.builder() .userId(tokenManagement.getUserId()) .accessToken(tokenManagement.getAccessToken()) .refreshToken(tokenManagement.getRefreshToken()) .issuedTime(issuedTime) .expiredTime(expirationTime) .isDelete(false) .build()); } } public String getPassword(String password) { try { return EncryptDecryptUtils.decrypt(password, privateKey); } catch (Exception ex) { throw new BusinessException(Constants.ERR_CODE_10010, Constants.ERR_TTL_10010, Constants.ERR_MSG_10010); } } }