128 lines
5.1 KiB
Java
128 lines
5.1 KiB
Java
package com.iconplus.smartproc.service;
|
|
|
|
import com.google.zxing.BarcodeFormat;
|
|
import com.google.zxing.client.j2se.MatrixToImageWriter;
|
|
import com.google.zxing.common.BitMatrix;
|
|
import com.google.zxing.qrcode.QRCodeWriter;
|
|
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 org.springframework.web.multipart.MultipartFile;
|
|
|
|
import java.awt.image.BufferedImage;
|
|
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.getRoleId()));
|
|
}
|
|
|
|
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.getBidangId()));
|
|
}
|
|
|
|
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.getInstansiId()));
|
|
}
|
|
}
|
|
|
|
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_10011,
|
|
Constants.ERR_TTL_10011,
|
|
Constants.ERR_MSG_10011);
|
|
}
|
|
|
|
}
|
|
|
|
public BufferedImage generateQRCodeImage(String barcodeText) throws Exception {
|
|
QRCodeWriter barcodeWriter = new QRCodeWriter();
|
|
BitMatrix bitMatrix =
|
|
barcodeWriter.encode(barcodeText, BarcodeFormat.QR_CODE, 200, 200);
|
|
|
|
return MatrixToImageWriter.toBufferedImage(bitMatrix);
|
|
}
|
|
|
|
public boolean hasExcelFormat(MultipartFile file) {
|
|
String type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
|
return type.equals(file.getContentType());
|
|
}
|
|
}
|