diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 382ea8ca..122f8649 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -453,6 +453,12 @@ public class GepafinConstant { public static final String SWITCH="switch"; public static final String IS_CHECK_LIST_ITEM="isChecklistItem"; public static final String VALIDATION_FAILED_FOR_CHECKLIST="validation.failed.checklist"; + public static final String PEC_SERVICE_URL="https://ws.pecmassiva.com"; + public static final String PEC_SERVICE_SEND_MAIL="/send"; + public static final String PEC_SERVICE_INBOX_MAIL="/quota/inbox"; + public static final String USAGE="usage"; + public static final String LIMIT="limit"; + public static final String DATA="data"; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java b/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java index 29304f15..e80e67e4 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java @@ -1,5 +1,6 @@ package net.gepafin.tendermanagement.dao; +import com.amazonaws.services.dynamodbv2.xspec.S; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; @@ -16,6 +17,7 @@ import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationExceptio import net.gepafin.tendermanagement.web.rest.api.errors.ForbiddenAccessException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.math.BigDecimal; @@ -62,14 +64,36 @@ public class DashboardDao { @Autowired private Validator validator; + @Autowired + private PecDao pecDao; + + @Value("${default.hub.uuid}") + private String defaultHubUuid; + public SuperAdminWidgetResponseBean getDashboardWidget(UserEntity requestedUserEntity) { SuperAdminWidgetResponseBean widgetResponseBean = new SuperAdminWidgetResponseBean(); widgetResponseBean.setWidget1(createWidget1(requestedUserEntity)); Map widgetBars = getStatistics(requestedUserEntity); widgetResponseBean.setWidgetBars(widgetBars); + if(requestedUserEntity.getHub().getUniqueUuid().equals(defaultHubUuid)) { + getEmailUsageForGepafin(requestedUserEntity, widgetResponseBean); + } return widgetResponseBean; } + private void getEmailUsageForGepafin(UserEntity requestedUserEntity, SuperAdminWidgetResponseBean widgetResponseBean) { + Map emailData=pecDao.getUsageDetails(requestedUserEntity.getHub().getId()); + Map data= (Map) emailData.get(GepafinConstant.DATA); + Object usage=data.get(GepafinConstant.USAGE); + Object limit=data.get(GepafinConstant.LIMIT); + if(usage!=null) { + widgetResponseBean.setPecUsage(String.valueOf(usage)); + } + if (limit!=null) { + widgetResponseBean.setPecLimit(String.valueOf(limit)); + } + } + private Widget1 createWidget1(UserEntity requestedUserEntity) { Widget1 widget1 = initializeWidget1(); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/PecDao.java b/src/main/java/net/gepafin/tendermanagement/dao/PecDao.java new file mode 100644 index 00000000..bfb88fa7 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/dao/PecDao.java @@ -0,0 +1,59 @@ +package net.gepafin.tendermanagement.dao; + +import feign.FeignException; +import net.gepafin.tendermanagement.constants.GepafinConstant; +import net.gepafin.tendermanagement.model.request.EmailConfig; +import net.gepafin.tendermanagement.service.feignClient.PecFeignService; +import net.gepafin.tendermanagement.util.Utils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +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.Map; + +@Component +public class PecDao { + + public final Logger log = LoggerFactory.getLogger(PecDao.class); + + @Autowired + private PecFeignService pecFeignService; + + @Autowired + private EmailNotificationDao emailNotificationDao; + + + public Map getUsageDetails(Long hubId) { + EmailConfig emailConfig = emailNotificationDao.retrieveEmailConfig(hubId); + + 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 " + emailConfig.getAuthToken()); + headers.set("x-username", emailConfig.getUsername()); + headers.set("x-password", emailConfig.getPassword()); + 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.PEC_SERVICE_URL+GepafinConstant.PEC_SERVICE_INBOX_MAIL); + ResponseEntity response = pecFeignService.getUsageDetails(baseUrl,headers); + + + if (response.getStatusCode() == HttpStatus.OK && response.hasBody()) { + log.info("Successfully fetched usage and limit"); + responseBody = (Map) response.getBody(); + } + } catch (FeignException ex) { + } + return responseBody; + } +} \ No newline at end of file diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/SuperAdminWidgetResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/SuperAdminWidgetResponseBean.java index 02744ace..cc75e5c5 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/SuperAdminWidgetResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/SuperAdminWidgetResponseBean.java @@ -1,5 +1,6 @@ package net.gepafin.tendermanagement.model.response; +import com.fasterxml.jackson.annotation.JsonInclude; import lombok.Data; import net.gepafin.tendermanagement.entities.UserActionEntity; import org.springframework.data.domain.Page; @@ -12,6 +13,12 @@ public class SuperAdminWidgetResponseBean { private Widget1 widget1; + @JsonInclude(JsonInclude.Include.NON_NULL) + private String pecUsage; + + @JsonInclude(JsonInclude.Include.NON_NULL) + private String pecLimit; + private Map widgetBars; } diff --git a/src/main/java/net/gepafin/tendermanagement/service/feignClient/PecFeignService.java b/src/main/java/net/gepafin/tendermanagement/service/feignClient/PecFeignService.java new file mode 100644 index 00000000..dd1d066d --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/service/feignClient/PecFeignService.java @@ -0,0 +1,19 @@ +package net.gepafin.tendermanagement.service.feignClient; + +import net.gepafin.tendermanagement.constants.GepafinConstant; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.http.HttpHeaders; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestHeader; + +import java.net.URI; + + +@FeignClient(value = "pec-service" ,url = GepafinConstant.PEC_SERVICE_URL) +public interface PecFeignService { + + @GetMapping(GepafinConstant.PEC_SERVICE_INBOX_MAIL) + ResponseEntity getUsageDetails(URI uri,@RequestHeader HttpHeaders headers + ); +} diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java b/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java index 67e58c2d..8c44af9d 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java @@ -3,6 +3,7 @@ package net.gepafin.tendermanagement.service.impl; import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; import lombok.extern.slf4j.Slf4j; +import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.dao.EmailLogDao; import net.gepafin.tendermanagement.entities.EmailLogEntity; import net.gepafin.tendermanagement.enums.EmailServiceTypeEnum; @@ -13,6 +14,7 @@ import net.gepafin.tendermanagement.model.request.PecEmailRequest; import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.util.Validator; +import org.opensaml.xmlsec.signature.G; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -49,7 +51,7 @@ public class PecEmailService implements EmailService { emailRequest.setUsername(emailConfig.getUsername()); emailRequest.setPassword(emailConfig.getPassword()); emailRequest.setRecipient(recipientEmails); - String url=emailConfig.getUrl(); + String url=emailConfig.getUrl()+ GepafinConstant.PEC_SERVICE_SEND_MAIL; String authToken = emailConfig.getAuthToken(); HttpResponse response2=null; if (Boolean.FALSE.equals(validator.isTestProfileActivated())) { diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/DashboardApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/DashboardApi.java index a6aebf4e..d0fb4bef 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/DashboardApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/DashboardApi.java @@ -35,7 +35,7 @@ public interface DashboardApi { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) @GetMapping(value = "", produces = { "application/json" }) - @PreAuthorize("hasRole('ROLE_SUPER_ADMIN')") + @PreAuthorize("hasRole('ROLE_SUPER_ADMIN') || hasRole('ROLE_INSTRUCTOR_MANAGER')") ResponseEntity> getDashboardWidgetForSuperAdmin(HttpServletRequest request); @Operation(summary = "Api to get dashboard widget for beneficiary", diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index aacc398a..7493f149 100644 --- a/src/main/resources/db/changelog/db.changelog-1.0.0.xml +++ b/src/main/resources/db/changelog/db.changelog-1.0.0.xml @@ -2435,4 +2435,9 @@ newColumnName="appointment_template_id"/> + + + + diff --git a/src/main/resources/db/dump/updated_hub_data_for_email_service_config_25-02-2025.sql b/src/main/resources/db/dump/updated_hub_data_for_email_service_config_25-02-2025.sql new file mode 100644 index 00000000..39bd2860 --- /dev/null +++ b/src/main/resources/db/dump/updated_hub_data_for_email_service_config_25-02-2025.sql @@ -0,0 +1,4 @@ +UPDATE hub +SET email_service_type = 'PEC_SERVICE', + email_service_config = 'JkFbBfuVvq7VWwp5LcWIi+hAa1RJ1ekI0jq3w7gLTXETZiTaN8zC4OBWD53x8FtbfFTh3L/5805CIYTH1BQGa3X9q16q9SDzMy7DKHdmJzOnLKhn74C5akoXKaeXUCGnzp0cSk2c01FV6lwefC29IshijFSumCHtVlgWNeZigBzmWK+M7NS+EXf4goIMzguL5bHpYXfoQunQozeY1SpOoxf4XZfd/MNPeVOA/ZNHDGU=' +WHERE UNIQUE_UUID = 'p4lk3bcx1RStqTaIVVbXs'; \ No newline at end of file