Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Task 1 + Task 2 #14

Open
wants to merge 13 commits into
base: flow
Choose a base branch
from
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
Empty file added .metadata/.lock
Empty file.
20 changes: 20 additions & 0 deletions .metadata/.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
!SESSION 2024-12-21 02:05:54.514 -----------------------------------------------
eclipse.buildId=4.33.0.20240905-0613
java.version=23
java.vendor=Eclipse Adoptium
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US
Framework arguments: -product org.eclipse.epp.package.jee.product
Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product

!ENTRY ch.qos.logback.classic 1 0 2024-12-21 02:05:57.305
!MESSAGE Activated before the state location was initialized. Retry after the state location is initialized.

!ENTRY ch.qos.logback.classic 1 0 2024-12-21 02:06:07.249
!MESSAGE Logback config file: C:\Users\musta\OneDrive\Desktop\forage-midas\.metadata\.plugins\org.eclipse.m2e.logback\logback.2.6.1.20240411-1122.xml

!ENTRY org.eclipse.egit.ui 2 0 2024-12-21 02:06:11.222
!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git
user global configuration and to define the default location to store repositories: 'C:\Users\musta'. If this is
not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and
EGit might behave differently since they see different configuration options.
This warning can be switched off on the Team > Git > Confirmations and Warnings preference page.
Binary file added .metadata/.mylyn/repositories.xml.zip
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Binary file not shown.
Binary file not shown.
3,145 changes: 3,145 additions & 0 deletions .metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi

Large diffs are not rendered by default.

