Advertisement
bakhridinova

Untitled

Apr 5th, 2023
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.12 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.         Long id = queryFactory.select(qTag.id)
  52.                 .from(qCertificate)
  53.                 .innerJoin(qCertificate.tags, qTag)
  54.                 .where(qCertificate.in(queryFactory
  55.                         .select(qCertificate)
  56.                         .from(qOrder)
  57.                         .innerJoin(qOrder.certificate, qCertificate)
  58.                         .where(qOrder.user.eq(queryFactory
  59.                                 .select(qUser)
  60.                                 .from(qOrder)
  61.                                 .innerJoin(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.         return findById(id);
  71.     }
  72.  
  73.     @Override
  74.     public boolean exists(String name) {
  75.         JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
  76.         QTag tag = QTag.tag;
  77.         return queryFactory.selectFrom(tag)
  78.                 .where(tag.name.eq(name))
  79.                 .fetchOne() != null;
  80.     }
  81.  
  82.     @Override
  83.     @Transactional
  84.     public void save(Tag tag) {
  85.         entityManager.persist(tag);
  86.     }
  87.  
  88.     @Override
  89.     public void delete(Tag tag) {
  90.         entityManager.remove(tag);
  91.     }
  92. }
  93.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement