Advertisement
bakhridinova

Untitled

Apr 5th, 2023
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.08 KB | Software | 0 0
  1. package com.epam.esm.repository.impl;
  2.  
  3. import com.epam.esm.dto.extra.Pagination;
  4. import com.epam.esm.entity.QCertificate;
  5. import com.epam.esm.entity.QOrder;
  6. import com.epam.esm.entity.QTag;
  7. import com.epam.esm.entity.QUser;
  8. import com.epam.esm.entity.Tag;
  9. import com.epam.esm.exception.CustomEntityNotFoundException;
  10. import com.epam.esm.repository.TagRepository;
  11. import com.querydsl.jpa.impl.JPAQueryFactory;
  12. import jakarta.persistence.EntityManager;
  13. import jakarta.persistence.PersistenceContext;
  14. import org.springframework.stereotype.Repository;
  15. import org.springframework.transaction.annotation.Transactional;
  16.  
  17. import java.util.List;
  18. import java.util.Optional;
  19.  
  20. @Repository
  21. public class TagRepositoryImpl implements TagRepository {
  22.  
  23.     @PersistenceContext
  24.     private EntityManager entityManager;
  25.  
  26.     @Override
  27.     public List<Tag> findAll(Pagination pagination) {
  28.         JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
  29.         QTag tag = QTag.tag;
  30.         return queryFactory.selectFrom(tag)
  31.                 .offset(pagination.getOffset())
  32.                 .limit(pagination.getLimit())
  33.                 .stream().toList();
  34.     }
  35.  
  36.     @Override
  37.     public Tag findById(Long id) {
  38.         return Optional.ofNullable(entityManager.find(Tag.class, id))
  39.                 .orElseThrow(() -> new CustomEntityNotFoundException(
  40.                         "failed to find tag by id " + id));
  41.     }
  42.  
  43.     @Override
  44.     public Tag findSpecial() {
  45.         JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
  46.         QCertificate qCertificate = QCertificate.certificate;
  47.         QOrder qOrder = QOrder.order;
  48.         QUser qUser = QUser.user;
  49.         QTag qTag = QTag.tag;
  50.  
  51.         return findById(queryFactory.select(qTag.id)
  52.                 .from(qCertificate)
  53.                 .join(qCertificate.tags, qTag)
  54.                 .where(qCertificate.in(queryFactory
  55.                         .select(qCertificate)
  56.                         .from(qOrder)
  57.                         .join(qOrder.certificate, qCertificate)
  58.                         .where(qOrder.user.eq(queryFactory
  59.                                 .select(qUser)
  60.                                 .from(qOrder)
  61.                                 .join(qOrder.user, qUser)
  62.                                 .groupBy(qOrder.user)
  63.                                 .orderBy(qOrder.price.sum().desc())
  64.                                 .fetchFirst()))
  65.                         .distinct()))
  66.                 .groupBy(qTag.id)
  67.                 .orderBy(qTag.id.count().desc())
  68.                 .fetchFirst());
  69.     }
  70.  
  71.     @Override
  72.     public boolean exists(String name) {
  73.         JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
  74.         QTag tag = QTag.tag;
  75.         return queryFactory.selectFrom(tag)
  76.                 .where(tag.name.eq(name))
  77.                 .fetchOne() != null;
  78.     }
  79.  
  80.     @Override
  81.     @Transactional
  82.     public void save(Tag tag) {
  83.         entityManager.persist(tag);
  84.     }
  85.  
  86.     @Override
  87.     public void delete(Tag tag) {
  88.         entityManager.remove(tag);
  89.     }
  90. }
  91.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement