From ef15e4d265afa2db89c818ce0af0a14c896573f5 Mon Sep 17 00:00:00 2001 From: shishirsuman <Shishir.suman@tarento.com> Date: Fri, 9 Dec 2022 18:09:31 +0530 Subject: [PATCH] changes for csv download --- pom.xml | 7 +- .../controllers/FormsController.java | 27 ++++--- .../model/InstituteCSVResponseDto.java | 11 +++ .../model/InstituteDownloadRequestDto.java | 15 ++++ .../repository/ElasticSearchRepository.java | 13 +++ .../formservice/service/FormsService.java | 12 +-- .../service/impl/FormsServiceImpl.java | 79 +++++++++++++++---- .../formservice/utils/CloudStorage.java | 2 +- .../tarento/formservice/utils/PathRoutes.java | 1 + src/main/resources/application.properties | 10 +-- 10 files changed, 134 insertions(+), 43 deletions(-) create mode 100644 src/main/java/com/tarento/formservice/model/InstituteCSVResponseDto.java create mode 100644 src/main/java/com/tarento/formservice/model/InstituteDownloadRequestDto.java diff --git a/pom.xml b/pom.xml index 77946db..ad09745 100644 --- a/pom.xml +++ b/pom.xml @@ -44,7 +44,12 @@ <artifactId>javax.mail</artifactId> <version>1.6.0</version> </dependency> - + <!-- https://mvnrepository.com/artifact/com.opencsv/opencsv --> + <dependency> + <groupId>com.opencsv</groupId> + <artifactId>opencsv</artifactId> + <version>5.7.1</version> + </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> diff --git a/src/main/java/com/tarento/formservice/controllers/FormsController.java b/src/main/java/com/tarento/formservice/controllers/FormsController.java index 2e6b926..ef400dd 100644 --- a/src/main/java/com/tarento/formservice/controllers/FormsController.java +++ b/src/main/java/com/tarento/formservice/controllers/FormsController.java @@ -6,6 +6,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import com.tarento.formservice.model.*; import org.apache.commons.lang3.StringUtils; import org.apache.tomcat.util.codec.binary.Base64; import org.slf4j.Logger; @@ -24,16 +25,6 @@ import org.springframework.web.multipart.MultipartFile; import com.fasterxml.jackson.core.JsonProcessingException; import com.google.gson.Gson; -import com.tarento.formservice.model.AssignApplication; -import com.tarento.formservice.model.Consent; -import com.tarento.formservice.model.FormData; -import com.tarento.formservice.model.IncomingData; -import com.tarento.formservice.model.KeyValue; -import com.tarento.formservice.model.KeyValueList; -import com.tarento.formservice.model.SearchObject; -import com.tarento.formservice.model.SearchRequestDto; -import com.tarento.formservice.model.Status; -import com.tarento.formservice.model.UserInfo; import com.tarento.formservice.models.Form; import com.tarento.formservice.models.FormDetail; import com.tarento.formservice.service.FormsService; @@ -169,6 +160,22 @@ public class FormsController { return ResponseGenerator.failureResponse(Constants.ResponseMessages.ERROR_MESSAGE); } + @PostMapping(value = PathRoutes.FormServiceApi.GET_INSTITUTE_DATA, produces = MediaType.APPLICATION_JSON_VALUE) + public String getInstituteData( + @RequestHeader(value = Constants.Parameters.X_USER_INFO, required = false) String xUserInfo, + @RequestBody InstituteDownloadRequestDto instituteDownloadRequestDto) throws JsonProcessingException { + List<Map<String, Object>> responseData = new ArrayList<>(); + UserInfo userInfo = null; + if (StringUtils.isNotBlank(xUserInfo)) { + userInfo = new Gson().fromJson(xUserInfo, UserInfo.class); + } + responseData = formsService.getInstitutesData(userInfo, instituteDownloadRequestDto); + if (responseData != null) { + return ResponseGenerator.successResponse(responseData); + } + return ResponseGenerator.failureResponse(Constants.ResponseMessages.ERROR_MESSAGE); + } + @GetMapping(value = PathRoutes.FormServiceApi.GET_APPLICATIONS_STATUS_COUNT, produces = MediaType.APPLICATION_JSON_VALUE) public String getApplicationsStatusCount( @RequestHeader(value = Constants.Parameters.X_USER_INFO, required = false) String xUserInfo) diff --git a/src/main/java/com/tarento/formservice/model/InstituteCSVResponseDto.java b/src/main/java/com/tarento/formservice/model/InstituteCSVResponseDto.java new file mode 100644 index 0000000..21991bc --- /dev/null +++ b/src/main/java/com/tarento/formservice/model/InstituteCSVResponseDto.java @@ -0,0 +1,11 @@ +package com.tarento.formservice.model; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class InstituteCSVResponseDto { + + private String data; +} diff --git a/src/main/java/com/tarento/formservice/model/InstituteDownloadRequestDto.java b/src/main/java/com/tarento/formservice/model/InstituteDownloadRequestDto.java new file mode 100644 index 0000000..ecb7fc3 --- /dev/null +++ b/src/main/java/com/tarento/formservice/model/InstituteDownloadRequestDto.java @@ -0,0 +1,15 @@ +package com.tarento.formservice.model; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class InstituteDownloadRequestDto { + + private Integer page; + private Integer size; +} + diff --git a/src/main/java/com/tarento/formservice/repository/ElasticSearchRepository.java b/src/main/java/com/tarento/formservice/repository/ElasticSearchRepository.java index 43cbd79..9b2f7d0 100644 --- a/src/main/java/com/tarento/formservice/repository/ElasticSearchRepository.java +++ b/src/main/java/com/tarento/formservice/repository/ElasticSearchRepository.java @@ -25,6 +25,8 @@ import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestClientBuilder.HttpClientConfigCallback; import org.elasticsearch.client.RestHighLevelClient; +import org.elasticsearch.client.core.CountRequest; +import org.elasticsearch.client.core.CountResponse; import org.elasticsearch.common.xcontent.XContentType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -268,4 +270,15 @@ public class ElasticSearchRepository { } return response; } + + public CountResponse executeCountRequest(CountRequest countRequest) { + CountResponse response = null; + try { + response = client.count(countRequest, RequestOptions.DEFAULT); + } catch (IOException e) { + LOGGER.error(marker, "Encountered an error while connecting : ", e); + LOGGER.error(marker, "Error Message to report : {}", e.getMessage()); + } + return response; + } } diff --git a/src/main/java/com/tarento/formservice/service/FormsService.java b/src/main/java/com/tarento/formservice/service/FormsService.java index e87ef79..b1845da 100644 --- a/src/main/java/com/tarento/formservice/service/FormsService.java +++ b/src/main/java/com/tarento/formservice/service/FormsService.java @@ -5,17 +5,9 @@ import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentMap; +import com.tarento.formservice.model.*; import org.springframework.web.multipart.MultipartFile; -import com.tarento.formservice.model.AssignApplication; -import com.tarento.formservice.model.Consent; -import com.tarento.formservice.model.IncomingData; -import com.tarento.formservice.model.KeyValueList; -import com.tarento.formservice.model.ResponseData; -import com.tarento.formservice.model.SearchRequestDto; -import com.tarento.formservice.model.State; -import com.tarento.formservice.model.StateMatrix; -import com.tarento.formservice.model.UserInfo; import com.tarento.formservice.models.Form; import com.tarento.formservice.models.FormDetail; @@ -43,6 +35,8 @@ public interface FormsService { List<Map<String, Object>> getAllPlainForms(); + List<Map<String, Object>> getInstitutesData(UserInfo userInfo, InstituteDownloadRequestDto instituteDownloadRequestDto); + KeyValueList getApplicationsStatusCount(UserInfo userInfo); public Boolean saveFormSubmitv1(IncomingData incomingData, UserInfo userInfo, String action); diff --git a/src/main/java/com/tarento/formservice/service/impl/FormsServiceImpl.java b/src/main/java/com/tarento/formservice/service/impl/FormsServiceImpl.java index 3d667c7..6c7a3c5 100644 --- a/src/main/java/com/tarento/formservice/service/impl/FormsServiceImpl.java +++ b/src/main/java/com/tarento/formservice/service/impl/FormsServiceImpl.java @@ -13,10 +13,13 @@ import java.util.Random; import java.util.concurrent.ConcurrentMap; import java.util.stream.Collectors; +import com.tarento.formservice.model.*; import org.apache.commons.lang3.StringUtils; import org.elasticsearch.action.search.MultiSearchResponse; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.client.core.CountRequest; +import org.elasticsearch.client.core.CountResponse; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.RangeQueryBuilder; @@ -48,23 +51,6 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import com.tarento.formservice.dao.FormsDao; -import com.tarento.formservice.model.AssignApplication; -import com.tarento.formservice.model.Assignee; -import com.tarento.formservice.model.Consent; -import com.tarento.formservice.model.IncomingData; -import com.tarento.formservice.model.KeyValue; -import com.tarento.formservice.model.KeyValueList; -import com.tarento.formservice.model.ResponseData; -import com.tarento.formservice.model.Result; -import com.tarento.formservice.model.Role; -import com.tarento.formservice.model.Roles; -import com.tarento.formservice.model.SearchObject; -import com.tarento.formservice.model.SearchRequestDto; -import com.tarento.formservice.model.State; -import com.tarento.formservice.model.StateMatrix; -import com.tarento.formservice.model.Status; -import com.tarento.formservice.model.UserInfo; -import com.tarento.formservice.model.WorkflowDto; import com.tarento.formservice.models.Field; import com.tarento.formservice.models.Form; import com.tarento.formservice.models.FormDetail; @@ -380,6 +366,65 @@ public class FormsServiceImpl implements FormsService { return null; } + @Override + public List<Map<String, Object>> getInstitutesData(UserInfo userInfo, InstituteDownloadRequestDto instituteDownloadRequestDto) { + try { + // count builder + CountRequest countRequest = new CountRequest(appConfig.getFormDataIndex()).query(QueryBuilders.matchAllQuery()); + CountResponse countResponse = elasticRepository.executeCountRequest(countRequest); + LOGGER.debug("count Response : {}", countResponse); + if(countResponse == null || countResponse.getCount() <= 0) { + // no data in index + return null; + } + // query builder + SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + // setting size and range in query + setSizeAndRangeLimit(instituteDownloadRequestDto, searchSourceBuilder, countResponse); + // creating bool query + BoolQueryBuilder boolBuilder = QueryBuilders.boolQuery(); + boolBuilder.must(QueryBuilders.matchAllQuery()); + searchSourceBuilder.query(boolBuilder).sort(Constants.TIMESTAMP, SortOrder.DESC); + // es call + SearchRequest searchRequest = new SearchRequest(appConfig.getFormDataIndex()).source(searchSourceBuilder); + LOGGER.info("Search Request : " + searchRequest); + return formsDao.searchResponse(searchRequest); + } catch (Exception e) { + LOGGER.error(String.format(Constants.EXCEPTION, "getApplications", e.getMessage())); + } + return null; + } + + private static void setSizeAndRangeLimit(InstituteDownloadRequestDto instituteDownloadRequestDto, + SearchSourceBuilder searchSourceBuilder, + CountResponse countResponse) { + // setting from limit if size is present in request + if(instituteDownloadRequestDto.getSize() != null && instituteDownloadRequestDto.getSize() > 0) { + searchSourceBuilder.size(instituteDownloadRequestDto.getSize()); + int fromRange = 0; + if(instituteDownloadRequestDto.getPage() == 0) { + fromRange = instituteDownloadRequestDto.getSize()*(instituteDownloadRequestDto.getPage()); + } else if(instituteDownloadRequestDto.getPage() > 0) { + fromRange = instituteDownloadRequestDto.getSize()*(instituteDownloadRequestDto.getPage()-1); + } + searchSourceBuilder.from(fromRange); + } else { + int count = Long.valueOf(countResponse.getCount()).intValue(); + searchSourceBuilder.size(count); + } + } + + public InstituteCSVResponseDto createCSVFile(List<Map<String, Object>> instituteData) { + if(instituteData == null || instituteData.isEmpty()) { + //return error + } + for(Map<String, Object> data : instituteData) { + System.out.print("data : "+data); + } + return null; + } + + /** * Add filters in search response */ diff --git a/src/main/java/com/tarento/formservice/utils/CloudStorage.java b/src/main/java/com/tarento/formservice/utils/CloudStorage.java index 3da215e..e2efa7b 100644 --- a/src/main/java/com/tarento/formservice/utils/CloudStorage.java +++ b/src/main/java/com/tarento/formservice/utils/CloudStorage.java @@ -15,7 +15,7 @@ import org.sunbird.cloud.storage.factory.StorageServiceFactory; import scala.Option; -@Service + public class CloudStorage { public static final Logger LOGGER = LoggerFactory.getLogger(CloudStorage.class); diff --git a/src/main/java/com/tarento/formservice/utils/PathRoutes.java b/src/main/java/com/tarento/formservice/utils/PathRoutes.java index 162a218..8a2d727 100644 --- a/src/main/java/com/tarento/formservice/utils/PathRoutes.java +++ b/src/main/java/com/tarento/formservice/utils/PathRoutes.java @@ -11,6 +11,7 @@ public interface PathRoutes { final String SAVE_FORM_SUBMIT_V1 = "/v1/saveFormSubmit"; final String SAVE_FORM_SUBMIT_BULK = "/saveFormSubmitBulk"; final String GET_ALL_APPLICATIONS = "/getAllApplications"; + final String GET_INSTITUTE_DATA = "/getInstituteData"; final String GET_APPLICATIONS_BY_ID = "/getApplicationsById"; final String GET_APPLICATIONS_STATUS_COUNT = "/getApplicationsStatusCount"; final String FILE_UPLOAD = "/fileUpload"; diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index af21aad..dcc76a8 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,14 +1,14 @@ server.port=8099 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.url=jdbc:mysql://localhost:3306/retail_user -spring.datasource.username=retail_user -spring.datasource.password=ReTail123T +spring.datasource.url=jdbc:mysql://159.223.143.139:3306/retail_user +spring.datasource.username=root +spring.datasource.password=Testing@123 #----------------------------- ELASTIC SEARCH CONFIGURATIONS ------------------------------# -services.esindexer.host=elastic.pulz.app +services.esindexer.host=159.223.143.139 services.esindexer.host.name=elastic.pulz.app -services.esindexer.host.port=443 +services.esindexer.host.port=9200 services.esindexer.username=elastic services.esindexer.password=PuAz@itAqwsaR34bYu # INDEX AND DOCUMENT TYPES -- GitLab