package net.gepafin.tendermanagement.dao; import feign.FeignException; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.enums.UserActionContextEnum; import net.gepafin.tendermanagement.enums.UserActionLogsEnum; import net.gepafin.tendermanagement.model.request.UserActionRequest; import net.gepafin.tendermanagement.service.feignClient.VatCheckService; import net.gepafin.tendermanagement.util.LoggingUtil; import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import java.net.URI; import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; @Component public class VatCheckDao { @Autowired private VatCheckService vatCheckService; @Value("${vatCheckNewToken}") public String vatCheckNewToken; @Value("${isVatCheckGloballyDisabled}") public String isVatCheckGloballyDisabled; public final Logger log = LoggerFactory.getLogger(VatCheckDao.class); @Autowired private LoggingUtil loggingUtil; @Autowired private HttpServletRequest request; public Map checkVatNumberApi(String vatNumber) { if (Boolean.TRUE.equals(Boolean.parseBoolean(isVatCheckGloballyDisabled))) { return new HashMap<>(); } Map responseBody = new HashMap<>(); try { HttpHeaders headers = new HttpHeaders(); headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); headers.setContentType(MediaType.APPLICATION_JSON); headers.set(GepafinConstant.AUTHORIZATION, "Bearer " + vatCheckNewToken); headers.add(org.apache.http.HttpHeaders.USER_AGENT, "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"); URI baseUrl = URI.create(GepafinConstant.CHECK_VATNUMBER_V2_NEW_URL); ResponseEntity> response = vatCheckService.checkVatNumber(baseUrl, vatNumber, headers); /** This code is responsible for creating user action logs for the "Download company delegation" operation. **/ loggingUtil.logUserAction( UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.CHECK_COMPANY_VAT_NUMBER).build()); if (response.getStatusCode() == HttpStatus.OK && response.hasBody()) { log.info("Successfully checked vat number"); Map responseMap = response.getBody(); if (responseMap != null && responseMap.containsKey("data")) { responseBody = (Map) responseMap.get("data"); responseBody.remove("timestamp_creation"); responseBody.remove("timestamp_last_update"); responseBody.remove("data_iscrizione"); responseBody.remove("id"); Map data = new LinkedHashMap<>(); data.put("data", responseBody); return data; } } } catch (FeignException ex) { log.error("Exception occurred while checking vat number: {0}", ex); Utils.callException(ex.status(), ex); } return responseBody; } public Map checkVatNumber(String vatNumber) { try { return checkVatNumberApi(vatNumber); } catch (Exception e) { throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.INVALID_VATNUMBER)); } } }