Binary file not shown.
Binary file not shown.
1 change: 1 addition & 0 deletions .metadata/.plugins/org.eclipse.jdt.core/javaLikeNames.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
java
Binary file not shown.
Binary file not shown.
2 changes: 2 additions & 0 deletions .metadata/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<typeInfoHistroy/>
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<qualifiedTypeNameHistroy/>
Binary file not shown.
1 change: 1 addition & 0 deletions .metadata/.plugins/org.eclipse.m2e.logback/0.log
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
2024-12-21 02:06:11,089 [Worker-4: Loading available Gradle versions] INFO o.e.b.c.i.u.g.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read.
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<configuration scan="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%date [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>${org.eclipse.m2e.log.console.threshold:-OFF}</level> <!-- change to DEBUG to mimic '-consolelog' behaviour -->
</filter>
</appender>

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${org.eclipse.m2e.log.dir}/0.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<FileNamePattern>${org.eclipse.m2e.log.dir}/%i.log</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>10</MaxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%date [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>

<appender name="EclipseLog" class="org.eclipse.m2e.logback.appender.EclipseLogAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender>

<appender name="MavenConsoleLog" class="org.eclipse.m2e.logback.appender.MavenConsoleAppender">
</appender>

<root level="INFO">
<appender-ref ref="FILE" />
<appender-ref ref="STDOUT" />
<appender-ref ref="EclipseLog" />
<appender-ref ref="MavenConsoleLog" />
</root>
</configuration>
Binary file not shown.
6 changes: 6 additions & 0 deletions .metadata/.plugins/org.eclipse.oomph.setup/workspace.setup
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<setup:Workspace
xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI"
xmlns:setup="http://www.eclipse.org/oomph/setup/1.0"
name="workspace"/>
3 changes: 3 additions & 0 deletions .metadata/.plugins/org.eclipse.tips.ide/dialog_settings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<section name="Workbench">
</section>
16 changes: 16 additions & 0 deletions .metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<section name="Workbench">
<section name="SmartImportWizard">
<item key="SmartImportRootWizardPage.STORE_HIDE_ALREADY_OPEN" value="false"/>
<item key="SmartImportRootWizardPage.STORE_CLOSE_IMPORTED" value="false"/>
<item key="SmartImportRootWizardPage.STORE_NESTED_PROJECTS" value="true"/>
<item key="SmartImportRootWizardPage.STORE_CONFIGURE_NATURES" value="true"/>
<section name="SmartImportWizard.dialogBounds">
<item key="DIALOG_X_ORIGIN" value="526"/>
<item key="DIALOG_Y_ORIGIN" value="105"/>
<item key="DIALOG_WIDTH" value="885"/>
<item key="DIALOG_HEIGHT" value="629"/>
<item key="DIALOG_FONT_NAME" value="1|Segoe UI|9.0|0|WINDOWS|1|-12|0|0|0|400|0|0|0|1|0|0|0|0|Segoe UI"/>
</section>
</section>
</section>
4 changes: 4 additions & 0 deletions .metadata/.plugins/org.eclipse.ui.intro/dialog_settings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<section name="Workbench">
<item key="introLaunchBar.location" value="1024"/>
</section>
2 changes: 2 additions & 0 deletions .metadata/.plugins/org.eclipse.ui.intro/introstate
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<state reopen="false"/>
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<section name="Workbench">
</section>
6 changes: 6 additions & 0 deletions .metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<workingSetManager>
<workingSet editPageId="org.eclipse.jdt.internal.ui.DynamicSourcesWorkingSet" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1734764769802_0" label="Java Main Sources" name="Java Main Sources"/>
<workingSet editPageId="org.eclipse.jdt.internal.ui.DynamicSourcesWorkingSet" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1734764769811_1" label="Java Test Sources" name="Java Test Sources"/>
<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1734764770238_2" label="Window Working Set" name="Aggregate for window 1734764770238"/>
</workingSetManager>
3 changes: 3 additions & 0 deletions .metadata/version.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#Sat Dec 21 02:06:06 EST 2024
org.eclipse.core.runtime=2
org.eclipse.platform=4.33.0.v20240903-0240
17 changes: 17 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,19 @@
# Midas
Project repo for the JPMC Advanced Software Engineering Forage program


**Task One:**

![Screenshot 2024-12-21 122439](https://github.com/user-attachments/assets/0c663a0a-f959-431c-9bbe-2f4ddfbe3c5d)

**Task Three:**

![Task 3](https://github.com/user-attachments/assets/d508d384-db04-4389-ac32-138295439f7c)

**Task Four:**

![Task 4](https://github.com/user-attachments/assets/94047c5e-e309-4766-b8d3-b7f1182a3150)

**Task Five:**

![Task 5](https://github.com/user-attachments/assets/79205cf0-ffef-4f98-b0a4-cc605ea8ad55)
18 changes: 18 additions & 0 deletions application.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
general:
kafka-topic: transactions-topic
kafka-bootstrap-servers: localhost:9092

spring:
datasource:
url: jdbc:h2:file:./mydb;AUTO_SERVER=TRUE;DB_CLOSE_DELAY=-1
username: sa
password:
jpa:
hibernate:
ddl-auto: update # Use 'update' to keep the schema in sync with the entities
show-sql: true
h2:
console:
enabled: true
server:
port: 33400
Binary file added data/mydb.mv.db
Binary file not shown.
3 changes: 3 additions & 0 deletions data/mydb.trace.db
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
2024-12-28 14:15:24.802026-05:00 jdbc[3]: exception
org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "USER_RECORD" not found (this database is empty); SQL statement:
INSERT INTO user_record (name, balance) VALUES ('Waldorf', 1000) [42104-224]
41 changes: 40 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,47 @@
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>3.2.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.2.5</version>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>3.1.4</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.2.224</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>3.2.5</version>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka-test</artifactId>
<version>3.1.4</version>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>kafka</artifactId>
<version>1.19.1</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/jpmc/midascore/MidasCoreApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ public static void main(String[] args) {
SpringApplication.run(MidasCoreApplication.class, args);
}

}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.jpmc.midascore;
package com.jpmc.midascore.component;

import org.springframework.stereotype.Component;
import org.testcontainers.shaded.org.apache.commons.io.IOUtils;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.jpmc.midascore;
package com.jpmc.midascore.component;

import com.jpmc.midascore.component.DatabaseConduit;
import com.jpmc.midascore.entity.UserRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

@Component
public class UserPopulator {
Expand All @@ -13,6 +13,7 @@ public class UserPopulator {
@Autowired
private DatabaseConduit databaseConduit;

@Transactional
public void populate() {
String[] userLines = fileLoader.loadStrings("/test_data/lkjhgfdsa.hjkl");
for (String userLine : userLines) {
Expand Down
14 changes: 14 additions & 0 deletions src/main/java/com/jpmc/midascore/config/AppConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.jpmc.midascore.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class AppConfig {

@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
44 changes: 44 additions & 0 deletions src/main/java/com/jpmc/midascore/config/KafkaConsumerConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.jpmc.midascore.config;

import com.jpmc.midascore.foundation.Transaction;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.common.serialization.StringDeserializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.annotation.EnableKafka;
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
import org.springframework.kafka.core.ConsumerFactory;
import org.springframework.kafka.core.DefaultKafkaConsumerFactory;
import org.springframework.kafka.support.serializer.JsonDeserializer;

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

@EnableKafka
@Configuration
public class KafkaConsumerConfig {

@Value("${general.kafka-bootstrap-servers}")
private String bootstrapServers;

@Bean
public ConsumerFactory<String, Transaction> consumerFactory() {
JsonDeserializer<Transaction> deserializer = new JsonDeserializer<>(Transaction.class);
deserializer.addTrustedPackages("*"); // Adjust package trust if needed
Map<String, Object> config = new HashMap<>();
config.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
config.put(ConsumerConfig.GROUP_ID_CONFIG, "transaction-group");
config.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
config.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, deserializer);
return new DefaultKafkaConsumerFactory<>(config, new StringDeserializer(), deserializer);
}

@Bean
public ConcurrentKafkaListenerContainerFactory<String, Transaction> kafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<String, Transaction> factory =
new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory());
return factory;
}
}
36 changes: 36 additions & 0 deletions src/main/java/com/jpmc/midascore/config/KafkaProducerConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.jpmc.midascore.config;

import com.jpmc.midascore.foundation.Transaction;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.common.serialization.StringSerializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.core.DefaultKafkaProducerFactory;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.kafka.core.ProducerFactory;
import org.springframework.kafka.support.serializer.JsonSerializer;

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

@Configuration
public class KafkaProducerConfig {

@Value("${general.kafka-bootstrap-servers}")
private String bootstrapServers;

@Bean
public KafkaTemplate<String, Transaction> kafkaTemplate() {
return new KafkaTemplate<>(producerFactory());
}

@Bean
public ProducerFactory<String, Transaction> producerFactory() {
Map<String, Object> configProps = new HashMap<>();
configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class);
return new DefaultKafkaProducerFactory<>(configProps);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.jpmc.midascore.controller;

import com.jpmc.midascore.foundation.Balance;
import com.jpmc.midascore.service.TransactionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TransactionController {

@Autowired
private TransactionService transactionService;

@GetMapping("/balance")
public Balance getBalance(@RequestParam Long userId){
return transactionService.getBalance(userId);
}

}
Loading