summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKostya <mail@sartin.in>2026-08-13 15:39:56 +0000
committerKostya <mail@sartin.in>2026-08-13 15:39:56 +0000
commit9dd3ec7ff11839503e4d5ef6639d0faa21403095 (patch)
tree925fb81222c055404b63cc8eed8ef7ae710ec5be
parentc58e65ad4fba4b964d26dcf11d6163465fc3cfd3 (diff)
downloadguess-market-9dd3ec7ff11839503e4d5ef6639d0faa21403095.tar.gz
guess-market-9dd3ec7ff11839503e4d5ef6639d0faa21403095.tar.xz
guess-market-9dd3ec7ff11839503e4d5ef6639d0faa21403095.zip
Move I/O provider abstraction to ui-console, add ledger/account/problem DTOs
InputProvider/OutputProvider were api-layer types only ever implemented by the console UI; relocate them there. Drop the unused GuessMarketEngine/LocalGuessMarketService pair, flesh out LoadResultDTO with success/failure variants, and make LocalGuessMarketContext.LoadAsync report real outcomes instead of an empty placeholder.
-rw-r--r--api/src/main/java/market/guess/api/AccountDTO.java6
-rw-r--r--api/src/main/java/market/guess/api/GuessMarketContext.java3
-rw-r--r--api/src/main/java/market/guess/api/GuessMarketEngine.java7
-rw-r--r--api/src/main/java/market/guess/api/LedgerEntryDTO.java4
-rw-r--r--api/src/main/java/market/guess/api/LedgerType.java10
-rw-r--r--api/src/main/java/market/guess/api/LoadResultDTO.java14
-rw-r--r--api/src/main/java/market/guess/api/ProblemDTO.java3
-rw-r--r--engine/src/main/java/market/guess/engine/LocalGuessMarketService.java20
-rw-r--r--engine/src/main/java/market/guess/engine/provider/LocalGuessMarketContext.java11
-rw-r--r--ui-console/src/main/java/market/guess/ui/console/ConsoleInputProvider.java1
-rw-r--r--ui-console/src/main/java/market/guess/ui/console/ConsoleInputProviderFactory.java3
-rw-r--r--ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProvider.java2
-rw-r--r--ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProviderFactory.java3
-rw-r--r--ui-console/src/main/java/market/guess/ui/console/InputProvider.java (renamed from api/src/main/java/market/guess/InputProvider.java)2
-rw-r--r--ui-console/src/main/java/market/guess/ui/console/InputProviderFactory.java (renamed from api/src/main/java/market/guess/InputProviderFactory.java)2
-rw-r--r--ui-console/src/main/java/market/guess/ui/console/Menu.java2
-rw-r--r--ui-console/src/main/java/market/guess/ui/console/OutputProvider.java (renamed from api/src/main/java/market/guess/OutputProvider.java)2
-rw-r--r--ui-console/src/main/java/market/guess/ui/console/OutputProviderFactory.java (renamed from api/src/main/java/market/guess/OutputProviderFactory.java)2
18 files changed, 47 insertions, 50 deletions
diff --git a/api/src/main/java/market/guess/api/AccountDTO.java b/api/src/main/java/market/guess/api/AccountDTO.java
new file mode 100644
index 0000000..8e7123e
--- /dev/null
+++ b/api/src/main/java/market/guess/api/AccountDTO.java
@@ -0,0 +1,6 @@
1package market.guess.api;
2
3import java.util.List;
4
5public record AccountDTO(
6 String owner, String balance, boolean blocked, List<LedgerEntryDTO> entries) {}
diff --git a/api/src/main/java/market/guess/api/GuessMarketContext.java b/api/src/main/java/market/guess/api/GuessMarketContext.java
index 12ffbeb..2d7af4c 100644
--- a/api/src/main/java/market/guess/api/GuessMarketContext.java
+++ b/api/src/main/java/market/guess/api/GuessMarketContext.java
@@ -1,10 +1,9 @@
1package market.guess.api; 1package market.guess.api;
2 2
3import java.util.List; 3import java.util.List;
4import java.util.concurrent.CompletableFuture;
5 4
6public interface GuessMarketContext { 5public interface GuessMarketContext {
7 CompletableFuture<LoadResultDTO> LoadAsync(); 6 LoadResultDTO LoadAsync();
8 7
9 void SaveChangesAsync(); 8 void SaveChangesAsync();
10 9
diff --git a/api/src/main/java/market/guess/api/GuessMarketEngine.java b/api/src/main/java/market/guess/api/GuessMarketEngine.java
deleted file mode 100644
index b6d44a4..0000000
--- a/api/src/main/java/market/guess/api/GuessMarketEngine.java
+++ /dev/null
@@ -1,7 +0,0 @@
1package market.guess.api;
2
3import java.util.concurrent.CompletableFuture;
4
5public interface GuessMarketEngine {
6 CompletableFuture<LoadResultDTO> loadEvents();
7}
diff --git a/api/src/main/java/market/guess/api/LedgerEntryDTO.java b/api/src/main/java/market/guess/api/LedgerEntryDTO.java
new file mode 100644
index 0000000..b8f994c
--- /dev/null
+++ b/api/src/main/java/market/guess/api/LedgerEntryDTO.java
@@ -0,0 +1,4 @@
1package market.guess.api;
2
3public record LedgerEntryDTO(
4 long seq, String at, LedgerType type, String amount, String balanceAfter, String note) {}
diff --git a/api/src/main/java/market/guess/api/LedgerType.java b/api/src/main/java/market/guess/api/LedgerType.java
new file mode 100644
index 0000000..3402b84
--- /dev/null
+++ b/api/src/main/java/market/guess/api/LedgerType.java
@@ -0,0 +1,10 @@
1package market.guess.api;
2
3public enum LedgerType {
4 SUBSIDY,
5 PURCHASE,
6 COMMISSION,
7 PAYOUT,
8 REFUND,
9 DEPOSIT
10}
diff --git a/api/src/main/java/market/guess/api/LoadResultDTO.java b/api/src/main/java/market/guess/api/LoadResultDTO.java
index cf3630b..8cae3c0 100644
--- a/api/src/main/java/market/guess/api/LoadResultDTO.java
+++ b/api/src/main/java/market/guess/api/LoadResultDTO.java
@@ -1,3 +1,15 @@
1package market.guess.api; 1package market.guess.api;
2 2
3public record LoadResultDTO() {} 3import java.util.List;
4
5public record LoadResultDTO(
6 boolean success, String source, int eventsLoaded, List<ProblemDTO> issues) {
7
8 public static LoadResultDTO success(String sourceLabel, int eventsLoaded) {
9 return new LoadResultDTO(true, sourceLabel, eventsLoaded, List.of());
10 }
11
12 public static LoadResultDTO failure(String sourceLabel, List<ProblemDTO> problems) {
13 return new LoadResultDTO(false, sourceLabel, 0, List.copyOf(problems));
14 }
15}
diff --git a/api/src/main/java/market/guess/api/ProblemDTO.java b/api/src/main/java/market/guess/api/ProblemDTO.java
new file mode 100644
index 0000000..682372b
--- /dev/null
+++ b/api/src/main/java/market/guess/api/ProblemDTO.java
@@ -0,0 +1,3 @@
1package market.guess.api;
2
3public record ProblemDTO(String code, String humanizedMessage, String location) {}
diff --git a/engine/src/main/java/market/guess/engine/LocalGuessMarketService.java b/engine/src/main/java/market/guess/engine/LocalGuessMarketService.java
deleted file mode 100644
index dafbef6..0000000
--- a/engine/src/main/java/market/guess/engine/LocalGuessMarketService.java
+++ /dev/null
@@ -1,20 +0,0 @@
1package market.guess.engine;
2
3import java.util.concurrent.CompletableFuture;
4import market.guess.api.GuessMarketContext;
5import market.guess.api.GuessMarketEngine;
6import market.guess.api.LoadResultDTO;
7
8public class LocalGuessMarketService implements GuessMarketEngine {
9 private final GuessMarketContext context;
10
11 public LocalGuessMarketService(GuessMarketContext context) {
12 super();
13 this.context = context;
14 }
15
16 @Override
17 public CompletableFuture<LoadResultDTO> loadEvents() {
18 return context.LoadAsync();
19 }
20}
diff --git a/engine/src/main/java/market/guess/engine/provider/LocalGuessMarketContext.java b/engine/src/main/java/market/guess/engine/provider/LocalGuessMarketContext.java
index 628038d..cf0923b 100644
--- a/engine/src/main/java/market/guess/engine/provider/LocalGuessMarketContext.java
+++ b/engine/src/main/java/market/guess/engine/provider/LocalGuessMarketContext.java
@@ -4,30 +4,31 @@ import jakarta.xml.bind.JAXBContext;
4import jakarta.xml.bind.Marshaller; 4import jakarta.xml.bind.Marshaller;
5import java.io.File; 5import java.io.File;
6import java.util.List; 6import java.util.List;
7import java.util.concurrent.CompletableFuture;
8import market.guess.api.CommissionChargeType; 7import market.guess.api.CommissionChargeType;
9import market.guess.api.EventDTO; 8import market.guess.api.EventDTO;
10import market.guess.api.EventStatus; 9import market.guess.api.EventStatus;
11import market.guess.api.GuessMarketContext; 10import market.guess.api.GuessMarketContext;
12import market.guess.api.LoadResultDTO; 11import market.guess.api.LoadResultDTO;
12import market.guess.api.ProblemDTO;
13import market.guess.engine.model.GuessMarket; 13import market.guess.engine.model.GuessMarket;
14 14
15public class LocalGuessMarketContext implements GuessMarketContext { 15public class LocalGuessMarketContext implements GuessMarketContext {
16 private GuessMarket context; 16 private GuessMarket context;
17 17
18 @Override 18 @Override
19 public CompletableFuture<LoadResultDTO> LoadAsync() { 19 public LoadResultDTO LoadAsync() {
20 var file = new File("test-data/ex-1/multiple.xml");
20 try { 21 try {
21 var file = new File("test-data/ex-1/multiple.xml");
22 var ctx = JAXBContext.newInstance(GuessMarket.class); 22 var ctx = JAXBContext.newInstance(GuessMarket.class);
23 var unmarshaller = ctx.createUnmarshaller(); 23 var unmarshaller = ctx.createUnmarshaller();
24 24
25 context = (GuessMarket) unmarshaller.unmarshal(file); 25 context = (GuessMarket) unmarshaller.unmarshal(file);
26 26 return LoadResultDTO.success(file.getPath(), context.getGMEvents().getGMEvent().size());
27 } catch (Exception e) { 27 } catch (Exception e) {
28 e.printStackTrace(); 28 e.printStackTrace();
29 return LoadResultDTO.failure(
30 file.getPath(), List.of(new ProblemDTO("LOAD_FAILED", e.getMessage(), file.getPath())));
29 } 31 }
30 return CompletableFuture.completedFuture(new LoadResultDTO());
31 } 32 }
32 33
33 @Override 34 @Override
diff --git a/ui-console/src/main/java/market/guess/ui/console/ConsoleInputProvider.java b/ui-console/src/main/java/market/guess/ui/console/ConsoleInputProvider.java
index 71de3be..38b02a9 100644
--- a/ui-console/src/main/java/market/guess/ui/console/ConsoleInputProvider.java
+++ b/ui-console/src/main/java/market/guess/ui/console/ConsoleInputProvider.java
@@ -1,7 +1,6 @@
1package market.guess.ui.console; 1package market.guess.ui.console;
2 2
3import java.util.Scanner; 3import java.util.Scanner;
4import market.guess.InputProvider;
5 4
6public class ConsoleInputProvider implements InputProvider { 5public class ConsoleInputProvider implements InputProvider {
7 private final Scanner scanner = new Scanner(System.in); 6 private final Scanner scanner = new Scanner(System.in);
diff --git a/ui-console/src/main/java/market/guess/ui/console/ConsoleInputProviderFactory.java b/ui-console/src/main/java/market/guess/ui/console/ConsoleInputProviderFactory.java
index d122549..a7433b7 100644
--- a/ui-console/src/main/java/market/guess/ui/console/ConsoleInputProviderFactory.java
+++ b/ui-console/src/main/java/market/guess/ui/console/ConsoleInputProviderFactory.java
@@ -1,8 +1,5 @@
1package market.guess.ui.console; 1package market.guess.ui.console;
2 2
3import market.guess.InputProvider;
4import market.guess.InputProviderFactory;
5
6public class ConsoleInputProviderFactory implements InputProviderFactory { 3public class ConsoleInputProviderFactory implements InputProviderFactory {
7 4
8 @Override 5 @Override
diff --git a/ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProvider.java b/ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProvider.java
index eb9f31b..84017ac 100644
--- a/ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProvider.java
+++ b/ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProvider.java
@@ -1,7 +1,5 @@
1package market.guess.ui.console; 1package market.guess.ui.console;
2 2
3import market.guess.OutputProvider;
4
5public class ConsoleOutputProvider implements OutputProvider { 3public class ConsoleOutputProvider implements OutputProvider {
6 4
7 @Override 5 @Override
diff --git a/ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProviderFactory.java b/ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProviderFactory.java
index 6db91fc..3665df3 100644
--- a/ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProviderFactory.java
+++ b/ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProviderFactory.java
@@ -1,8 +1,5 @@
1package market.guess.ui.console; 1package market.guess.ui.console;
2 2
3import market.guess.OutputProvider;
4import market.guess.OutputProviderFactory;
5
6public class ConsoleOutputProviderFactory implements OutputProviderFactory { 3public class ConsoleOutputProviderFactory implements OutputProviderFactory {
7 4
8 @Override 5 @Override
diff --git a/api/src/main/java/market/guess/InputProvider.java b/ui-console/src/main/java/market/guess/ui/console/InputProvider.java
index be7372b..3579b4a 100644
--- a/api/src/main/java/market/guess/InputProvider.java
+++ b/ui-console/src/main/java/market/guess/ui/console/InputProvider.java
@@ -1,4 +1,4 @@
1package market.guess; 1package market.guess.ui.console;
2 2
3public interface InputProvider extends AutoCloseable { 3public interface InputProvider extends AutoCloseable {
4 int nextInt(); 4 int nextInt();
diff --git a/api/src/main/java/market/guess/InputProviderFactory.java b/ui-console/src/main/java/market/guess/ui/console/InputProviderFactory.java
index 6801103..dcbb1c6 100644
--- a/api/src/main/java/market/guess/InputProviderFactory.java
+++ b/ui-console/src/main/java/market/guess/ui/console/InputProviderFactory.java
@@ -1,4 +1,4 @@
1package market.guess; 1package market.guess.ui.console;
2 2
3public interface InputProviderFactory { 3public interface InputProviderFactory {
4 InputProvider create(); 4 InputProvider create();
diff --git a/ui-console/src/main/java/market/guess/ui/console/Menu.java b/ui-console/src/main/java/market/guess/ui/console/Menu.java
index a5217a4..4bf8929 100644
--- a/ui-console/src/main/java/market/guess/ui/console/Menu.java
+++ b/ui-console/src/main/java/market/guess/ui/console/Menu.java
@@ -1,7 +1,5 @@
1package market.guess.ui.console; 1package market.guess.ui.console;
2 2
3import market.guess.OutputProvider;
4import market.guess.OutputProviderFactory;
5import org.picocontainer.Startable; 3import org.picocontainer.Startable;
6 4
7public class Menu implements Startable { 5public class Menu implements Startable {
diff --git a/api/src/main/java/market/guess/OutputProvider.java b/ui-console/src/main/java/market/guess/ui/console/OutputProvider.java
index 774408e..57ff001 100644
--- a/api/src/main/java/market/guess/OutputProvider.java
+++ b/ui-console/src/main/java/market/guess/ui/console/OutputProvider.java
@@ -1,4 +1,4 @@
1package market.guess; 1package market.guess.ui.console;
2 2
3public interface OutputProvider { 3public interface OutputProvider {
4 void print(Object object); 4 void print(Object object);
diff --git a/api/src/main/java/market/guess/OutputProviderFactory.java b/ui-console/src/main/java/market/guess/ui/console/OutputProviderFactory.java
index b4eb7f5..6d6601f 100644
--- a/api/src/main/java/market/guess/OutputProviderFactory.java
+++ b/ui-console/src/main/java/market/guess/ui/console/OutputProviderFactory.java
@@ -1,4 +1,4 @@
1package market.guess; 1package market.guess.ui.console;
2 2
3public interface OutputProviderFactory { 3public interface OutputProviderFactory {
4 OutputProvider create(); 4 OutputProvider create();