Skip to content

Commit

Permalink
feat : using blaze multiselect views
Browse files Browse the repository at this point in the history
  • Loading branch information
rajadilipkolli committed Jan 29, 2024
1 parent 730a00c commit 5f33418
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 15 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.learning.mfscreener.repository;

import com.learning.mfscreener.models.entityviews.UserCASDetailsEntityView;

public interface CustomUserCASDetailsEntityRepository {

UserCASDetailsEntityView findByInvestorEmailAndName(String email, String name);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.learning.mfscreener.repository;

import com.blazebit.persistence.CriteriaBuilderFactory;
import com.blazebit.persistence.view.EntityViewManager;
import com.blazebit.persistence.view.EntityViewSetting;
import com.learning.mfscreener.entities.UserCASDetailsEntity;
import com.learning.mfscreener.models.entityviews.UserCASDetailsEntityView;
import jakarta.persistence.EntityManager;

public class CustomUserCASDetailsEntityRepositoryImpl implements CustomUserCASDetailsEntityRepository {

private final EntityManager entityManager;

private final CriteriaBuilderFactory criteriaBuilderFactory;

private final EntityViewManager entityViewManager;

public CustomUserCASDetailsEntityRepositoryImpl(
EntityManager entityManager,
CriteriaBuilderFactory criteriaBuilderFactory,
EntityViewManager entityViewManager) {
this.entityManager = entityManager;
this.criteriaBuilderFactory = criteriaBuilderFactory;
this.entityViewManager = entityViewManager;
}

@Override
public UserCASDetailsEntityView findByInvestorEmailAndName(String email, String name) {
return entityViewManager
.applySetting(
EntityViewSetting.create(UserCASDetailsEntityView.class),
criteriaBuilderFactory.create(entityManager, UserCASDetailsEntity.class))
.where("investorInfoEntity.email")
.eq(email)
.where("investorInfoEntity.name")
.eq(name) // Adding condition for the name
.getSingleResult();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
import org.springframework.transaction.annotation.Transactional;

@Repository
public interface UserCASDetailsEntityRepository extends JpaRepository<UserCASDetailsEntity, Long> {
public interface UserCASDetailsEntityRepository
extends JpaRepository<UserCASDetailsEntity, Long>, CustomUserCASDetailsEntityRepository {

@Transactional(readOnly = true)
@Query(
Expand Down Expand Up @@ -55,11 +56,4 @@ utd.type NOT IN ('STAMP_DUTY_TAX', 'STT_TAX')
""")
List<PortfolioDetailsProjection> getPortfolioDetails(
@Param("pan") String panNumber, @Param("asOfDate") LocalDate asOfDate);

@Query(
"""
select u from UserCASDetailsEntity u join fetch u.folioEntities join fetch u.investorInfoEntity as i
where i.email = :email and i.name = :name
""")
UserCASDetailsEntity findByInvestorEmailAndName(@Param("email") String email, @Param("name") String name);
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
import com.learning.mfscreener.mapper.CasDetailsMapper;
import com.learning.mfscreener.models.MFSchemeDTO;
import com.learning.mfscreener.models.PortfolioDetailsDTO;
import com.learning.mfscreener.models.entityviews.UserCASDetailsEntityView;
import com.learning.mfscreener.models.entityviews.UserFolioDetailsEntityView;
import com.learning.mfscreener.models.portfolio.CasDTO;
import com.learning.mfscreener.models.portfolio.UserFolioDTO;
import com.learning.mfscreener.models.portfolio.UserSchemeDTO;
Expand Down Expand Up @@ -93,7 +95,8 @@ UploadResponseHolder findDelta(String email, String name, CasDTO casDTO) {
List<UserTransactionDetailsEntity> userTransactionDetailsEntityList =
this.userTransactionDetailsEntityRepository.findAllTransactionsByEmailAndName(email, name);

UserCASDetailsEntity userCASDetailsEntity = casDetailsEntityRepository.findByInvestorEmailAndName(email, name);
UserCASDetailsEntityView userCASDetailsEntityView =
casDetailsEntityRepository.findByInvestorEmailAndName(email, name);

if (userTransactionDTOListCount == userTransactionDetailsEntityList.size()) {
log.info("No new transactions are added");
Expand All @@ -104,16 +107,16 @@ UploadResponseHolder findDelta(String email, String name, CasDTO casDTO) {
AtomicInteger transactionsCounter = new AtomicInteger();

// Verify if new folios are added
List<String> existingFolios = userCASDetailsEntity.getFolioEntities().stream()
.map(UserFolioDetailsEntity::getFolio)
List<String> existingFolios = userCASDetailsEntityView.getFolioEntities().stream()
.map(UserFolioDetailsEntityView::getFolio)
.toList();

folioDTOList.forEach(userFolioDTO -> {
String folio = userFolioDTO.folio();
if (!existingFolios.contains(folio)) {
log.info("New folio: {} created that is not present in the database", folio);
userCASDetailsEntity.addFolioEntity(
casDetailsMapper.mapUserFolioDTOToUserFolioDetailsEntity(userFolioDTO));
// userCASDetailsEntityView.addFolioEntity(
// casDetailsMapper.mapUserFolioDTOToUserFolioDetailsEntity(userFolioDTO));
folioCounter.incrementAndGet();
int newTransactions = userFolioDTO.schemes().stream()
.map(UserSchemeDTO::transactions)
Expand Down Expand Up @@ -176,7 +179,8 @@ UploadResponseHolder findDelta(String email, String name, CasDTO casDTO) {
});
}
});
userCASDetailsEntity.setFolioEntities(existingUserFolioDetailsEntityList);
// TODO
// userCASDetailsEntityView.setFolioEntities(existingUserFolioDetailsEntityList);

// Check if all new transactions are added as part of adding schemes
if (userTransactionDTOListCount == (userTransactionDetailsEntityList.size() + transactionsCounter.get())) {
Expand Down Expand Up @@ -236,7 +240,7 @@ UploadResponseHolder findDelta(String email, String name, CasDTO casDTO) {
});
}
}
return new UploadResponseHolder(userCASDetailsEntity, folioCounter.get(), transactionsCounter.get());
return new UploadResponseHolder(null, folioCounter.get(), transactionsCounter.get());
}

public PortfolioResponse getPortfolioByPAN(String panNumber, LocalDate asOfDate) {
Expand Down

0 comments on commit 5f33418

Please sign in to comment.