UserAssetSummaryRepo.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package com.izouma.nineth.repo;
  2. import com.izouma.nineth.domain.UserAssetSummary;
  3. import org.springframework.data.jpa.repository.JpaRepository;
  4. import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
  5. import org.springframework.data.jpa.repository.Modifying;
  6. import org.springframework.data.jpa.repository.Query;
  7. import javax.transaction.Transactional;
  8. import java.util.List;
  9. public interface UserAssetSummaryRepo extends JpaRepository<UserAssetSummary, Long>, JpaSpecificationExecutor<UserAssetSummary> {
  10. List<UserAssetSummary> findByUserId(Long userId);
  11. @Transactional
  12. @Modifying
  13. void deleteByUserId(Long userId);
  14. @Query(value = "SELECT " +
  15. " a.created_at created_at, " +
  16. " a.id id, " +
  17. " a.id asset_id, " +
  18. " a.user_id, " +
  19. " a.prefix_name, " +
  20. " a.pic, " +
  21. " a.minter, " +
  22. " a.opened, " +
  23. " a.type, " +
  24. " a.status, " +
  25. " a.number, " +
  26. " a.name, " +
  27. " a.public_show, " +
  28. " a.consignment, " +
  29. " IF(b.auctioning_num IS NULL, 0, b.auctioning_num) auctioning_num, " +
  30. " IF(c.consignment_num IS NULL, 0, c.consignment_num) consignment_num, " +
  31. " IF(d.open_show_num IS NULL, 0, d.open_show_num) open_show_num, " +
  32. " IF(e.close_show_num IS NULL, 0, e.close_show_num) close_show_num, " +
  33. " IF(a.num IS NULL, 0, a.num) num " +
  34. "FROM " +
  35. " ( " +
  36. " SELECT " +
  37. " id, " +
  38. " user_id, " +
  39. " prefix_name, " +
  40. " pic, " +
  41. " minter, " +
  42. " opened, " +
  43. " type, " +
  44. " status, " +
  45. " number, " +
  46. " name, " +
  47. " public_show, " +
  48. " consignment, " +
  49. " count(*) num, " +
  50. " max(created_at) created_at " +
  51. " FROM " +
  52. " asset " +
  53. " WHERE " +
  54. " user_id = ?1 " +
  55. " AND STATUS IN ( 'NORMAL', 'TRADING', 'GIFTING', 'MINTING', 'AUCTIONING' ) " +
  56. " AND type IN ( 'BLIND_BOX', 'DEFAULT' ) " +
  57. " AND id NOT IN ( SELECT id FROM asset WHERE type = 'BLIND_BOX' AND opened = 0 ) " +
  58. " GROUP BY " +
  59. " prefix_name " +
  60. " ) a " +
  61. " LEFT JOIN ( " +
  62. " SELECT " +
  63. " user_id userId, " +
  64. " prefix_name prefixName, " +
  65. " count(*) auctioning_num " +
  66. " FROM " +
  67. " asset " +
  68. " WHERE " +
  69. " user_id = ?1 " +
  70. " AND STATUS IN ( 'AUCTIONING' ) " +
  71. " AND type IN ( 'BLIND_BOX', 'DEFAULT' ) " +
  72. " AND id NOT IN ( SELECT id FROM asset WHERE type = 'BLIND_BOX' AND opened = 0 ) " +
  73. " GROUP BY " +
  74. " prefix_name " +
  75. " ) b ON a.user_id = b.userId " +
  76. " AND a.prefix_name = b.prefixName " +
  77. " LEFT JOIN ( " +
  78. " SELECT " +
  79. " user_id userId, " +
  80. " prefix_name prefixName, " +
  81. " count(*) consignment_num " +
  82. " FROM " +
  83. " asset " +
  84. " WHERE " +
  85. " user_id = ?1 " +
  86. " AND STATUS IN ( 'NORMAL', 'TRADING', 'GIFTING', 'MINTING', 'AUCTIONING' ) " +
  87. " AND type IN ( 'BLIND_BOX', 'DEFAULT' ) " +
  88. " AND consignment = 1 " +
  89. " AND id NOT IN ( SELECT id FROM asset WHERE type = 'BLIND_BOX' AND opened = 0 ) " +
  90. " GROUP BY " +
  91. " prefix_name " +
  92. " ) c ON a.user_id = c.userId " +
  93. " AND a.prefix_name = c.prefixName " +
  94. " LEFT JOIN ( " +
  95. " SELECT " +
  96. " user_id userId, " +
  97. " prefix_name prefixName, " +
  98. " count(*) open_show_num " +
  99. " FROM " +
  100. " asset " +
  101. " WHERE " +
  102. " user_id = ?1 " +
  103. " AND STATUS IN ( 'NORMAL', 'TRADING', 'GIFTING', 'MINTING', 'AUCTIONING' ) " +
  104. " AND type IN ( 'BLIND_BOX', 'DEFAULT' ) " +
  105. " AND consignment = 0 " +
  106. " AND public_show = 1 " +
  107. " AND id NOT IN ( SELECT id FROM asset WHERE type = 'BLIND_BOX' AND opened = 0 ) " +
  108. " GROUP BY " +
  109. " prefix_name " +
  110. " ) d ON a.user_id = d.userId " +
  111. " AND a.prefix_name = d.prefixName " +
  112. " LEFT JOIN ( " +
  113. " SELECT " +
  114. " user_id userId, " +
  115. " prefix_name prefixName, " +
  116. " count(*) close_show_num " +
  117. " FROM " +
  118. " asset " +
  119. " WHERE " +
  120. " user_id = ?1 " +
  121. " AND STATUS IN ( 'NORMAL', 'TRADING', 'GIFTING', 'MINTING', 'AUCTIONING' ) " +
  122. " AND type IN ( 'BLIND_BOX', 'DEFAULT' ) " +
  123. " AND consignment = 0 " +
  124. " AND public_show = 0 " +
  125. " AND id NOT IN ( SELECT id FROM asset WHERE type = 'BLIND_BOX' AND opened = 0 ) " +
  126. " GROUP BY " +
  127. " prefix_name " +
  128. " ) e ON a.user_id = e.userId " +
  129. " AND a.prefix_name = e.prefixName", nativeQuery = true)
  130. List<UserAssetSummary> find(Long userId);
  131. }