Skip to content

Commit d13414f

Browse files
authored
Change select (#78)
1 parent 411bd4d commit d13414f

7 files changed

Lines changed: 54 additions & 3 deletions

File tree

src/main/java/dev/vality/fraudbusters/fraud/localstorage/LocalResultStorageRepository.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,18 @@ public Long sumOperationErrorWithGroupBy(String fieldName,
246246
.sum();
247247
}
248248

249+
@Override
250+
public Boolean isExistByField(String fieldName, Object value, Long from, Long to) {
251+
List<CheckedPayment> checkedPayments = localStorage.get();
252+
int count = (int) checkedPayments.stream()
253+
.filter(checkedPayment -> checkedPayment.getEventTime() >= from
254+
&& checkedPayment.getEventTime() <= to
255+
&& paymentFieldValueFilter.filter(fieldName, value, checkedPayment))
256+
.count();
257+
log.debug("LocalResultStorageRepository countOperationByField: {}", count);
258+
return count != 0;
259+
}
260+
249261
private boolean filterByStatusAndFields(
250262
Long from,
251263
Long to,

src/main/java/dev/vality/fraudbusters/repository/PaymentRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,6 @@ Long sumOperationErrorWithGroupBy(
5757
Long to,
5858
List<FieldModel> fieldModels);
5959

60+
61+
Boolean isExistByField(String fieldName, Object value, Long from, Long to);
6062
}

src/main/java/dev/vality/fraudbusters/repository/clickhouse/impl/FraudResultRepository.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,4 +273,15 @@ public Long sumOperationErrorWithGroupBy(String fieldName, Object value, Long fr
273273
return sumOperationErrorWithGroupBy(fieldName, value, from, to, fieldModels, null);
274274
}
275275

276+
@Override
277+
public Boolean isExistByField(String fieldName, Object value, Long from, Long to) {
278+
return aggregationGeneralRepository.countOperationByField(
279+
EventSource.FRAUD_EVENTS_UNIQUE.getTable(),
280+
fieldName,
281+
value,
282+
from,
283+
to
284+
) != 0;
285+
}
286+
276287
}

src/main/java/dev/vality/fraudbusters/repository/clickhouse/impl/PaymentRepositoryImpl.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,4 +332,20 @@ public Long sumOperationErrorWithGroupBy(String fieldName,
332332
return jdbcTemplate.query(resultSql.toString(), params.toArray(), new SumExtractor());
333333
}
334334

335+
@Override
336+
public Boolean isExistByField(String fieldName, Object value, Long from, Long to) {
337+
String sql = String.format("""
338+
select 1 as cnt
339+
from %2$s
340+
where timestamp >= ?
341+
and timestamp <= ?
342+
and eventTime >= ?
343+
and eventTime <= ?
344+
and %1$s = ?
345+
limit 1""", fieldName, TABLE);
346+
List<Object> params = AggregationUtil.generateParams(from, to, value);
347+
log.debug("AggregationGeneralRepositoryImpl isExistByField sql: {} params: {}", sql, params);
348+
return jdbcTemplate.query(sql, params.toArray(), new CountExtractor()) != 0;
349+
}
350+
335351
}

src/main/java/dev/vality/fraudbusters/service/ShopManagementService.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import dev.vality.fraudbusters.util.ReferenceKeyGenerator;
77
import lombok.RequiredArgsConstructor;
88
import lombok.extern.slf4j.Slf4j;
9+
import org.springframework.cache.annotation.Cacheable;
910
import org.springframework.stereotype.Service;
1011

1112
import java.time.Instant;
@@ -22,13 +23,14 @@ public class ShopManagementService {
2223
private final Pool<String> referencePoolImpl;
2324
private final Pool<String> groupReferencePoolImpl;
2425

26+
@Cacheable(value = "isNewShop")
2527
public boolean isNewShop(String partyId, String shopId) {
2628
if (hasReferenceInPools(partyId, shopId)) {
2729
return false;
2830
}
2931
Long to = Instant.now().toEpochMilli();
3032
Long from = Instant.now().minus(properties.getCountToCheckDays(), ChronoUnit.DAYS).toEpochMilli();
31-
return repository.countOperationByField("shopId", shopId, from, to) == 0;
33+
return repository.isExistByField("shopId", shopId, from, to);
3234
}
3335

3436
private boolean hasReferenceInPools(String partyId, String shopId) {

src/test/java/dev/vality/fraudbusters/repository/PaymentRepositoryTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import static dev.vality.fraudbusters.extension.ClickHouseContainerExtension.CLICKHOUSE_CONTAINER;
3636
import static dev.vality.fraudbusters.util.BeanUtil.*;
3737
import static org.junit.jupiter.api.Assertions.assertEquals;
38+
import static org.junit.jupiter.api.Assertions.assertTrue;
3839

3940
@Slf4j
4041
@ActiveProfiles("full-prod")
@@ -77,6 +78,12 @@ public void countOperationByPhoneTest() throws SQLException {
7778
assertEquals(1, count);
7879
}
7980

81+
@Test
82+
public void isExistTest() throws SQLException {
83+
Boolean isExist = paymentRepository.isExistByField(EventField.phone.name(), PHONE, FROM, TO);
84+
assertTrue(isExist);
85+
}
86+
8087
@Test
8188
public void countOperationByEmailTestWithGroupBy() throws SQLException {
8289
PaymentModel paymentModel = createFraudModelSecond();

src/test/java/dev/vality/fraudbusters/service/ShopManagementServiceTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,15 +68,16 @@ public void testCreateDefaultReference() {
6868

6969
@Test
7070
public void testIsNewShop() {
71-
when(fraudResultRepository.countOperationByField(anyString(), anyString(), anyLong(), anyLong())).thenReturn(0);
71+
when(fraudResultRepository.isExistByField(anyString(), anyString(), anyLong(), anyLong())).thenReturn(false);
7272
shopManagementService.isNewShop("partyId", "s1");
73-
verify(fraudResultRepository).countOperationByField(anyString(), anyString(), anyLong(), anyLong());
73+
verify(fraudResultRepository).isExistByField(anyString(), anyString(), anyLong(), anyLong());
7474

7575
referencePoolImpl.add("partyId", "test");
7676
boolean newShop = shopManagementService.isNewShop("partyId", "s1");
7777
assertFalse(newShop);
7878

7979
referencePoolImpl.remove("partyId");
80+
when(fraudResultRepository.isExistByField(anyString(), anyString(), anyLong(), anyLong())).thenReturn(true);
8081
newShop = shopManagementService.isNewShop("partyId", "s1");
8182
assertTrue(newShop);
8283
}

0 commit comments

Comments
 (0)