diff options
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 @@ | |||
| 1 | package market.guess.api; | ||
| 2 | |||
| 3 | import java.util.List; | ||
| 4 | |||
| 5 | public 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 @@ | |||
| 1 | package market.guess.api; | 1 | package market.guess.api; |
| 2 | 2 | ||
| 3 | import java.util.List; | 3 | import java.util.List; |
| 4 | import java.util.concurrent.CompletableFuture; | ||
| 5 | 4 | ||
| 6 | public interface GuessMarketContext { | 5 | public 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 @@ | |||
| 1 | package market.guess.api; | ||
| 2 | |||
| 3 | import java.util.concurrent.CompletableFuture; | ||
| 4 | |||
| 5 | public 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 @@ | |||
| 1 | package market.guess.api; | ||
| 2 | |||
| 3 | public 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 @@ | |||
| 1 | package market.guess.api; | ||
| 2 | |||
| 3 | public 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 @@ | |||
| 1 | package market.guess.api; | 1 | package market.guess.api; |
| 2 | 2 | ||
| 3 | public record LoadResultDTO() {} | 3 | import java.util.List; |
| 4 | |||
| 5 | public 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 @@ | |||
| 1 | package market.guess.api; | ||
| 2 | |||
| 3 | public 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 @@ | |||
| 1 | package market.guess.engine; | ||
| 2 | |||
| 3 | import java.util.concurrent.CompletableFuture; | ||
| 4 | import market.guess.api.GuessMarketContext; | ||
| 5 | import market.guess.api.GuessMarketEngine; | ||
| 6 | import market.guess.api.LoadResultDTO; | ||
| 7 | |||
| 8 | public 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; | |||
| 4 | import jakarta.xml.bind.Marshaller; | 4 | import jakarta.xml.bind.Marshaller; |
| 5 | import java.io.File; | 5 | import java.io.File; |
| 6 | import java.util.List; | 6 | import java.util.List; |
| 7 | import java.util.concurrent.CompletableFuture; | ||
| 8 | import market.guess.api.CommissionChargeType; | 7 | import market.guess.api.CommissionChargeType; |
| 9 | import market.guess.api.EventDTO; | 8 | import market.guess.api.EventDTO; |
| 10 | import market.guess.api.EventStatus; | 9 | import market.guess.api.EventStatus; |
| 11 | import market.guess.api.GuessMarketContext; | 10 | import market.guess.api.GuessMarketContext; |
| 12 | import market.guess.api.LoadResultDTO; | 11 | import market.guess.api.LoadResultDTO; |
| 12 | import market.guess.api.ProblemDTO; | ||
| 13 | import market.guess.engine.model.GuessMarket; | 13 | import market.guess.engine.model.GuessMarket; |
| 14 | 14 | ||
| 15 | public class LocalGuessMarketContext implements GuessMarketContext { | 15 | public 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 @@ | |||
| 1 | package market.guess.ui.console; | 1 | package market.guess.ui.console; |
| 2 | 2 | ||
| 3 | import java.util.Scanner; | 3 | import java.util.Scanner; |
| 4 | import market.guess.InputProvider; | ||
| 5 | 4 | ||
| 6 | public class ConsoleInputProvider implements InputProvider { | 5 | public 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 @@ | |||
| 1 | package market.guess.ui.console; | 1 | package market.guess.ui.console; |
| 2 | 2 | ||
| 3 | import market.guess.InputProvider; | ||
| 4 | import market.guess.InputProviderFactory; | ||
| 5 | |||
| 6 | public class ConsoleInputProviderFactory implements InputProviderFactory { | 3 | public 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 @@ | |||
| 1 | package market.guess.ui.console; | 1 | package market.guess.ui.console; |
| 2 | 2 | ||
| 3 | import market.guess.OutputProvider; | ||
| 4 | |||
| 5 | public class ConsoleOutputProvider implements OutputProvider { | 3 | public 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 @@ | |||
| 1 | package market.guess.ui.console; | 1 | package market.guess.ui.console; |
| 2 | 2 | ||
| 3 | import market.guess.OutputProvider; | ||
| 4 | import market.guess.OutputProviderFactory; | ||
| 5 | |||
| 6 | public class ConsoleOutputProviderFactory implements OutputProviderFactory { | 3 | public 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 @@ | |||
| 1 | package market.guess; | 1 | package market.guess.ui.console; |
| 2 | 2 | ||
| 3 | public interface InputProvider extends AutoCloseable { | 3 | public 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 @@ | |||
| 1 | package market.guess; | 1 | package market.guess.ui.console; |
| 2 | 2 | ||
| 3 | public interface InputProviderFactory { | 3 | public 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 @@ | |||
| 1 | package market.guess.ui.console; | 1 | package market.guess.ui.console; |
| 2 | 2 | ||
| 3 | import market.guess.OutputProvider; | ||
| 4 | import market.guess.OutputProviderFactory; | ||
| 5 | import org.picocontainer.Startable; | 3 | import org.picocontainer.Startable; |
| 6 | 4 | ||
| 7 | public class Menu implements Startable { | 5 | public 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 @@ | |||
| 1 | package market.guess; | 1 | package market.guess.ui.console; |
| 2 | 2 | ||
| 3 | public interface OutputProvider { | 3 | public 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 @@ | |||
| 1 | package market.guess; | 1 | package market.guess.ui.console; |
| 2 | 2 | ||
| 3 | public interface OutputProviderFactory { | 3 | public interface OutputProviderFactory { |
| 4 | OutputProvider create(); | 4 | OutputProvider create(); |