diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 3a160d09..1a426afa 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -290,5 +290,6 @@ public class GepafinConstant { public static final String REMINDER_EMAIL_SENT_SUCCESS_MSG = "reminder.email.sent.success.msg"; public static final String ENCRYPT_INIT_VECTOR = "IG8*(*@&)*#biVVD"; public static final String ENCRYPT_KEY = "U2VjdXJlRW5jcnlwdEtleQ=="; + public static final String DUPLICATE_BENEFICIARY_CALL = "beneficiary.call.duplicate"; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/BeneficiaryPreferredCallDao.java b/src/main/java/net/gepafin/tendermanagement/dao/BeneficiaryPreferredCallDao.java index 0fde4365..60f8ea20 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/BeneficiaryPreferredCallDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/BeneficiaryPreferredCallDao.java @@ -10,6 +10,7 @@ import net.gepafin.tendermanagement.model.request.BeneficiaryPreferredCallReq; import net.gepafin.tendermanagement.model.response.BeneficiaryPreferredCallResponseBean; import net.gepafin.tendermanagement.repositories.BeneficiaryPreferredCallRepository; import net.gepafin.tendermanagement.util.Validator; +import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.slf4j.Logger; @@ -20,6 +21,7 @@ import org.springframework.stereotype.Component; import jakarta.servlet.http.HttpServletRequest; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; @@ -35,10 +37,19 @@ public class BeneficiaryPreferredCallDao { private Validator validator; - public BeneficiaryPreferredCallResponseBean createBeneficiaryPreferredCall(HttpServletRequest httpServletRequest, BeneficiaryPreferredCallReq request,UserEntity user) { + public BeneficiaryPreferredCallResponseBean createBeneficiaryPreferredCall(HttpServletRequest httpServletRequest, BeneficiaryPreferredCallReq request, UserEntity user) { log.info("Creating new beneficiary preferred call with details: {}", request); validator.validateUserWithCompany(httpServletRequest, request.getCompanyId()); - BeneficiaryPreferredCallEntity entity = convertRequestToEntity(request,user); + + Optional existingCall = beneficiaryPreferredCallRepository + .findByUserIdAndCallIdAndCompanyIdAndIsDeletedFalse(user.getId(), request.getCallId(), request.getCompanyId()); + + if (existingCall.isPresent()) { + log.warn("Duplicate beneficiary preferred call detected: {}", existingCall.get()); + throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.DUPLICATE_BENEFICIARY_CALL)); + } + + BeneficiaryPreferredCallEntity entity = convertRequestToEntity(request, user); entity = beneficiaryPreferredCallRepository.save(entity); log.info("Beneficiary preferred call created with ID: {}", entity.getId()); return convertEntityToResponse(entity); @@ -53,6 +64,7 @@ public class BeneficiaryPreferredCallDao { entity.setCallId(request.getCallId()); entity.setUserId(userEntity.getId()); entity.setCompanyId(request.getCompanyId()); + entity.setIsDeleted( false); return entity; } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/BeneficiaryPreferredCallRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/BeneficiaryPreferredCallRepository.java index 7e01bbc0..04e96ad0 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/BeneficiaryPreferredCallRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/BeneficiaryPreferredCallRepository.java @@ -19,4 +19,6 @@ public interface BeneficiaryPreferredCallRepository extends JpaRepository findByUserIdAndCallIdInAndIsDeletedFalse(Long userId, List callIds); Optional findByIdAndIsDeletedFalse(Long id); + Optional findByUserIdAndCallIdAndCompanyIdAndIsDeletedFalse(Long userId, Long callId, Long companyId); + } diff --git a/src/main/resources/message_en.properties b/src/main/resources/message_en.properties index 220d4654..5d31142c 100644 --- a/src/main/resources/message_en.properties +++ b/src/main/resources/message_en.properties @@ -306,3 +306,4 @@ comment.not.associate.with.amendment = Comment Not Associated with Amendment Req amendment.found.success = Amendment Request Found Successfully. invalid.amendment.for.comment = Invalid Amendment Request for the Given Comment. DD_MM_YYYY_HH_MM = dd_MM_yyyy HH:mm +beneficiary.call.duplicate = A preferred call with this call ID and company ID already exists for this user. \ No newline at end of file diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index ea702497..1cf48572 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -301,3 +301,4 @@ DD_MM_YYYY_HH_MM = dd_MM_yyyy HH:mm create.application.data.amendment.msg =Emendamento alla domanda inviato con successo beneficiary.email.not.found.msg=L'indirizzo email per il beneficiario non è stato trovato. Si prega di assicurarsi che il beneficiario abbia un indirizzo email valido. reminder.email.sent.success.msg=Email di promemoria inviata con successo! +beneficiary.call.duplicate = Una chiamata preferita con questo ID di chiamata e ID azienda esiste già per questo utente. \ No newline at end of file