Done ticket GEPAFINBE-205 Handled the old and new vatCheck company json through versioning.

This commit is contained in:
piyushkag
2025-04-04 19:05:23 +05:30
parent b18357878b
commit cca4fe1100
12 changed files with 319 additions and 205 deletions

View File

@@ -1,9 +1,7 @@
package net.gepafin.tendermanagement.dao;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.data.domain.Pageable; // Correct package
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
@@ -20,7 +18,6 @@ import net.gepafin.tendermanagement.enums.VersionActionTypeEnum;
import net.gepafin.tendermanagement.model.request.VersionHistoryRequest;
import net.gepafin.tendermanagement.repositories.ApplicationRepository;
import net.gepafin.tendermanagement.repositories.FaqRepository;
import net.gepafin.tendermanagement.service.feignClient.VatCheckService;
import net.gepafin.tendermanagement.util.LoggingUtil;
import net.gepafin.tendermanagement.web.rest.api.errors.*;
import org.apache.commons.lang3.StringUtils;
@@ -37,7 +34,6 @@ import net.gepafin.tendermanagement.model.response.CompanyResponse;
import net.gepafin.tendermanagement.service.UserService;
import net.gepafin.tendermanagement.util.Utils;
import static net.gepafin.tendermanagement.util.Utils.convertObjectToJsonString;
import static net.gepafin.tendermanagement.util.Utils.setIfUpdated;
@Component
@@ -73,10 +69,6 @@ public class CompanyDao {
private HttpServletRequest request;
@Autowired
private VatCheckService vatCheckService; // Service to call VAT API
private static final String NOT_FOUND_JSON = "{\"data\": \"not found\"}";
public CompanyResponse createCompany(UserEntity userEntity, CompanyRequest companyRequest) {
@@ -146,8 +138,6 @@ public class CompanyDao {
loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.INSERT).oldData(null).newData(userWithCompany).build());
if (StringUtils.isEmpty(companyEntity.getJson())) {
companyEntity.setJson(Utils.convertMapIntoJsonString(companyRequest.getVatCheckResponse()));
Map<String, Object> vatCheckResponse = companyRequest.getVatCheckResponse();
Map<String, Object> data = (Map<String, Object>) vatCheckResponse.get("data");
updateCodiceAtecoFieldWithNewJson(companyEntity);
companyEntity = companyRepository.save(companyEntity);
@@ -178,7 +168,7 @@ public class CompanyDao {
entity.setAnnualRevenue(request.getAnnualRevenue());
entity.setHub(userEntity.getHub());
entity.setJson(Utils.convertMapIntoJsonString(request.getVatCheckResponse()));
updateCodiceAtecoFieldWithNewJson(entity);
updateCodiceAtecoFieldWithNewJson(entity);
return entity;
}
@@ -437,7 +427,6 @@ public class CompanyDao {
log.info("Company ID {}: JSON field updated successfully.", company.getId());
// Extract and set codiceAteco field
// updateCodiceAtecoField(company);
updateCodiceAtecoFieldWithNewJson(company);
successfulUpdates++;
@@ -472,50 +461,38 @@ public class CompanyDao {
private void updateCodiceAtecoField(CompanyEntity company) {
Map<String, Object> vatCheckResponse = Utils.convertJsonStringToMap(company.getJson());
if (vatCheckResponse != null && vatCheckResponse.containsKey("data")) {
Object dataObj = vatCheckResponse.get("data");
if (dataObj instanceof Map) {
Map<String, Object> dataMap = (Map<String, Object>) dataObj;
log.info("Company ID {}: Available keys inside 'data' -> {}", company.getId(), dataMap.keySet());
if (dataMap.containsKey("dettaglio")) {
Object dettaglioObj = dataMap.get("dettaglio");
if (dettaglioObj instanceof Map) {
Map<String, Object> dettaglio = (Map<String, Object>) dettaglioObj;
if (dettaglio.containsKey("codice_ateco")) {
Object codiceAtecoObj = dettaglio.get("codice_ateco");
if (codiceAtecoObj instanceof String) {
String codiceAteco = (String) codiceAtecoObj;
if (codiceAteco != null && !codiceAteco.isEmpty()) {
company.setCodiceAteco(codiceAteco);
log.info("Company ID {}: codiceAteco updated to {}", company.getId(), codiceAteco);
} else {
log.warn("Company ID {}: codiceAteco is null or empty in the response.", company.getId());
}
} else {
log.warn("Company ID {}: 'codice_ateco' is not a string, actual type: {}", company.getId(), codiceAtecoObj.getClass());
}
} else {
log.warn("Company ID {}: 'dettaglio' does not contain 'codice_ateco' key.", company.getId());
}
} else {
log.warn("Company ID {}: 'dettaglio' is not a Map, actual type: {}", company.getId(), dettaglioObj.getClass());
}
} else {
log.warn("Company ID {}: 'dettaglio' section is missing inside 'data'!", company.getId());
}
} else {
log.warn("Company ID {}: 'data' is not a Map, actual type: {}", company.getId(), dataObj.getClass());
}
} else {
log.warn("Company ID {}: 'data' section missing in the JSON response.", company.getId());
if (vatCheckResponse == null) {
log.warn("Company ID {}: Invalid JSON response.", company.getId());
return;
}
Object dataObj = vatCheckResponse.get("data");
if (!(dataObj instanceof Map<?, ?> dataMap)) {
log.warn("Company ID {}: 'data' is missing or not a valid object.", company.getId());
return;
}
if (!dataMap.containsKey("dettaglio")) {
log.warn("Company ID {}: 'dettaglio' not present inside 'data'. Skipping codiceAteco update.", company.getId());
return;
}
Object dettaglioObj = dataMap.get("dettaglio");
if (!(dettaglioObj instanceof Map<?, ?> dettaglio)) {
log.warn("Company ID {}: 'dettaglio' is not a valid object.", company.getId());
return;
}
Object codiceAtecoObj = dettaglio.get("codice_ateco");
if (!(codiceAtecoObj instanceof String codiceAteco) || codiceAteco.isEmpty()) {
log.warn("Company ID {}: 'codice_ateco' is missing, empty, or not a string.", company.getId());
return;
}
company.setCodiceAteco(codiceAteco);
logCodiceAtecoUpdate(company, codiceAteco);
}
private void updateCodiceAtecoFieldWithNewJson(CompanyEntity company) {
if (company == null || company.getJson() == null || company.getJson().isEmpty()) {
log.warn("Company is null or JSON data is empty.");
@@ -530,32 +507,43 @@ public class CompanyDao {
// Extract 'data' section
Map<String, Object> dataMap = Utils.extractMap(companyDataMap, "data");
Object dataObj = companyDataMap.get("data");
if (dataMap == null) {
log.warn("Company ID {}: 'data' section is missing or invalid in the JSON.", company.getId());
return;
}
// Extract 'atecoClassification' section
Map<String, Object> atecoClassificationMap = Utils.extractMap(dataMap, "atecoClassification");
if (atecoClassificationMap == null) {
log.warn("Company ID {}: 'atecoClassification' section is missing or invalid.", company.getId());
return;
}
// Extract 'ateco' section
Map<String, Object> atecoMap = Utils.extractMap(atecoClassificationMap, "ateco");
if (atecoMap == null) {
log.warn("Company ID {}: 'ateco' section is missing or invalid.", company.getId());
return;
}
// Extract and set 'code'
String atecoCode = Utils.extractString(atecoMap, "code");
if (atecoCode != null && !atecoCode.isEmpty()) {
company.setCodiceAteco(atecoCode);
log.info("Company ID {}: codiceAteco updated to {}", company.getId(), atecoCode);
if (dataObj instanceof Map<?, ?>) {
// if data is a single object
updateCodiceAtecoField(company);
} else {
log.warn("Company ID {}: 'code' inside 'ateco' is empty or missing.", company.getId());
// Extract 'atecoClassification' section
Map<String, Object> atecoClassificationMap = Utils.extractMap(dataMap, "atecoClassification");
if (atecoClassificationMap == null) {
log.warn("Company ID {}: 'atecoClassification' section is missing or invalid.", company.getId());
return;
}
// Extract 'ateco' section
Map<String, Object> atecoMap = Utils.extractMap(atecoClassificationMap, "ateco");
if (atecoMap == null) {
log.warn("Company ID {}: 'ateco' section is missing or invalid.", company.getId());
return;
}
// Extract and set 'code'
String atecoCode = Utils.extractString(atecoMap, "code");
if (atecoCode != null && !atecoCode.isEmpty()) {
company.setCodiceAteco(atecoCode);
logCodiceAtecoUpdate(company, atecoCode);
} else {
log.warn("Company ID {}: 'code' inside 'ateco' is empty or missing.", company.getId());
}
}
}
private static void logCodiceAtecoUpdate(CompanyEntity company, String atecoCode) {
log.info("Company ID {}: codiceAteco updated to {}", company.getId(), atecoCode);
}
}