Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# These are some examples of commonly ignored file patterns.
# You should customize this list as applicable to your project.
# Learn more about .gitignore:
# https://www.atlassian.com/git/tutorials/saving-changes/gitignore

# Node artifact files
node_modules/
dist/

# Compiled Java class files
*.class

# Compiled Python bytecode
*.py[cod]

# Log files
*.log

# Package files
*.jar

# Maven
target/
dist/

# JetBrains IDE
.idea/

# Unit test reports
TEST*.xml

# Generated by MacOS
.DS_Store

# Generated by Windows
Thumbs.db

# Applications
*.app
*.exe
*.war

# Large media files
*.mp4
*.tiff
*.avi
*.flv
*.mov
*.wmv

142 changes: 142 additions & 0 deletions java-code-challenge.iml
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="web" name="Web">
<configuration>
<webroots />
<sourceRoots>
<root url="file://$MODULE_DIR$/src/main/java" />
<root url="file://$MODULE_DIR$/src/main/resources" />
</sourceRoots>
</configuration>
</facet>
<facet type="Spring" name="Spring">
<configuration />
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_17">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-r2dbc:3.3.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:3.3.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:3.3.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:3.3.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:3.3.1" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.5.6" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.5.6" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.23.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.23.1" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:2.0.13" level="project" />
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:2.1.1" level="project" />
<orderEntry type="library" name="Maven: org.yaml:snakeyaml:2.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-r2dbc:3.3.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-relational:3.3.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:3.3.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-beans:6.1.10" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:6.1.10" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-r2dbc:6.1.10" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:2.0.13" level="project" />
<orderEntry type="library" name="Maven: io.r2dbc:r2dbc-spi:1.0.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.4" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:3.3.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:3.3.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.17.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.17.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.17.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.17.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.17.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.17.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:3.3.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:10.1.25" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:10.1.25" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:10.1.25" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-web:6.1.10" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:6.1.10" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:6.1.10" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:6.1.10" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-webflux:3.3.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-reactor-netty:3.3.1" level="project" />
<orderEntry type="library" name="Maven: io.projectreactor.netty:reactor-netty-http:1.1.20" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.111.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.111.Final" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-webflux:6.1.10" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.postgresql:postgresql:42.7.3" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.checkerframework:checker-qual:3.42.0" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.postgresql:r2dbc-postgresql:1.0.5.RELEASE" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: com.ongres.scram:client:2.1" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: com.ongres.scram:common:2.1" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: com.ongres.stringprep:saslprep:1.1" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: com.ongres.stringprep:stringprep:1.1" level="project" />
<orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.6.7" level="project" />
<orderEntry type="library" name="Maven: io.projectreactor.netty:reactor-netty-core:1.1.20" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.111.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-common:4.1.111.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.111.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.111.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.111.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-transport-native-unix-common:4.1.111.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.111.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.111.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.111.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-resolver-dns:4.1.111.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-codec-dns:4.1.111.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-resolver-dns-native-macos:osx-x86_64:4.1.111.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-resolver-dns-classes-macos:4.1.111.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-transport-native-epoll:linux-x86_64:4.1.111.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-transport-classes-epoll:4.1.111.Final" level="project" />
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.32" level="project" />
<orderEntry type="library" name="Maven: io.r2dbc:r2dbc-pool:1.0.1.RELEASE" level="project" />
<orderEntry type="library" name="Maven: io.projectreactor.addons:reactor-pool:1.0.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.kafka:spring-kafka:3.2.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:6.1.10" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-messaging:6.1.10" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:6.1.10" level="project" />
<orderEntry type="library" name="Maven: org.springframework.retry:spring-retry:2.0.6" level="project" />
<orderEntry type="library" name="Maven: org.apache.kafka:kafka-clients:3.7.0" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: com.github.luben:zstd-jni:1.5.5-6" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.lz4:lz4-java:1.8.0" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.xerial.snappy:snappy-java:1.1.10.5" level="project" />
<orderEntry type="library" name="Maven: io.micrometer:micrometer-observation:1.13.1" level="project" />
<orderEntry type="library" name="Maven: io.micrometer:micrometer-commons:1.13.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:3.3.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:3.3.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:3.3.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.9.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:4.0.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: jakarta.activation:jakarta.activation-api:2.1.3" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.5.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:2.5.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:9.6" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.25.3" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy:1.14.17" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.awaitility:awaitility:4.2.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.10.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.10.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.3.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.10.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.10.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.10.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.10.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:5.11.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.14.17" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:3.3" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:5.11.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-core:6.1.10" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:6.1.10" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:6.1.10" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.9.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: io.projectreactor:reactor-test:3.6.7" level="project" />
</component>
</module>
71 changes: 71 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.1</version>
<relativePath/>
</parent>
<groupId>org.antifraude</groupId>
<artifactId>challenge</artifactId>
<version>1.0-SNAPSHOT</version>
<name>antiFraud</name>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<java.version>17</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-r2dbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>r2dbc-postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>io.r2dbc</groupId>
<artifactId>r2dbc-pool</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-test</artifactId>
<scope>test</scope>
</dependency>

</dependencies>
</project>
13 changes: 13 additions & 0 deletions src/main/java/org/antifraude/AntiFraudApplication.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.antifraude;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class AntiFraudApplication {

public static void main(String[] args) {
SpringApplication.run(AntiFraudApplication.class, args);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package org.antifraude.adapters.config;

import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.common.serialization.StringDeserializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
import org.springframework.kafka.core.ConsumerFactory;
import org.springframework.kafka.core.DefaultKafkaConsumerFactory;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class KafkaConsumerConfig {

@Bean
public ConsumerFactory<String, String> consumerFactory() {
Map<String, Object> configProps = new HashMap<>();
configProps.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
configProps.put(ConsumerConfig.GROUP_ID_CONFIG, "antifraude");
configProps.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
configProps.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
// configProps.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG,true);
// configProps.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, "100");
// configProps.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, "15000");
return new DefaultKafkaConsumerFactory<>(configProps);
}

@Bean
public ConcurrentKafkaListenerContainerFactory<String, String> kafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory());
return factory;
}

}
Loading