diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 06e0927c..3ebf7e5f 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -178,5 +178,5 @@ public class GepafinConstant { public static final String INVALID_EMAIL = "invalid.email"; public static final String UNAUTHORIZED = "UNAUTHORIZED"; public static final String COMPANY_ID_MANDATORY = "company.id.mandatory"; - + public static final String USER_ALREADY_CONNECTED_TO_COMPANY = "user.already.connected.to.company"; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/CompanyDao.java b/src/main/java/net/gepafin/tendermanagement/dao/CompanyDao.java index 5aa03a64..219b1579 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/CompanyDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/CompanyDao.java @@ -34,13 +34,27 @@ public class CompanyDao { private UserWithCompanyRepository userWithCompanyRepository; public CompanyResponse createCompany(UserEntity userEntity, CompanyRequest companyRequest) { - validateCompany(companyRequest); - CompanyEntity companyEntity = convertCompanyRequestToCompanyEntity(companyRequest); - companyRepository.save(companyEntity); - createUserWithCompanyRelation(userEntity, companyEntity); - return convertCompanyEntityToCompanyResponse(companyEntity); + CompanyEntity existingCompany = companyRepository.findByVatNumber(companyRequest.getVatNumber()); + if (existingCompany != null) { + UserWithCompanyEntity existingRelation = userWithCompanyRepository.findByUserIdAndCompanyId(userEntity.getId(), existingCompany.getId()) + .orElse(null); + if (existingRelation == null) { + createUserWithCompanyRelation(userEntity, existingCompany); + } else { + throw new CustomValidationException(Status.VALIDATION_ERROR, + Translator.toLocale(GepafinConstant.USER_ALREADY_CONNECTED_TO_COMPANY)); + } + return convertCompanyEntityToCompanyResponse(existingCompany); + } else { + validateCompany(companyRequest); + CompanyEntity companyEntity = convertCompanyRequestToCompanyEntity(companyRequest); + companyRepository.save(companyEntity); + createUserWithCompanyRelation(userEntity, companyEntity); + return convertCompanyEntityToCompanyResponse(companyEntity); + } } + private void validateCompany(CompanyRequest companyRequest) { if (Boolean.FALSE.equals(StringUtils.isEmpty(companyRequest.getEmail())) diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/CompanyRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/CompanyRepository.java index 9dc3a3a5..9206826f 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/CompanyRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/CompanyRepository.java @@ -13,5 +13,6 @@ public interface CompanyRepository extends JpaRepository { List findByIdIn(List companyIds); Boolean existsByVatNumber(String vatNumber); + CompanyEntity findByVatNumber(String vatNumber); } diff --git a/src/main/resources/message_en.properties b/src/main/resources/message_en.properties index 5ef423b2..d70c97f4 100644 --- a/src/main/resources/message_en.properties +++ b/src/main/resources/message_en.properties @@ -205,3 +205,4 @@ vatnumber.mandatory=VatNumber is mandatory. vatnumber.already.exists=VatNumber already exists. invalid.email=Invalid email. company.id.mandatory=Company id is mandatory. +user.already.connected.to.company=The user is already connected to this company. diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index 273cdef9..00e8dcfc 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -198,3 +198,4 @@ vatnumber.mandatory=Il numero di partita IVA vatnumber.already.exists=Il numero di partita IVA esiste già. invalid.email=Email non valida. company.id.mandatory=L'ID dell'azienda è obbligatorio. +user.already.connected.to.company=L'utente è già collegato a questa azienda.