Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Component
- public class BloomFilterManager {
- private int expectedInsertions=500000000;
- private double ffp=0.01;
- private BloomFilter<String> bloomFilter;
- public BloomFilterManager() {
- this.bloomFilter = BloomFilter.create(Funnels.stringFunnel(Charset.defaultCharset()), expectedInsertions, ffp);
- }
- public void populate(List<Invoice> invoices) {
- invoices.stream().map(Invoice::getId).forEach(i -> bloomFilter.put(i));
- }
- public BloomFilter<String> getBloomFilter(){
- return bloomFilter;
- }
- }
- @Service
- public class InvoiceService implements IInvoiceService {
- @Autowired
- private BloomFilterManager bloomFilterManager;
- @Autowired
- private InvoiceRepository invoiceRepository;
- @Override
- public Invoice.PaymentStatus retrievePaymentStatus(String invoiceId) {
- if (!bloomFilterManager.getBloomFilter().mightContain(invoiceId))
- return null;
- return invoiceRepository.findOne(invoiceId).getPaymentStatus();
- }
- }
- @RestController
- @RequestMapping("/api/invoice")
- public class InvoiceController {
- @Autowired
- private InvoiceService invoiceService;
- @GetMapping(path = "/{invoiceId}/status")
- @ResponseStatus(HttpStatus.OK)
- public PaymentStatus retrievePaymentStatus(@PathVariable String invoiceId) {
- PaymentStatus paymentStatus = invoiceService.retrievePaymentStatus(invoiceId);
- if (paymentStatus == null) {
- throw new InvoiceNotFoundException();
- }
- return paymentStatus;
- }
- }
- @RunWith(SpringRunner.class)
- @DataJpaTest
- public class InvoiceServiceTest {
- @TestConfiguration
- static class InvoiceServiceTestContextConfiguration {
- @Bean
- public InvoiceService invoiceService() {
- return new InvoiceService();
- }
- @Bean
- public BloomFilterManager bloomFilterManager() {
- return new BloomFilterManager();
- }
- }
- @Autowired
- private BloomFilterManager bloomFilterManager;
- @Autowired
- private InvoiceService invoiceService;
- @Autowired
- private InvoiceRepository invoiceRepository;
- @Test
- public void retrievePaymentStatusReturnsPaidStatus() {
- Faker faker = new Faker();
- Invoice invoice = invoiceRepository.save(new Invoice(
- faker.number().randomNumber(),
- faker.lorem().word(),
- faker.number().randomDigit(),
- new BigDecimal(Math.random()),
- Invoice.PaymentStatus.PAID,
- faker.date().between(new Date(), DateUtils.addDays(new Date(), 13))
- ));
- bloomFilterManager.getBloomFilter().put(invoice.getId());
- Invoice.PaymentStatus actualPaymentStatus = invoiceService.retrievePaymentStatus(invoice.getId());
- assertEquals(Invoice.PaymentStatus.PAID, actualPaymentStatus);
- }
- @Test
- public void retrievePaymentStatusReturnsNull() {
- Invoice.PaymentStatus actualPaymentStatus = invoiceService.retrievePaymentStatus("");
- assertEquals(null, actualPaymentStatus);
- }
- }
- when(bloomFilterManager.getBloomFilter().mightContaint(anyString())).therReturn(true);
Add Comment
Please, Sign In to add comment