From 9e5c249377607b112e39bddf9f18aadb0ff2c794 Mon Sep 17 00:00:00 2001 From: Anton Batalin Date: Thu, 20 Jun 2019 12:11:24 +0300 Subject: [PATCH 1/5] updated requests to postgreSQL by cutting searchOffers up to present time --- .../search/offer/OfferSearchCrudRepository.kt | 270 ++++++++++++++---- 1 file changed, 211 insertions(+), 59 deletions(-) diff --git a/src/main/kotlin/com/bitclave/node/repository/search/offer/OfferSearchCrudRepository.kt b/src/main/kotlin/com/bitclave/node/repository/search/offer/OfferSearchCrudRepository.kt index 1cf874d7..0a5025a8 100644 --- a/src/main/kotlin/com/bitclave/node/repository/search/offer/OfferSearchCrudRepository.kt +++ b/src/main/kotlin/com/bitclave/node/repository/search/offer/OfferSearchCrudRepository.kt @@ -34,30 +34,95 @@ interface OfferSearchCrudRepository : PagingAndSortingRepository): List - fun findByOwner(owner: String): List + @Query( + value = """ + SELECT * + FROM ( + select *, TO_TIMESTAMP(t.tags,'Dy Mon DD YYYY HH24:MI:SS') as endTime + from offer_search s JOIN offer_tags t ON t.offer_id = s.offer_id + where t.tags LIKE '%(Coordinated Universal Time)' AND t.tags_key = 'endDate' + ) s1 + WHERE s1.endTime > now() AND s1.owner = :owner + """, + nativeQuery = true + ) + fun findByOwner(@Param("owner") owner: String): List fun findByOwnerIn(owners: List): List - fun findAllByOwnerAndStateIn(owner: String, state: List): List + @Query( + value = """ + SELECT * + FROM ( + select *, TO_TIMESTAMP(t.tags,'Dy Mon DD YYYY HH24:MI:SS') as endTime + from offer_search s JOIN offer_tags t ON t.offer_id = s.offer_id + where t.tags LIKE '%(Coordinated Universal Time)' AND t.tags_key = 'endDate' + ) s1 + WHERE s1.endTime > now() AND s1.owner = :owner AND s1.state IN :state + """, + nativeQuery = true + ) + fun findAllByOwnerAndStateIn( + @Param("owner") owner: String, + @Param("state") state: List + ): List - fun findAllByOwnerAndSearchRequestIdIn(owner: String, searchIds: List): List + @Query( + value = """ + SELECT * + FROM ( + select *, TO_TIMESTAMP(t.tags,'Dy Mon DD YYYY HH24:MI:SS') as endTime + from offer_search s JOIN offer_tags t ON t.offer_id = s.offer_id + where t.tags LIKE '%(Coordinated Universal Time)' AND t.tags_key = 'endDate' + ) s1 + WHERE s1.endTime > now() AND s1.owner = :owner AND s1.search_request_id IN :ids + """, + nativeQuery = true + ) + fun findAllByOwnerAndSearchRequestIdIn( + @Param("owner") owner: String, + @Param("ids") searchRequestIds: List + ): List fun findByOwnerAndOfferId(owner: String, offerId: Long): List fun findByOwnerAndOfferIdIn(owner: String, offerIds: List): List + @Query( + value = """ + SELECT * + FROM ( + select *, TO_TIMESTAMP(t.tags,'Dy Mon DD YYYY HH24:MI:SS') as endTime + from offer_search s JOIN offer_tags t ON t.offer_id = s.offer_id + where t.tags LIKE '%(Coordinated Universal Time)' AND t.tags_key = 'endDate' + ) s1 + WHERE + s1.endTime > now() + AND s1.owner = :owner + AND s1.search_request_id IN :ids + AND s1.state IN :state + """, + nativeQuery = true + ) fun findByOwnerAndSearchRequestIdInAndStateIn( - owner: String, - searchIds: List, - state: List + @Param("owner") owner: String, + @Param("ids") searchRequestIds: List, + @Param("state") state: List ): List @Query( value = """ SELECT *, CASE WHEN r.rank IS NULL THEN 0 ELSE r.rank END AS united_rank - FROM offer_search s LEFT JOIN offer_rank r ON s.offer_id = r.offer_id - WHERE s.owner = :owner - order by united_rank desc, s.updated_at DESC + FROM + ( + select *, TO_TIMESTAMP(t.tags,'Dy Mon DD YYYY HH24:MI:SS') as endTime, s.offer_id as offerID + from offer_search s JOIN offer_tags t ON t.offer_id = s.offer_id + where t.tags LIKE '%(Coordinated Universal Time)' AND t.tags_key = 'endDate' + ) s1 LEFT JOIN offer_rank r ON s1.offerID = r.offer_id + WHERE + s1.owner = :owner + order by + united_rank desc """, nativeQuery = true ) @@ -66,7 +131,13 @@ interface OfferSearchCrudRepository : PagingAndSortingRepository ): List - // the cluster of third requests - // by (Owner AND SearchRequests AND States) - // the differences are only sorting - @Query( value = """ SELECT * - FROM offer_search s, offer o + FROM ( + select *, TO_TIMESTAMP(t.tags,'Dy Mon DD YYYY HH24:MI:SS') as endTime, s.offer_id as offerID + from offer_search s JOIN offer_tags t ON t.offer_id = s.offer_id + where t.tags LIKE '%(Coordinated Universal Time)' AND t.tags_key = 'endDate' + ) s1 JOIN offer o ON s1.offerID = o.id WHERE - s.offer_id = o.id - AND s.owner = :owner - AND s.search_request_id IN :ids - AND s.state IN :state + s1.owner = :owner + AND s1.search_request_id IN :ids + AND s1.state IN :state ORDER BY o.updated_at DESC """, nativeQuery = true @@ -221,9 +343,18 @@ interface OfferSearchCrudRepository : PagingAndSortingRepository Date: Thu, 20 Jun 2019 15:17:50 +0300 Subject: [PATCH 2/5] fix doubled column and replace OfferResultAction to Long --- .../search/offer/OfferSearchCrudRepository.kt | 104 ++++++++++++++---- .../PostgresOfferSearchRepositoryImpl.kt | 4 +- 2 files changed, 84 insertions(+), 24 deletions(-) diff --git a/src/main/kotlin/com/bitclave/node/repository/search/offer/OfferSearchCrudRepository.kt b/src/main/kotlin/com/bitclave/node/repository/search/offer/OfferSearchCrudRepository.kt index 0a5025a8..adde2836 100644 --- a/src/main/kotlin/com/bitclave/node/repository/search/offer/OfferSearchCrudRepository.kt +++ b/src/main/kotlin/com/bitclave/node/repository/search/offer/OfferSearchCrudRepository.kt @@ -38,7 +38,10 @@ interface OfferSearchCrudRepository : PagingAndSortingRepository + @Param("state") state: List ): List @Query( value = """ SELECT * FROM ( - select *, TO_TIMESTAMP(t.tags,'Dy Mon DD YYYY HH24:MI:SS') as endTime + select + s.id, s.offer_id, s.search_request_id, s.state, s.info, s.owner, + s.created_at, s.updated_at, t.tags, t.tags_key, + TO_TIMESTAMP(t.tags,'Dy Mon DD YYYY HH24:MI:SS') as endTime from offer_search s JOIN offer_tags t ON t.offer_id = s.offer_id where t.tags LIKE '%(Coordinated Universal Time)' AND t.tags_key = 'endDate' ) s1 @@ -92,7 +101,10 @@ interface OfferSearchCrudRepository : PagingAndSortingRepository, - @Param("state") state: List + @Param("state") state: List ): List @Query( @@ -115,7 +127,10 @@ interface OfferSearchCrudRepository : PagingAndSortingRepository repository.getOfferSearchByOwnerAndStateAndSortByCashBack(owner, condition) else -> - repository.findAllByOwnerAndStateIn(owner, state) + repository.findAllByOwnerAndStateIn(owner, condition) } } @@ -264,7 +264,7 @@ class PostgresOfferSearchRepositoryImpl( conditions ) else -> - repository.findByOwnerAndSearchRequestIdInAndStateIn(owner, searchRequestIds, state) + repository.findByOwnerAndSearchRequestIdInAndStateIn(owner, searchRequestIds, conditions) } } From d5d0cf25c21f9fec322af6e3b4c40a564ddee220 Mon Sep 17 00:00:00 2001 From: Anton Batalin Date: Thu, 20 Jun 2019 15:18:41 +0300 Subject: [PATCH 3/5] add endDate tag to offers in the test --- .../bitclave/node/search/offer/OfferSearchServiceTest.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/test/kotlin/com/bitclave/node/search/offer/OfferSearchServiceTest.kt b/src/test/kotlin/com/bitclave/node/search/offer/OfferSearchServiceTest.kt index e384c55d..ba8211c6 100644 --- a/src/test/kotlin/com/bitclave/node/search/offer/OfferSearchServiceTest.kt +++ b/src/test/kotlin/com/bitclave/node/search/offer/OfferSearchServiceTest.kt @@ -61,6 +61,7 @@ import org.springframework.test.annotation.DirtiesContext import org.springframework.test.context.ActiveProfiles import org.springframework.test.context.junit4.SpringRunner import java.math.BigDecimal +import java.time.format.DateTimeFormatter import java.util.ArrayList import java.util.concurrent.CompletableFuture import java.util.stream.LongStream @@ -133,7 +134,9 @@ class OfferSearchServiceTest { listOf(), "desc", "title", - "url" + "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") ) protected val offer2 = Offer( @@ -142,7 +145,9 @@ class OfferSearchServiceTest { listOf(), "desc", "title", - "url" + "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") ) protected val offerPrice = OfferPrice( From 5b4752e073726b5924747f561709f2531f482f5d Mon Sep 17 00:00:00 2001 From: Anton Batalin Date: Thu, 20 Jun 2019 18:12:30 +0300 Subject: [PATCH 4/5] tests were updated --- .../search/offer/OfferSearchServiceTest.kt | 163 +++++++++++++++--- 1 file changed, 140 insertions(+), 23 deletions(-) diff --git a/src/test/kotlin/com/bitclave/node/search/offer/OfferSearchServiceTest.kt b/src/test/kotlin/com/bitclave/node/search/offer/OfferSearchServiceTest.kt index ba8211c6..ff0e5e15 100644 --- a/src/test/kotlin/com/bitclave/node/search/offer/OfferSearchServiceTest.kt +++ b/src/test/kotlin/com/bitclave/node/search/offer/OfferSearchServiceTest.kt @@ -339,6 +339,24 @@ class OfferSearchServiceTest { @Test fun `should be delete all old offersSearch items by query`() { + + val offerRepository = PostgresOfferRepositoryImpl(offerCrudRepository, offerSearchCrudRepository) + val offerRepositoryStrategy = OfferRepositoryStrategy(offerRepository) + val repository = offerRepositoryStrategy.changeStrategy(strategy) + + val offers = listOf("1", "2", "3", "4", "5") + .map { + Offer( + 0, businessPublicKey, listOf(), "desc", it, "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") + ) + } + .map { repository.saveOffer(it) } + .map { it.id } + + val partOfOffers = offers.filterIndexed { index, _ -> index > 2 } + val searchRequestWithRtSearch = searchRequestService.putSearchRequest( 0, publicKey, @@ -346,7 +364,7 @@ class OfferSearchServiceTest { strategy ).get() - val firstList: Page = PageImpl(arrayListOf(1, 2, 3, 4, 5), searchPageRequest, 1) + val firstList: Page = PageImpl(offers, searchPageRequest, 1) Mockito.`when`(rtSearchRepository.getOffersIdByQuery("some data", searchPageRequest)) .thenReturn(CompletableFuture.completedFuture(firstList)) @@ -354,9 +372,10 @@ class OfferSearchServiceTest { searchRequestWithRtSearch.id, publicKey, "some data", searchPageRequest, strategy ).get() - val secondList: Page = PageImpl(arrayListOf(4, 5), searchPageRequest, 1) + val secondList: Page = PageImpl(partOfOffers, searchPageRequest, 1) Mockito.`when`(rtSearchRepository.getOffersIdByQuery("some data", searchPageRequest)) .thenReturn(CompletableFuture.completedFuture(secondList)) + offerSearchService.createOfferSearchesByQuery( searchRequestWithRtSearch.id, publicKey, "some data", searchPageRequest, strategy ).get() @@ -967,11 +986,37 @@ class OfferSearchServiceTest { val offerRepositoryStrategy = OfferRepositoryStrategy(offerRepository) val repository = offerRepositoryStrategy.changeStrategy(strategy) - val offer1 = Offer(0, businessPublicKey, listOf(), "desc", "title", "url") + val offer1 = Offer( + 0, + businessPublicKey, + listOf(), + "desc", + "title", + "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") + ) Thread.sleep(1000) - val offer2 = Offer(0, businessPublicKey, listOf(), "desc", "title", "url") + val offer2 = Offer( + 0, businessPublicKey, + listOf(), + "desc", + "title", + "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") + ) Thread.sleep(1000) - val offer3 = Offer(0, businessPublicKey, listOf(), "desc", "title", "url") + val offer3 = Offer( + 0, + businessPublicKey, + listOf(), + "desc", + "title", + "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") + ) val savedOffer1 = repository.saveOffer(offer1) val savedOffer2 = repository.saveOffer(offer2) @@ -1004,9 +1049,21 @@ class OfferSearchServiceTest { val offerRepositoryStrategy = OfferRepositoryStrategy(offerRepository) val repository = offerRepositoryStrategy.changeStrategy(strategy) - val offer1 = Offer(0, businessPublicKey, listOf(), "desc", "title", "url") - val offer2 = Offer(0, businessPublicKey, listOf(), "desc", "title", "url") - val offer3 = Offer(0, businessPublicKey, listOf(), "desc", "title", "url") + val offer1 = Offer( + 0, businessPublicKey, listOf(), "desc", "title", "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") + ) + val offer2 = Offer( + 0, businessPublicKey, listOf(), "desc", "title", "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") + ) + val offer3 = Offer( + 0, businessPublicKey, listOf(), "desc", "title", "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") + ) val savedOffer1 = repository.saveOffer(offer1) val savedOffer2 = repository.saveOffer(offer2) @@ -1062,9 +1119,21 @@ class OfferSearchServiceTest { val offerRankRepositoryStrategy = OfferRankRepositoryStrategy(offerRankRepository) val rankRepository = offerRankRepositoryStrategy.changeStrategy(strategy) - val offer1 = Offer(0, businessPublicKey, listOf(), "desc", "title", "url") - val offer2 = Offer(0, businessPublicKey, listOf(), "desc", "title", "url") - val offer3 = Offer(0, businessPublicKey, listOf(), "desc", "title", "url") + val offer1 = Offer( + 0, businessPublicKey, listOf(), "desc", "title", "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") + ) + val offer2 = Offer( + 0, businessPublicKey, listOf(), "desc", "title", "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") + ) + val offer3 = Offer( + 0, businessPublicKey, listOf(), "desc", "title", "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") + ) val savedOffer1 = repository.saveOffer(offer1) val savedOffer2 = repository.saveOffer(offer2) @@ -1121,11 +1190,23 @@ class OfferSearchServiceTest { val offerRepositoryStrategy = OfferRepositoryStrategy(offerRepository) val repository = offerRepositoryStrategy.changeStrategy(strategy) - val offer1 = Offer(0, businessPublicKey, listOf(), "desc", "title", "url") + val offer1 = Offer( + 0, businessPublicKey, listOf(), "desc", "title", "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") + ) Thread.sleep(1000) - val offer2 = Offer(0, businessPublicKey, listOf(), "desc", "title", "url") + val offer2 = Offer( + 0, businessPublicKey, listOf(), "desc", "title", "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") + ) Thread.sleep(1000) - val offer3 = Offer(0, businessPublicKey, listOf(), "desc", "title", "url") + val offer3 = Offer( + 0, businessPublicKey, listOf(), "desc", "title", "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") + ) val savedOffer1 = repository.saveOffer(offer1) val savedOffer2 = repository.saveOffer(offer2) @@ -1178,9 +1259,21 @@ class OfferSearchServiceTest { val offerRepositoryStrategy = OfferRepositoryStrategy(offerRepository) val repository = offerRepositoryStrategy.changeStrategy(strategy) - val offer1 = Offer(0, businessPublicKey, listOf(), "desc", "title", "url") - val offer2 = Offer(0, businessPublicKey, listOf(), "desc", "title", "url") - val offer3 = Offer(0, businessPublicKey, listOf(), "desc", "title", "url") + val offer1 = Offer( + 0, businessPublicKey, listOf(), "desc", "title", "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") + ) + val offer2 = Offer( + 0, businessPublicKey, listOf(), "desc", "title", "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") + ) + val offer3 = Offer( + 0, businessPublicKey, listOf(), "desc", "title", "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") + ) val savedOffer1 = repository.saveOffer(offer1) val savedOffer2 = repository.saveOffer(offer2) @@ -1221,9 +1314,21 @@ class OfferSearchServiceTest { val offerRankRepositoryStrategy = OfferRankRepositoryStrategy(offerRankRepository) val rankRepository = offerRankRepositoryStrategy.changeStrategy(strategy) - val offer1 = Offer(0, businessPublicKey, listOf(), "desc", "title", "url") - val offer2 = Offer(0, businessPublicKey, listOf(), "desc", "title", "url") - val offer3 = Offer(0, businessPublicKey, listOf(), "desc", "title", "url") + val offer1 = Offer( + 0, businessPublicKey, listOf(), "desc", "title", "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") + ) + val offer2 = Offer( + 0, businessPublicKey, listOf(), "desc", "title", "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") + ) + val offer3 = Offer( + 0, businessPublicKey, listOf(), "desc", "title", "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") + ) val savedOffer1 = repository.saveOffer(offer1) val savedOffer2 = repository.saveOffer(offer2) @@ -1264,11 +1369,23 @@ class OfferSearchServiceTest { val offerRepositoryStrategy = OfferRepositoryStrategy(offerRepository) val repository = offerRepositoryStrategy.changeStrategy(strategy) - val offer1 = Offer(0, businessPublicKey, listOf(), "desc", "title", "url") + val offer1 = Offer( + 0, businessPublicKey, listOf(), "desc", "title", "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") + ) Thread.sleep(1000) - val offer2 = Offer(0, businessPublicKey, listOf(), "desc", "title", "url") + val offer2 = Offer( + 0, businessPublicKey, listOf(), "desc", "title", "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") + ) Thread.sleep(1000) - val offer3 = Offer(0, businessPublicKey, listOf(), "desc", "title", "url") + val offer3 = Offer( + 0, businessPublicKey, listOf(), "desc", "title", "url", + BigDecimal.TEN.toString(), + mapOf("endDate" to "Mon Jul 22 3019 19:00:20 GMT+0000 (Coordinated Universal Time)") + ) val savedOffer1 = repository.saveOffer(offer1) val savedOffer2 = repository.saveOffer(offer2) From 6cb47515a9aec7bfa70848cf2408e8361960b2ba Mon Sep 17 00:00:00 2001 From: Anton Batalin Date: Thu, 20 Jun 2019 18:21:17 +0300 Subject: [PATCH 5/5] code cleanup --- .../node/repository/search/offer/OfferSearchCrudRepository.kt | 1 - .../com/bitclave/node/search/offer/OfferSearchServiceTest.kt | 1 - 2 files changed, 2 deletions(-) diff --git a/src/main/kotlin/com/bitclave/node/repository/search/offer/OfferSearchCrudRepository.kt b/src/main/kotlin/com/bitclave/node/repository/search/offer/OfferSearchCrudRepository.kt index adde2836..dacf5bff 100644 --- a/src/main/kotlin/com/bitclave/node/repository/search/offer/OfferSearchCrudRepository.kt +++ b/src/main/kotlin/com/bitclave/node/repository/search/offer/OfferSearchCrudRepository.kt @@ -1,6 +1,5 @@ package com.bitclave.node.repository.search.offer -import com.bitclave.node.repository.models.OfferResultAction import com.bitclave.node.repository.models.OfferSearch import org.springframework.data.domain.Page import org.springframework.data.domain.Pageable diff --git a/src/test/kotlin/com/bitclave/node/search/offer/OfferSearchServiceTest.kt b/src/test/kotlin/com/bitclave/node/search/offer/OfferSearchServiceTest.kt index ff0e5e15..34189429 100644 --- a/src/test/kotlin/com/bitclave/node/search/offer/OfferSearchServiceTest.kt +++ b/src/test/kotlin/com/bitclave/node/search/offer/OfferSearchServiceTest.kt @@ -61,7 +61,6 @@ import org.springframework.test.annotation.DirtiesContext import org.springframework.test.context.ActiveProfiles import org.springframework.test.context.junit4.SpringRunner import java.math.BigDecimal -import java.time.format.DateTimeFormatter import java.util.ArrayList import java.util.concurrent.CompletableFuture import java.util.stream.LongStream