From 0221e16a99989b2ca06e0b0d0c693396d100e326 Mon Sep 17 00:00:00 2001 From: Aayush Agnihotri Date: Sat, 23 Nov 2024 10:11:44 -0500 Subject: [PATCH] Adding new formatter --- .github/hooks/pre-commit | 14 +- README.md | 5 + pom.xml | 213 ++++--- .../java/com/appdev/allin/Application.java | 11 +- .../com/appdev/allin/DataInitializer.java | 509 ++++++++-------- .../contract/BasketballContractGenerator.java | 181 +++--- .../com/appdev/allin/contract/Contract.java | 497 ++++++++-------- .../allin/contract/ContractController.java | 194 +++--- .../allin/contract/ContractGenerator.java | 249 ++++---- .../appdev/allin/contract/ContractRepo.java | 10 +- .../allin/contract/ContractService.java | 328 +++++------ .../java/com/appdev/allin/contract/Event.java | 28 +- .../appdev/allin/contract/OpposingTeam.java | 50 +- .../com/appdev/allin/contract/Rarity.java | 30 +- .../appdev/allin/exceptions/ErrorHandler.java | 71 ++- .../allin/exceptions/ForbiddenException.java | 6 +- .../allin/exceptions/NotForSaleException.java | 6 +- .../allin/exceptions/NotFoundException.java | 6 +- .../allin/exceptions/OverdrawnException.java | 6 +- .../java/com/appdev/allin/player/Player.java | 436 +++++++------- .../appdev/allin/player/PlayerController.java | 204 ++++--- .../com/appdev/allin/player/PlayerRepo.java | 2 +- .../appdev/allin/player/PlayerService.java | 200 ++++--- .../com/appdev/allin/player/Position.java | 6 +- .../appdev/allin/playerData/PlayerData.java | 551 +++++++++--------- .../playerData/PlayerDataController.java | 126 ++-- .../allin/playerData/PlayerDataRepo.java | 12 +- .../allin/playerData/PlayerDataService.java | 111 ++-- .../playerData/util/PopulatePlayerData.java | 196 +++---- .../appdev/allin/transaction/Transaction.java | 259 ++++---- .../transaction/TransactionController.java | 110 ++-- .../allin/transaction/TransactionRepo.java | 12 +- .../allin/transaction/TransactionService.java | 175 +++--- src/main/java/com/appdev/allin/user/User.java | 260 ++++----- .../com/appdev/allin/user/UserController.java | 373 ++++++------ .../java/com/appdev/allin/user/UserRepo.java | 4 +- .../com/appdev/allin/user/UserService.java | 204 ++++--- .../com/appdev/allin/utils/Constants.java | 10 +- .../appdev/allin/AllInApplicationTests.java | 225 ++++--- .../appdev/allin/ContractGeneratorTest.java | 225 ++++--- .../appdev/allin/data/ContractFactory.java | 137 +++-- .../appdev/allin/data/PlayerDataFactory.java | 58 +- .../com/appdev/allin/data/PlayerFactory.java | 30 +- .../appdev/allin/data/TransactionFactory.java | 42 +- .../com/appdev/allin/data/UserFactory.java | 17 +- 45 files changed, 3181 insertions(+), 3218 deletions(-) diff --git a/.github/hooks/pre-commit b/.github/hooks/pre-commit index 1014ffb..1758b50 100755 --- a/.github/hooks/pre-commit +++ b/.github/hooks/pre-commit @@ -1,13 +1,7 @@ -#!/bin/sh - -stagedFiles=$(git diff --staged --name-only) - +# Run linter and formatter echo "Running spotless. Formatting and linting code..." mvn spotless:apply -# Readding changed files -for file in $stagedFiles; do - if test -f "$file"; then - git add $file - fi -done +# Run tests +echo "Running tests..." +mvn test diff --git a/README.md b/README.md index 44903d7..363a067 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,11 @@ Before setting up the project, ensure you have the following installed: ### 1. Clone the Repository +After cloning, `cd` into the repo and run: + +`git config core.hooksPath .github/hooks` to enable the pre-commit hook +`chmod +x .github/hooks/pre-commit` to mark the hook as an executable + ### 2. Create application.properties Create a new `application.properties` file located in `src/main/resources/` by copying the `application.properties.template` file in the same directory. Run: diff --git a/pom.xml b/pom.xml index 759cf44..85dc26c 100644 --- a/pom.xml +++ b/pom.xml @@ -1,112 +1,111 @@ - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.3.5 - - - com.appdev - all-in - 0.0.1-SNAPSHOT - all-in - All In Backend - - 17 - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-test - test - - - org.springframework.boot - spring-boot-devtools - true - - - org.springframework.boot - spring-boot-starter-data-jpa - - - com.mysql - mysql-connector-j - runtime - - + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.3.5 + + + + com.appdev + all-in + 0.0.1-SNAPSHOT + all-in + All In Backend + + 17 + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.boot + spring-boot-devtools + true + + + org.springframework.boot + spring-boot-starter-data-jpa + + + com.mysql + mysql-connector-j + runtime + + org.springdoc springdoc-openapi-starter-webmvc-ui 2.6.0 - - - org.apache.commons - commons-math3 - 3.6.1 - - - org.jsoup - jsoup - 1.17.2 - - - com.github.javafaker - javafaker - 1.0.2 - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - com.diffplug.spotless - spotless-maven-plugin - 2.43.0 - - - - - - - - - - - - - - - - - - org.jacoco - jacoco-maven-plugin - 0.8.12 - - - prepare-agent - - prepare-agent - - - - report - test - - report - - - - - - + + + org.apache.commons + commons-math3 + 3.6.1 + + + org.jsoup + jsoup + 1.17.2 + + + com.github.javafaker + javafaker + 1.0.2 + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + com.diffplug.spotless + spotless-maven-plugin + 2.43.0 + + + + + + + + + + + + + + + + + org.jacoco + jacoco-maven-plugin + 0.8.12 + + + prepare-agent + + prepare-agent + + + + report + + report + + test + + + + + diff --git a/src/main/java/com/appdev/allin/Application.java b/src/main/java/com/appdev/allin/Application.java index 05cbfe6..e832656 100644 --- a/src/main/java/com/appdev/allin/Application.java +++ b/src/main/java/com/appdev/allin/Application.java @@ -2,7 +2,6 @@ import com.appdev.allin.player.PlayerRepo; import com.appdev.allin.playerData.PlayerDataRepo; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -10,11 +9,11 @@ @SpringBootApplication public class Application { - @Autowired PlayerRepo playerRepo; + @Autowired PlayerRepo playerRepo; - @Autowired PlayerDataRepo playerDataRepo; + @Autowired PlayerDataRepo playerDataRepo; - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } } diff --git a/src/main/java/com/appdev/allin/DataInitializer.java b/src/main/java/com/appdev/allin/DataInitializer.java index 0d8a8cd..127981a 100644 --- a/src/main/java/com/appdev/allin/DataInitializer.java +++ b/src/main/java/com/appdev/allin/DataInitializer.java @@ -5,7 +5,6 @@ import com.appdev.allin.player.Position; import com.appdev.allin.playerData.PlayerDataRepo; import com.appdev.allin.playerData.util.PopulatePlayerData; - import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; @@ -13,266 +12,266 @@ @Component public class DataInitializer { - private final PlayerRepo playerRepo; - private final PlayerDataRepo playerDataRepo; + private final PlayerRepo playerRepo; + private final PlayerDataRepo playerDataRepo; - public DataInitializer(PlayerRepo playerRepo, PlayerDataRepo playerDataRepo) { - this.playerRepo = playerRepo; - this.playerDataRepo = playerDataRepo; - } + public DataInitializer(PlayerRepo playerRepo, PlayerDataRepo playerDataRepo) { + this.playerRepo = playerRepo; + this.playerDataRepo = playerDataRepo; + } - @EventListener(ApplicationReadyEvent.class) - public void initializeData() { - populatePlayers(); - populatePlayerData(); - } + @EventListener(ApplicationReadyEvent.class) + public void initializeData() { + populatePlayers(); + populatePlayerData(); + } - // TODO: Hard coded, implement with scraper when done - private void populatePlayers() { - String baseUrl = "src/main/resources/static/images/players/"; + // TODO: Hard coded, implement with scraper when done + private void populatePlayers() { + String baseUrl = "src/main/resources/static/images/players/"; - Player chris_manon = - new Player( - "Chris", - "Manon", - new Position[] {Position.Guard}, - 30, - "6'5", - 209, - "New Milford, N.J.", - "Saint Joseph Regional HS", - baseUrl + "chris_manon.jpeg"); - Player nazir_williams = - new Player( - "Nazir", - "Williams", - new Position[] {Position.Guard}, - 1, - "6'3", - 180, - "Nyack, N.Y.", - "South Kent School", - baseUrl + "nazir.jpeg"); - Player isaiah_gray = - new Player( - "Isaiah", - "Gray", - new Position[] {Position.Guard}, - 13, - "6'3", - 219, - "Brooklyn, N.Y.", - "Martin Luther King HS", - baseUrl + "isaiah.jpeg"); - Player guy_ragland = - new Player( - "Guy", - "Ragland Jr.", - new Position[] {Position.Forward}, - 21, - "6'8", - 246, - "West Hartford, Conn.", - "Northwest Catholic HS", - baseUrl + "guy.jpeg"); - Player sean_hansen = - new Player( - "Sean", - "Hansen", - new Position[] {Position.Forward}, - 20, - "6'9", - 246, - "Ramsey, N.J.", - "Ramsey HS", - baseUrl + "sean.jpeg"); - Player cooper_noard = - new Player( - "Cooper", - "Noard", - new Position[] {Position.Guard}, - 31, - "6'2", - 190, - "Glenview, Ill.", - "Glenbrook South HS", - baseUrl + "cooper.jpeg"); - Player ak_okereke = - new Player( - "AK", - "Okereke", - new Position[] {Position.Forward}, - 12, - "6'7", - 235, - "Clovis, Calif.", - "Clovis North HS", - baseUrl + "ak.jpeg"); - Player keller_boothby = - new Player( - "Keller", - "Boothby", - new Position[] {Position.Forward}, - 15, - "6'7", - 223, - "Plano, Texas", - "Prestonwood Christian Academy", - baseUrl + "keller.jpeg"); - Player ian_imegwu = - new Player( - "Ian", - "Imegwu", - new Position[] {Position.Forward}, - 2, - "6'9", - 226, - "Short Hills, N.J.", - "Blair Academy", - baseUrl + "ian.jpeg"); - Player jake_fiegen = - new Player( - "Jake", - "Fiegen", - new Position[] {Position.Guard}, - 22, - "6'4", - 205, - "Wilmette, Ill.", - "New Trier HS", - baseUrl + "jake.jpeg"); - Player jacob_beccles = - new Player( - "Jacob", - "Beccles", - new Position[] {Position.Guard}, - 5, - "6'3", - 178, - "Philadelphia, Pa.", - "Constitution HS", - baseUrl + "jacob.jpeg"); - Player max_watson = - new Player( - "Max", - "Watson", - new Position[] {Position.Guard}, - 25, - "6'4", - 195, - "Brigham City, Utah", - "Box Elder HS", - baseUrl + "max.jpeg"); - Player chris_cain = - new Player( - "Chris", - "Cain", - new Position[] {Position.Forward}, - 33, - "6'8", - 223, - "Middletown, N.Y.", - "Pine Bush HS", - baseUrl + "chris.jpeg"); - Player evan_williams = - new Player( - "Evan", - "Williams", - new Position[] {Position.Forward}, - 0, - "6'7", - 220, - "Murphy, Texas", - "Plane East Senior HS", - baseUrl + "evan.jpeg"); - Player adam_hinton = - new Player( - "Adam", - "Tsang Hinton", - new Position[] {Position.Guard}, - 11, - "6'5", - 213, - "Studio City, Calif.", - "Harvard-Westlake School", - baseUrl + "adam.jpeg"); - Player dj_nix = - new Player( - "DJ", - "Nix", - new Position[] {Position.Forward}, - 23, - "6'6", - 216, - "Harrisburg, N.C.", - "Cannon School", - baseUrl + "dj.jpeg"); - Player ryan_kiachian = - new Player( - "Ryan", - "Kiachian", - new Position[] {Position.Forward, Position.Center}, - 3, - "6'10", - 228, - "Los Altos Hills, Calif.", - "Bellarmine College Preparatory", - baseUrl + "ryan.jpeg"); - Player darius_ervin = - new Player( - "Darius", - "Ervin", - new Position[] {Position.Guard}, - 14, - "5'8", - 170, - "Brooklyn, N.Y.", - "Northfield Mount Hermon School", - baseUrl + "darius.jpeg"); - Player hayden_franson = - new Player( - "Hayden", - "Franson", - new Position[] {Position.Forward}, - 10, - "6'8", - 218, - "American Fork, Utah", - "American Fork HS", - baseUrl + "hayden.jpeg"); + Player chris_manon = + new Player( + "Chris", + "Manon", + new Position[] {Position.Guard}, + 30, + "6'5", + 209, + "New Milford, N.J.", + "Saint Joseph Regional HS", + baseUrl + "chris_manon.jpeg"); + Player nazir_williams = + new Player( + "Nazir", + "Williams", + new Position[] {Position.Guard}, + 1, + "6'3", + 180, + "Nyack, N.Y.", + "South Kent School", + baseUrl + "nazir.jpeg"); + Player isaiah_gray = + new Player( + "Isaiah", + "Gray", + new Position[] {Position.Guard}, + 13, + "6'3", + 219, + "Brooklyn, N.Y.", + "Martin Luther King HS", + baseUrl + "isaiah.jpeg"); + Player guy_ragland = + new Player( + "Guy", + "Ragland Jr.", + new Position[] {Position.Forward}, + 21, + "6'8", + 246, + "West Hartford, Conn.", + "Northwest Catholic HS", + baseUrl + "guy.jpeg"); + Player sean_hansen = + new Player( + "Sean", + "Hansen", + new Position[] {Position.Forward}, + 20, + "6'9", + 246, + "Ramsey, N.J.", + "Ramsey HS", + baseUrl + "sean.jpeg"); + Player cooper_noard = + new Player( + "Cooper", + "Noard", + new Position[] {Position.Guard}, + 31, + "6'2", + 190, + "Glenview, Ill.", + "Glenbrook South HS", + baseUrl + "cooper.jpeg"); + Player ak_okereke = + new Player( + "AK", + "Okereke", + new Position[] {Position.Forward}, + 12, + "6'7", + 235, + "Clovis, Calif.", + "Clovis North HS", + baseUrl + "ak.jpeg"); + Player keller_boothby = + new Player( + "Keller", + "Boothby", + new Position[] {Position.Forward}, + 15, + "6'7", + 223, + "Plano, Texas", + "Prestonwood Christian Academy", + baseUrl + "keller.jpeg"); + Player ian_imegwu = + new Player( + "Ian", + "Imegwu", + new Position[] {Position.Forward}, + 2, + "6'9", + 226, + "Short Hills, N.J.", + "Blair Academy", + baseUrl + "ian.jpeg"); + Player jake_fiegen = + new Player( + "Jake", + "Fiegen", + new Position[] {Position.Guard}, + 22, + "6'4", + 205, + "Wilmette, Ill.", + "New Trier HS", + baseUrl + "jake.jpeg"); + Player jacob_beccles = + new Player( + "Jacob", + "Beccles", + new Position[] {Position.Guard}, + 5, + "6'3", + 178, + "Philadelphia, Pa.", + "Constitution HS", + baseUrl + "jacob.jpeg"); + Player max_watson = + new Player( + "Max", + "Watson", + new Position[] {Position.Guard}, + 25, + "6'4", + 195, + "Brigham City, Utah", + "Box Elder HS", + baseUrl + "max.jpeg"); + Player chris_cain = + new Player( + "Chris", + "Cain", + new Position[] {Position.Forward}, + 33, + "6'8", + 223, + "Middletown, N.Y.", + "Pine Bush HS", + baseUrl + "chris.jpeg"); + Player evan_williams = + new Player( + "Evan", + "Williams", + new Position[] {Position.Forward}, + 0, + "6'7", + 220, + "Murphy, Texas", + "Plane East Senior HS", + baseUrl + "evan.jpeg"); + Player adam_hinton = + new Player( + "Adam", + "Tsang Hinton", + new Position[] {Position.Guard}, + 11, + "6'5", + 213, + "Studio City, Calif.", + "Harvard-Westlake School", + baseUrl + "adam.jpeg"); + Player dj_nix = + new Player( + "DJ", + "Nix", + new Position[] {Position.Forward}, + 23, + "6'6", + 216, + "Harrisburg, N.C.", + "Cannon School", + baseUrl + "dj.jpeg"); + Player ryan_kiachian = + new Player( + "Ryan", + "Kiachian", + new Position[] {Position.Forward, Position.Center}, + 3, + "6'10", + 228, + "Los Altos Hills, Calif.", + "Bellarmine College Preparatory", + baseUrl + "ryan.jpeg"); + Player darius_ervin = + new Player( + "Darius", + "Ervin", + new Position[] {Position.Guard}, + 14, + "5'8", + 170, + "Brooklyn, N.Y.", + "Northfield Mount Hermon School", + baseUrl + "darius.jpeg"); + Player hayden_franson = + new Player( + "Hayden", + "Franson", + new Position[] {Position.Forward}, + 10, + "6'8", + 218, + "American Fork, Utah", + "American Fork HS", + baseUrl + "hayden.jpeg"); - Player[] players = { - chris_manon, - nazir_williams, - isaiah_gray, - guy_ragland, - sean_hansen, - cooper_noard, - ak_okereke, - keller_boothby, - ian_imegwu, - jake_fiegen, - jacob_beccles, - max_watson, - chris_cain, - evan_williams, - adam_hinton, - dj_nix, - ryan_kiachian, - darius_ervin, - hayden_franson - }; + Player[] players = { + chris_manon, + nazir_williams, + isaiah_gray, + guy_ragland, + sean_hansen, + cooper_noard, + ak_okereke, + keller_boothby, + ian_imegwu, + jake_fiegen, + jacob_beccles, + max_watson, + chris_cain, + evan_williams, + adam_hinton, + dj_nix, + ryan_kiachian, + darius_ervin, + hayden_franson + }; - for (Player player : players) { - if (playerRepo.findByNumber(player.getNumber()) == null) { - playerRepo.save(player); - } - } + for (Player player : players) { + if (playerRepo.findByNumber(player.getNumber()) == null) { + playerRepo.save(player); + } } + } - // TODO: Tie in with scraper data - private void populatePlayerData() { - PopulatePlayerData populatePlayerData = new PopulatePlayerData(playerRepo, playerDataRepo); - populatePlayerData.run(); - } + // TODO: Tie in with scraper data + private void populatePlayerData() { + PopulatePlayerData populatePlayerData = new PopulatePlayerData(playerRepo, playerDataRepo); + populatePlayerData.run(); + } } diff --git a/src/main/java/com/appdev/allin/contract/BasketballContractGenerator.java b/src/main/java/com/appdev/allin/contract/BasketballContractGenerator.java index a1b500b..780cc88 100644 --- a/src/main/java/com/appdev/allin/contract/BasketballContractGenerator.java +++ b/src/main/java/com/appdev/allin/contract/BasketballContractGenerator.java @@ -1,105 +1,102 @@ package com.appdev.allin.contract; -import java.time.LocalDate; -import java.util.concurrent.ThreadLocalRandom; - import com.appdev.allin.player.Player; import com.appdev.allin.playerData.PlayerDataRepo; import com.appdev.allin.user.User; +import java.time.LocalDate; +import java.util.concurrent.ThreadLocalRandom; public class BasketballContractGenerator extends ContractGenerator { - public BasketballContractGenerator(PlayerDataRepo playerDataRepo) { - super(playerDataRepo); - } + public BasketballContractGenerator(PlayerDataRepo playerDataRepo) { + super(playerDataRepo); + } - @Override - public Contract generateContract(User user, Player player, Double buyPrice, Rarity rarity) { - Event event = Event.getRandomEvent(); - OpposingTeam opposingTeam = OpposingTeam.getRandomOpposingTeam(); - Double eventProb = 0.5; - Double ratio = 2.0; + @Override + public Contract generateContract(User user, Player player, Double buyPrice, Rarity rarity) { + Event event = Event.getRandomEvent(); + OpposingTeam opposingTeam = OpposingTeam.getRandomOpposingTeam(); + Double eventProb = 0.5; + Double ratio = 2.0; - // Determine event probability and ratio based on rarity - switch (rarity) { - case Common: - // Probability of event hitting ranges from COMMON_PROB_LOWER_BOUND - - // COMMON_PROB_UPPER_BOUND - eventProb = - ThreadLocalRandom.current().nextDouble() - * (COMMON_PROB_UPPER_BOUND - COMMON_PROB_LOWER_BOUND) - + COMMON_PROB_LOWER_BOUND; - // Payout/buy_in ratio ranges from COMMON_PAYOUT_LOWER_BOUND - - // COMMON_PAYOUT_UPPER_BOUND - ratio = - ThreadLocalRandom.current().nextDouble() - * (COMMON_PAYOUT_UPPER_BOUND - COMMON_PAYOUT_LOWER_BOUND) - + COMMON_PAYOUT_LOWER_BOUND; - break; - case Rare: - // Probability of event hitting ranges from RARE_PROB_LOWER_BOUND - - // RARE_PROB_UPPER_BOUND - eventProb = - ThreadLocalRandom.current().nextDouble() - * (RARE_PROB_UPPER_BOUND - RARE_PROB_LOWER_BOUND) - + RARE_PROB_LOWER_BOUND; - // Payout/buy_in ratio ranges from RARE_PAYOUT_LOWER_BOUND - - // RARE_PAYOUT_UPPER_BOUND - ratio = - ThreadLocalRandom.current().nextDouble() - * (RARE_PAYOUT_UPPER_BOUND - RARE_PAYOUT_LOWER_BOUND) - + RARE_PAYOUT_LOWER_BOUND; - break; - case Epic: - // Probability of event hitting ranges from EPIC_PROB_LOWER_BOUND - - // EPIC_PROB_UPPER_BOUND - eventProb = - ThreadLocalRandom.current().nextDouble() - * (EPIC_PROB_UPPER_BOUND - EPIC_PROB_LOWER_BOUND) - + EPIC_PROB_LOWER_BOUND; - // Payout/buy_in ratio ranges from EPIC_PAYOUT_LOWER_BOUND - - // EPIC_PAYOUT_UPPER_BOUND - ratio = - ThreadLocalRandom.current().nextDouble() - * (EPIC_PAYOUT_UPPER_BOUND - EPIC_PAYOUT_LOWER_BOUND) - + EPIC_PAYOUT_LOWER_BOUND; - break; - case Legendary: - // Probability of event hitting ranges from LEGENDARY_PROB_LOWER_BOUND - - // LEGENDARY_PROB_UPPER_BOUND - eventProb = - ThreadLocalRandom.current().nextDouble() - * (LEGENDARY_PROB_UPPER_BOUND - LEGENDARY_PROB_LOWER_BOUND) - + LEGENDARY_PROB_LOWER_BOUND; - // Payout/buy_in ratio ranges from LEGENDARY_PAYOUT_LOWER_BOUND - - // LEGENDARY_PAYOUT_UPPER_BOUND - ratio = - ThreadLocalRandom.current().nextDouble() - * (LEGENDARY_PAYOUT_UPPER_BOUND - - LEGENDARY_PAYOUT_LOWER_BOUND) - + LEGENDARY_PAYOUT_LOWER_BOUND; - break; - default: - break; - } + // Determine event probability and ratio based on rarity + switch (rarity) { + case Common: + // Probability of event hitting ranges from COMMON_PROB_LOWER_BOUND - + // COMMON_PROB_UPPER_BOUND + eventProb = + ThreadLocalRandom.current().nextDouble() + * (COMMON_PROB_UPPER_BOUND - COMMON_PROB_LOWER_BOUND) + + COMMON_PROB_LOWER_BOUND; + // Payout/buy_in ratio ranges from COMMON_PAYOUT_LOWER_BOUND - + // COMMON_PAYOUT_UPPER_BOUND + ratio = + ThreadLocalRandom.current().nextDouble() + * (COMMON_PAYOUT_UPPER_BOUND - COMMON_PAYOUT_LOWER_BOUND) + + COMMON_PAYOUT_LOWER_BOUND; + break; + case Rare: + // Probability of event hitting ranges from RARE_PROB_LOWER_BOUND - + // RARE_PROB_UPPER_BOUND + eventProb = + ThreadLocalRandom.current().nextDouble() + * (RARE_PROB_UPPER_BOUND - RARE_PROB_LOWER_BOUND) + + RARE_PROB_LOWER_BOUND; + // Payout/buy_in ratio ranges from RARE_PAYOUT_LOWER_BOUND - + // RARE_PAYOUT_UPPER_BOUND + ratio = + ThreadLocalRandom.current().nextDouble() + * (RARE_PAYOUT_UPPER_BOUND - RARE_PAYOUT_LOWER_BOUND) + + RARE_PAYOUT_LOWER_BOUND; + break; + case Epic: + // Probability of event hitting ranges from EPIC_PROB_LOWER_BOUND - + // EPIC_PROB_UPPER_BOUND + eventProb = + ThreadLocalRandom.current().nextDouble() + * (EPIC_PROB_UPPER_BOUND - EPIC_PROB_LOWER_BOUND) + + EPIC_PROB_LOWER_BOUND; + // Payout/buy_in ratio ranges from EPIC_PAYOUT_LOWER_BOUND - + // EPIC_PAYOUT_UPPER_BOUND + ratio = + ThreadLocalRandom.current().nextDouble() + * (EPIC_PAYOUT_UPPER_BOUND - EPIC_PAYOUT_LOWER_BOUND) + + EPIC_PAYOUT_LOWER_BOUND; + break; + case Legendary: + // Probability of event hitting ranges from LEGENDARY_PROB_LOWER_BOUND - + // LEGENDARY_PROB_UPPER_BOUND + eventProb = + ThreadLocalRandom.current().nextDouble() + * (LEGENDARY_PROB_UPPER_BOUND - LEGENDARY_PROB_LOWER_BOUND) + + LEGENDARY_PROB_LOWER_BOUND; + // Payout/buy_in ratio ranges from LEGENDARY_PAYOUT_LOWER_BOUND - + // LEGENDARY_PAYOUT_UPPER_BOUND + ratio = + ThreadLocalRandom.current().nextDouble() + * (LEGENDARY_PAYOUT_UPPER_BOUND - LEGENDARY_PAYOUT_LOWER_BOUND) + + LEGENDARY_PAYOUT_LOWER_BOUND; + break; + default: + break; + } - Integer eventThreshold = normalizeEventThreshold(player, event, eventProb); + Integer eventThreshold = normalizeEventThreshold(player, event, eventProb); - // Generate the basketball-specific contract - return new Contract( - player, - user, - buyPrice, - rarity, - opposingTeam, - "src/main/resources/static/images/teams/" + opposingTeam + ".png", - event, - eventThreshold, - LocalDate.now(), - buyPrice * ratio, - null, - false, - null - ); - } + // Generate the basketball-specific contract + return new Contract( + player, + user, + buyPrice, + rarity, + opposingTeam, + "src/main/resources/static/images/teams/" + opposingTeam + ".png", + event, + eventThreshold, + LocalDate.now(), + buyPrice * ratio, + null, + false, + null); + } } diff --git a/src/main/java/com/appdev/allin/contract/Contract.java b/src/main/java/com/appdev/allin/contract/Contract.java index 7fdcc78..72162bc 100644 --- a/src/main/java/com/appdev/allin/contract/Contract.java +++ b/src/main/java/com/appdev/allin/contract/Contract.java @@ -4,7 +4,6 @@ import com.appdev.allin.transaction.Transaction; import com.appdev.allin.user.User; import com.fasterxml.jackson.annotation.JsonIgnore; - import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; @@ -14,260 +13,258 @@ import jakarta.persistence.ManyToOne; import jakarta.persistence.OneToMany; import jakarta.persistence.Table; - -import org.hibernate.annotations.OnDelete; -import org.hibernate.annotations.OnDeleteAction; - import java.time.LocalDate; import java.util.LinkedList; import java.util.List; +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; @Entity @Table(name = "contracts") public class Contract { - @Id - @GeneratedValue(strategy = jakarta.persistence.GenerationType.AUTO) - private Integer id; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "player_id") - @OnDelete(action = OnDeleteAction.CASCADE) - private Player player; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "owner_id") - @OnDelete(action = OnDeleteAction.CASCADE) - private User owner; - - @Column(name = "buyPrice", nullable = false) - private Double buyPrice; - - @Column(name = "rarity", nullable = false) - private Rarity rarity; - - @Column(name = "opposingTeam", nullable = false) - private OpposingTeam opposingTeam; - - @Column(name = "opposingTeamImage", nullable = false) - private String opposingTeamImage = "src/main/resources/static/images/teams/default.jpg"; - - @Column(name = "event", nullable = false) - private Event event; - - @Column(name = "eventThreshold", nullable = false) - private Integer eventThreshold; - - @Column(name = "creationTime", nullable = false) - private LocalDate creationTime = LocalDate.now(); - - @Column(name = "value", nullable = false) - private Double value; - - @Column(name = "expired") - private Boolean expired; - - @Column(name = "forSale", nullable = false) - private Boolean forSale = false; - - @Column(name = "sellPrice") - private Double sellPrice; - - @OneToMany(mappedBy = "contract", fetch = FetchType.EAGER) - private List transactions = new LinkedList<>(); - - public Contract() {} - - public Contract( - Player player, - User owner, - Double buyPrice, - Rarity rarity, - OpposingTeam opposingTeam, - String opposingTeamImage, - Event event, - Integer eventThreshold, - LocalDate creationTime, - Double value, - Boolean expired, - Boolean forSale, - Double sellPrice) { - this.player = player; - this.owner = owner; - this.buyPrice = buyPrice; - this.rarity = rarity; - this.opposingTeam = opposingTeam; - this.opposingTeamImage = opposingTeamImage; - this.event = event; - this.eventThreshold = eventThreshold; - this.creationTime = creationTime; - this.value = value; - this.expired = expired; - this.forSale = forSale; - this.sellPrice = sellPrice; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - @JsonIgnore - public Player getPlayer() { - return player; - } - - public Integer getPlayerId() { - if (player == null) { - return null; - } - return player.getId(); - } - - @JsonIgnore - public void setPlayer(Player player) { - this.player = player; - } - - @JsonIgnore - public User getOwner() { - return owner; - } - - public Integer getOwnerId() { - if (owner == null) { - return null; - } - return owner.getId(); - } - - @JsonIgnore - public void setOwner(User owner) { - this.owner = owner; - } - - public Double getBuyPrice() { - return buyPrice; - } - - public void setBuyPrice(Double buyPrice) { - this.buyPrice = buyPrice; - } - - public Rarity getRarity() { - return rarity; - } - - public void setRarity(Rarity rarity) { - this.rarity = rarity; - } - - public OpposingTeam getOpposingTeam() { - return opposingTeam; - } - - public void setOpposingTeam(OpposingTeam opposingTeam) { - this.opposingTeam = opposingTeam; - } - - @JsonIgnore - public String getOpposingTeamImage() { - return opposingTeamImage; - } - - @JsonIgnore - public void setOpposingTeamImage(String opposingTeamImage) { - this.opposingTeamImage = opposingTeamImage; - } - - public Event getEvent() { - return event; - } - - public void setEvent(Event event) { - this.event = event; - } - - public Integer getEventThreshold() { - return eventThreshold; - } - - public void setEventThreshold(Integer eventThreshold) { - this.eventThreshold = eventThreshold; - } - - public LocalDate getCreationTime() { - return creationTime; - } - - public void setCreationTime(LocalDate creationTime) { - this.creationTime = creationTime; - } - - public Double getValue() { - return value; - } - - public void setValue(Double value) { - this.value = value; - } - - public Boolean getExpired() { - return expired; - } - - public void setExpired(Boolean expired) { - this.expired = expired; - } - - public Boolean getForSale() { - return forSale; - } - - public void setForSale(Boolean forSale) { - this.forSale = forSale; - } - - public Double getSellPrice() { - return sellPrice; - } - - public void setSellPrice(Double sellPrice) { - this.sellPrice = sellPrice; - } - - @Override - public String toString() { - return "Contract [buyPrice=" - + buyPrice - + ", creationTime=" - + creationTime - + ", event=" - + event - + ", eventThreshold=" - + eventThreshold - + ", expired=" - + expired - + ", forSale=" - + forSale - + ", id=" - + id - + ", opposingTeam=" - + opposingTeam - + ", opposingTeamImage=" - + opposingTeamImage - + ", owner=" - + owner - + ", player=" - + player - + ", rarity=" - + rarity - + ", sellPrice=" - + sellPrice - + ", value=" - + value - + "]"; - } + @Id + @GeneratedValue(strategy = jakarta.persistence.GenerationType.AUTO) + private Integer id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "player_id") + @OnDelete(action = OnDeleteAction.CASCADE) + private Player player; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "owner_id") + @OnDelete(action = OnDeleteAction.CASCADE) + private User owner; + + @Column(name = "buyPrice", nullable = false) + private Double buyPrice; + + @Column(name = "rarity", nullable = false) + private Rarity rarity; + + @Column(name = "opposingTeam", nullable = false) + private OpposingTeam opposingTeam; + + @Column(name = "opposingTeamImage", nullable = false) + private String opposingTeamImage = "src/main/resources/static/images/teams/default.jpg"; + + @Column(name = "event", nullable = false) + private Event event; + + @Column(name = "eventThreshold", nullable = false) + private Integer eventThreshold; + + @Column(name = "creationTime", nullable = false) + private LocalDate creationTime = LocalDate.now(); + + @Column(name = "value", nullable = false) + private Double value; + + @Column(name = "expired") + private Boolean expired; + + @Column(name = "forSale", nullable = false) + private Boolean forSale = false; + + @Column(name = "sellPrice") + private Double sellPrice; + + @OneToMany(mappedBy = "contract", fetch = FetchType.EAGER) + private List transactions = new LinkedList<>(); + + public Contract() {} + + public Contract( + Player player, + User owner, + Double buyPrice, + Rarity rarity, + OpposingTeam opposingTeam, + String opposingTeamImage, + Event event, + Integer eventThreshold, + LocalDate creationTime, + Double value, + Boolean expired, + Boolean forSale, + Double sellPrice) { + this.player = player; + this.owner = owner; + this.buyPrice = buyPrice; + this.rarity = rarity; + this.opposingTeam = opposingTeam; + this.opposingTeamImage = opposingTeamImage; + this.event = event; + this.eventThreshold = eventThreshold; + this.creationTime = creationTime; + this.value = value; + this.expired = expired; + this.forSale = forSale; + this.sellPrice = sellPrice; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + @JsonIgnore + public Player getPlayer() { + return player; + } + + public Integer getPlayerId() { + if (player == null) { + return null; + } + return player.getId(); + } + + @JsonIgnore + public void setPlayer(Player player) { + this.player = player; + } + + @JsonIgnore + public User getOwner() { + return owner; + } + + public Integer getOwnerId() { + if (owner == null) { + return null; + } + return owner.getId(); + } + + @JsonIgnore + public void setOwner(User owner) { + this.owner = owner; + } + + public Double getBuyPrice() { + return buyPrice; + } + + public void setBuyPrice(Double buyPrice) { + this.buyPrice = buyPrice; + } + + public Rarity getRarity() { + return rarity; + } + + public void setRarity(Rarity rarity) { + this.rarity = rarity; + } + + public OpposingTeam getOpposingTeam() { + return opposingTeam; + } + + public void setOpposingTeam(OpposingTeam opposingTeam) { + this.opposingTeam = opposingTeam; + } + + @JsonIgnore + public String getOpposingTeamImage() { + return opposingTeamImage; + } + + @JsonIgnore + public void setOpposingTeamImage(String opposingTeamImage) { + this.opposingTeamImage = opposingTeamImage; + } + + public Event getEvent() { + return event; + } + + public void setEvent(Event event) { + this.event = event; + } + + public Integer getEventThreshold() { + return eventThreshold; + } + + public void setEventThreshold(Integer eventThreshold) { + this.eventThreshold = eventThreshold; + } + + public LocalDate getCreationTime() { + return creationTime; + } + + public void setCreationTime(LocalDate creationTime) { + this.creationTime = creationTime; + } + + public Double getValue() { + return value; + } + + public void setValue(Double value) { + this.value = value; + } + + public Boolean getExpired() { + return expired; + } + + public void setExpired(Boolean expired) { + this.expired = expired; + } + + public Boolean getForSale() { + return forSale; + } + + public void setForSale(Boolean forSale) { + this.forSale = forSale; + } + + public Double getSellPrice() { + return sellPrice; + } + + public void setSellPrice(Double sellPrice) { + this.sellPrice = sellPrice; + } + + @Override + public String toString() { + return "Contract [buyPrice=" + + buyPrice + + ", creationTime=" + + creationTime + + ", event=" + + event + + ", eventThreshold=" + + eventThreshold + + ", expired=" + + expired + + ", forSale=" + + forSale + + ", id=" + + id + + ", opposingTeam=" + + opposingTeam + + ", opposingTeamImage=" + + opposingTeamImage + + ", owner=" + + owner + + ", player=" + + player + + ", rarity=" + + rarity + + ", sellPrice=" + + sellPrice + + ", value=" + + value + + "]"; + } } diff --git a/src/main/java/com/appdev/allin/contract/ContractController.java b/src/main/java/com/appdev/allin/contract/ContractController.java index e664876..1a9e83a 100644 --- a/src/main/java/com/appdev/allin/contract/ContractController.java +++ b/src/main/java/com/appdev/allin/contract/ContractController.java @@ -3,7 +3,8 @@ import com.appdev.allin.exceptions.NotForSaleException; import com.appdev.allin.exceptions.NotFoundException; import com.appdev.allin.exceptions.OverdrawnException; - +import java.util.List; +import java.util.Map; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -16,116 +17,111 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; -import java.util.List; -import java.util.Map; - @RestController public class ContractController { - private final ContractService contractService; + private final ContractService contractService; - public ContractController(ContractService contractService) { - this.contractService = contractService; - } + public ContractController(ContractService contractService) { + this.contractService = contractService; + } - // CRUD operations + // CRUD operations - @GetMapping("/contracts/") - public ResponseEntity> getAllContracts() { - List contracts = contractService.getAllContracts(); - return ResponseEntity.ok(contracts); - } + @GetMapping("/contracts/") + public ResponseEntity> getAllContracts() { + List contracts = contractService.getAllContracts(); + return ResponseEntity.ok(contracts); + } - @GetMapping("/contracts/{contract_id}/") - public ResponseEntity getContractById(@PathVariable final Integer contract_id) { - try { - Contract contract = contractService.getContractById(contract_id); - return ResponseEntity.ok(contract); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + @GetMapping("/contracts/{contract_id}/") + public ResponseEntity getContractById(@PathVariable final Integer contract_id) { + try { + Contract contract = contractService.getContractById(contract_id); + return ResponseEntity.ok(contract); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } - - @PatchMapping("/contracts/{contract_id}/") - public ResponseEntity updateContract( - @PathVariable final Integer contract_id, @RequestBody final Contract contract) { - try { - Contract updatedContract = contractService.updateContract(contract_id, contract); - return ResponseEntity.ok(updatedContract); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + } + + @PatchMapping("/contracts/{contract_id}/") + public ResponseEntity updateContract( + @PathVariable final Integer contract_id, @RequestBody final Contract contract) { + try { + Contract updatedContract = contractService.updateContract(contract_id, contract); + return ResponseEntity.ok(updatedContract); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } - - @DeleteMapping("/contracts/{contract_id}/") - public ResponseEntity deleteContract(@PathVariable final Integer contract_id) { - try { - Contract deletedContract = contractService.deleteContract(contract_id); - return ResponseEntity.ok(deletedContract); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } - } - - @GetMapping("/contracts/{contract_id}/image/") - public ResponseEntity getContractImageById(@PathVariable final Integer contract_id) { - try { - Contract contract = contractService.getContractById(contract_id); - String currentDirectory = contract.getOpposingTeamImage(); - String imageName = currentDirectory.substring(currentDirectory.lastIndexOf("/") + 1); - currentDirectory = currentDirectory.replace(imageName, ""); - byte[] image = contractService.getContractImageById(currentDirectory, imageName); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.IMAGE_JPEG); - return new ResponseEntity<>(image, headers, HttpStatus.OK); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + } + + @DeleteMapping("/contracts/{contract_id}/") + public ResponseEntity deleteContract(@PathVariable final Integer contract_id) { + try { + Contract deletedContract = contractService.deleteContract(contract_id); + return ResponseEntity.ok(deletedContract); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } - - // Market operations - - @GetMapping("/market/") - public ResponseEntity> getMarketContracts() { - List marketContracts = contractService.getMarketContracts(); - return ResponseEntity.ok(marketContracts); + } + + @GetMapping("/contracts/{contract_id}/image/") + public ResponseEntity getContractImageById(@PathVariable final Integer contract_id) { + try { + Contract contract = contractService.getContractById(contract_id); + String currentDirectory = contract.getOpposingTeamImage(); + String imageName = currentDirectory.substring(currentDirectory.lastIndexOf('/') + 1); + currentDirectory = currentDirectory.replace(imageName, ""); + byte[] image = contractService.getContractImageById(currentDirectory, imageName); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.IMAGE_JPEG); + return new ResponseEntity<>(image, headers, HttpStatus.OK); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } - - @GetMapping("/contracts/{contract_id}/recall/") - public ResponseEntity recallContract(@PathVariable final Integer contract_id) { - try { - Contract recalledContract = contractService.recallContract(contract_id); - return ResponseEntity.ok(recalledContract); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + } + + // Market operations + + @GetMapping("/market/") + public ResponseEntity> getMarketContracts() { + List marketContracts = contractService.getMarketContracts(); + return ResponseEntity.ok(marketContracts); + } + + @GetMapping("/contracts/{contract_id}/recall/") + public ResponseEntity recallContract(@PathVariable final Integer contract_id) { + try { + Contract recalledContract = contractService.recallContract(contract_id); + return ResponseEntity.ok(recalledContract); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } - - @PostMapping("/contracts/{contract_id}/buy/") - public ResponseEntity buyContract( - @PathVariable final Integer contract_id, @RequestBody final Map body) { - try { - Contract boughtContract = - contractService.buyContract(contract_id, body.get("buyer_id")); - return ResponseEntity.ok(boughtContract); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } catch (OverdrawnException e) { - return ResponseEntity.status(402).build(); - } catch (NotForSaleException e) { - return ResponseEntity.status(403).build(); - } + } + + @PostMapping("/contracts/{contract_id}/buy/") + public ResponseEntity buyContract( + @PathVariable final Integer contract_id, @RequestBody final Map body) { + try { + Contract boughtContract = contractService.buyContract(contract_id, body.get("buyer_id")); + return ResponseEntity.ok(boughtContract); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); + } catch (OverdrawnException e) { + return ResponseEntity.status(402).build(); + } catch (NotForSaleException e) { + return ResponseEntity.status(403).build(); } - - @PostMapping("/contracts/{contract_id}/sell/") - public ResponseEntity sellContract( - @PathVariable final Integer contract_id, @RequestBody final Map body) { - try { - Contract soldContract = - contractService.sellContract(contract_id, body.get("sell_price")); - return ResponseEntity.ok(soldContract); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + } + + @PostMapping("/contracts/{contract_id}/sell/") + public ResponseEntity sellContract( + @PathVariable final Integer contract_id, @RequestBody final Map body) { + try { + Contract soldContract = contractService.sellContract(contract_id, body.get("sell_price")); + return ResponseEntity.ok(soldContract); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } + } } diff --git a/src/main/java/com/appdev/allin/contract/ContractGenerator.java b/src/main/java/com/appdev/allin/contract/ContractGenerator.java index 51fecea..92f31d6 100644 --- a/src/main/java/com/appdev/allin/contract/ContractGenerator.java +++ b/src/main/java/com/appdev/allin/contract/ContractGenerator.java @@ -1,137 +1,136 @@ package com.appdev.allin.contract; -import java.util.List; - -import org.apache.commons.math3.distribution.NormalDistribution; - import com.appdev.allin.player.Player; import com.appdev.allin.playerData.PlayerData; import com.appdev.allin.playerData.PlayerDataRepo; import com.appdev.allin.user.User; +import java.util.List; +import org.apache.commons.math3.distribution.NormalDistribution; public abstract class ContractGenerator { - PlayerDataRepo playerDataRepo; - - public ContractGenerator(PlayerDataRepo playerDataRepo) { - this.playerDataRepo = playerDataRepo; + PlayerDataRepo playerDataRepo; + + public ContractGenerator(PlayerDataRepo playerDataRepo) { + this.playerDataRepo = playerDataRepo; + } + + public static final Double COMMON_PROBABILITY_THRESHOLD = 0.7; + public static final Double RARE_PROBABILITY_THRESHOLD = 0.55; + public static final Double EPIC_PROBABILITY_THRESHOLD = 0.4; + public static final Double LEGENDARY_PROBABILITY_THRESHOLD = 0.25; + public static final Double PROB_RANGE_OVERLAP = 0.05; + + public static final Double ALPHA = 1.0; + + public static Double COMMON_PROB_UPPER_BOUND; + public static Double RARE_PROB_UPPER_BOUND; + public static Double EPIC_PROB_UPPER_BOUND; + public static Double LEGENDARY_PROB_UPPER_BOUND; + public static Double COMMON_PROB_LOWER_BOUND; + public static Double RARE_PROB_LOWER_BOUND; + public static Double EPIC_PROB_LOWER_BOUND; + public static Double LEGENDARY_PROB_LOWER_BOUND; + + public static Double COMMON_PAYOUT_UPPER_BOUND; + public static Double RARE_PAYOUT_UPPER_BOUND; + public static Double EPIC_PAYOUT_UPPER_BOUND; + public static Double LEGENDARY_PAYOUT_UPPER_BOUND; + public static Double COMMON_PAYOUT_LOWER_BOUND; + public static Double RARE_PAYOUT_LOWER_BOUND; + public static Double EPIC_PAYOUT_LOWER_BOUND; + public static Double LEGENDARY_PAYOUT_LOWER_BOUND; + + public static void generateBounds() { + double common_payout_center = 1 / COMMON_PROBABILITY_THRESHOLD; + double rare_payout_center = 1 / RARE_PROBABILITY_THRESHOLD; + double epic_payout_center = 1 / EPIC_PROBABILITY_THRESHOLD; + double legendary_payout_center = 1 / LEGENDARY_PROBABILITY_THRESHOLD; + + double common_prob_radius = + (COMMON_PROBABILITY_THRESHOLD - RARE_PROBABILITY_THRESHOLD) / 2.0 + + PROB_RANGE_OVERLAP / 2.0; + double rare_prob_radius = + Math.min( + (RARE_PROBABILITY_THRESHOLD - EPIC_PROBABILITY_THRESHOLD) / 2.0 + + PROB_RANGE_OVERLAP / 2.0, + (COMMON_PROBABILITY_THRESHOLD - RARE_PROBABILITY_THRESHOLD) / 2.0 + + PROB_RANGE_OVERLAP / 2.0); + double epic_prob_radius = + Math.min( + (EPIC_PROBABILITY_THRESHOLD - LEGENDARY_PROBABILITY_THRESHOLD) / 2.0 + + PROB_RANGE_OVERLAP / 2.0, + (RARE_PROBABILITY_THRESHOLD - EPIC_PROBABILITY_THRESHOLD) / 2.0 + + PROB_RANGE_OVERLAP / 2.0); + double legendary_prob_radius = + (EPIC_PROBABILITY_THRESHOLD - LEGENDARY_PROBABILITY_THRESHOLD) / 2.0 + + PROB_RANGE_OVERLAP / 2.0; + + COMMON_PROB_UPPER_BOUND = COMMON_PROBABILITY_THRESHOLD + common_prob_radius; + RARE_PROB_UPPER_BOUND = RARE_PROBABILITY_THRESHOLD + rare_prob_radius; + EPIC_PROB_UPPER_BOUND = EPIC_PROBABILITY_THRESHOLD + epic_prob_radius; + LEGENDARY_PROB_UPPER_BOUND = LEGENDARY_PROBABILITY_THRESHOLD + legendary_prob_radius; + COMMON_PROB_LOWER_BOUND = COMMON_PROBABILITY_THRESHOLD - common_prob_radius; + RARE_PROB_LOWER_BOUND = RARE_PROBABILITY_THRESHOLD - rare_prob_radius; + EPIC_PROB_LOWER_BOUND = EPIC_PROBABILITY_THRESHOLD - epic_prob_radius; + LEGENDARY_PROB_LOWER_BOUND = LEGENDARY_PROBABILITY_THRESHOLD - legendary_prob_radius; + + double common_payout_radius = + Math.min( + (common_payout_center - 1.0 / (COMMON_PROB_UPPER_BOUND)), + (common_payout_center - 1.0 / (COMMON_PROB_LOWER_BOUND))); + double rare_payout_radius = + Math.min( + (rare_payout_center - 1.0 / (RARE_PROB_UPPER_BOUND)), + (rare_payout_center - 1.0 / (RARE_PROB_LOWER_BOUND))); + double epic_payout_radius = + Math.min( + (epic_payout_center - 1.0 / (EPIC_PROB_UPPER_BOUND)), + (epic_payout_center - 1.0 / (EPIC_PROB_LOWER_BOUND))); + double legendary_payout_radius = + Math.min( + (legendary_payout_center - 1.0 / (LEGENDARY_PROB_UPPER_BOUND)), + (legendary_payout_center - 1.0 / (LEGENDARY_PROB_LOWER_BOUND))); + + COMMON_PAYOUT_UPPER_BOUND = common_payout_center + common_payout_radius; + RARE_PAYOUT_UPPER_BOUND = rare_payout_center + rare_payout_radius; + EPIC_PAYOUT_UPPER_BOUND = epic_payout_center + epic_payout_radius; + LEGENDARY_PAYOUT_UPPER_BOUND = legendary_payout_center + legendary_payout_radius; + COMMON_PAYOUT_LOWER_BOUND = common_payout_center - common_payout_radius; + RARE_PAYOUT_LOWER_BOUND = rare_payout_center - rare_payout_radius; + EPIC_PAYOUT_LOWER_BOUND = epic_payout_center - epic_payout_radius; + LEGENDARY_PAYOUT_LOWER_BOUND = legendary_payout_center - legendary_payout_radius; + } + + public abstract Contract generateContract( + User user, Player player, Double buyPrice, Rarity rarity); + + public Double[] getPlayerDataByEvent(Player player, Event event) { + List playerData = playerDataRepo.findByPlayer(player); + Integer N = playerData.size(); + Double eventTotal = 0.0; + for (PlayerData data : playerData) { + eventTotal += data.getEvent(event); } - - public static final Double COMMON_PROBABILITY_THRESHOLD = 0.7; - public static final Double RARE_PROBABILITY_THRESHOLD = 0.55; - public static final Double EPIC_PROBABILITY_THRESHOLD = 0.4; - public static final Double LEGENDARY_PROBABILITY_THRESHOLD = 0.25; - public static final Double PROB_RANGE_OVERLAP = 0.05; - - public static final Double ALPHA = 1.0; - - public static Double COMMON_PROB_UPPER_BOUND; - public static Double RARE_PROB_UPPER_BOUND; - public static Double EPIC_PROB_UPPER_BOUND; - public static Double LEGENDARY_PROB_UPPER_BOUND; - public static Double COMMON_PROB_LOWER_BOUND; - public static Double RARE_PROB_LOWER_BOUND; - public static Double EPIC_PROB_LOWER_BOUND; - public static Double LEGENDARY_PROB_LOWER_BOUND; - - public static Double COMMON_PAYOUT_UPPER_BOUND; - public static Double RARE_PAYOUT_UPPER_BOUND; - public static Double EPIC_PAYOUT_UPPER_BOUND; - public static Double LEGENDARY_PAYOUT_UPPER_BOUND; - public static Double COMMON_PAYOUT_LOWER_BOUND; - public static Double RARE_PAYOUT_LOWER_BOUND; - public static Double EPIC_PAYOUT_LOWER_BOUND; - public static Double LEGENDARY_PAYOUT_LOWER_BOUND; - - public static void generateBounds() { - double common_payout_center = 1 / COMMON_PROBABILITY_THRESHOLD; - double rare_payout_center = 1 / RARE_PROBABILITY_THRESHOLD; - double epic_payout_center = 1 / EPIC_PROBABILITY_THRESHOLD; - double legendary_payout_center = 1 / LEGENDARY_PROBABILITY_THRESHOLD; - - double common_prob_radius = - (COMMON_PROBABILITY_THRESHOLD - RARE_PROBABILITY_THRESHOLD) / 2.0 - + PROB_RANGE_OVERLAP / 2.0; - double rare_prob_radius = - Math.min( - (RARE_PROBABILITY_THRESHOLD - EPIC_PROBABILITY_THRESHOLD) / 2.0 - + PROB_RANGE_OVERLAP / 2.0, - (COMMON_PROBABILITY_THRESHOLD - RARE_PROBABILITY_THRESHOLD) / 2.0 - + PROB_RANGE_OVERLAP / 2.0); - double epic_prob_radius = - Math.min( - (EPIC_PROBABILITY_THRESHOLD - LEGENDARY_PROBABILITY_THRESHOLD) / 2.0 - + PROB_RANGE_OVERLAP / 2.0, - (RARE_PROBABILITY_THRESHOLD - EPIC_PROBABILITY_THRESHOLD) / 2.0 - + PROB_RANGE_OVERLAP / 2.0); - double legendary_prob_radius = - (EPIC_PROBABILITY_THRESHOLD - LEGENDARY_PROBABILITY_THRESHOLD) / 2.0 - + PROB_RANGE_OVERLAP / 2.0; - - COMMON_PROB_UPPER_BOUND = COMMON_PROBABILITY_THRESHOLD + common_prob_radius; - RARE_PROB_UPPER_BOUND = RARE_PROBABILITY_THRESHOLD + rare_prob_radius; - EPIC_PROB_UPPER_BOUND = EPIC_PROBABILITY_THRESHOLD + epic_prob_radius; - LEGENDARY_PROB_UPPER_BOUND = LEGENDARY_PROBABILITY_THRESHOLD + legendary_prob_radius; - COMMON_PROB_LOWER_BOUND = COMMON_PROBABILITY_THRESHOLD - common_prob_radius; - RARE_PROB_LOWER_BOUND = RARE_PROBABILITY_THRESHOLD - rare_prob_radius; - EPIC_PROB_LOWER_BOUND = EPIC_PROBABILITY_THRESHOLD - epic_prob_radius; - LEGENDARY_PROB_LOWER_BOUND = LEGENDARY_PROBABILITY_THRESHOLD - legendary_prob_radius; - - double common_payout_radius = - Math.min( - (common_payout_center - 1.0 / (COMMON_PROB_UPPER_BOUND)), - (common_payout_center - 1.0 / (COMMON_PROB_LOWER_BOUND))); - double rare_payout_radius = - Math.min( - (rare_payout_center - 1.0 / (RARE_PROB_UPPER_BOUND)), - (rare_payout_center - 1.0 / (RARE_PROB_LOWER_BOUND))); - double epic_payout_radius = - Math.min( - (epic_payout_center - 1.0 / (EPIC_PROB_UPPER_BOUND)), - (epic_payout_center - 1.0 / (EPIC_PROB_LOWER_BOUND))); - double legendary_payout_radius = - Math.min( - (legendary_payout_center - 1.0 / (LEGENDARY_PROB_UPPER_BOUND)), - (legendary_payout_center - 1.0 / (LEGENDARY_PROB_LOWER_BOUND))); - - COMMON_PAYOUT_UPPER_BOUND = common_payout_center + common_payout_radius; - RARE_PAYOUT_UPPER_BOUND = rare_payout_center + rare_payout_radius; - EPIC_PAYOUT_UPPER_BOUND = epic_payout_center + epic_payout_radius; - LEGENDARY_PAYOUT_UPPER_BOUND = legendary_payout_center + legendary_payout_radius; - COMMON_PAYOUT_LOWER_BOUND = common_payout_center - common_payout_radius; - RARE_PAYOUT_LOWER_BOUND = rare_payout_center - rare_payout_radius; - EPIC_PAYOUT_LOWER_BOUND = epic_payout_center - epic_payout_radius; - LEGENDARY_PAYOUT_LOWER_BOUND = legendary_payout_center - legendary_payout_radius; + Double eventAvg = eventTotal / N; + Double eventSD = 0.0; + for (PlayerData data : playerData) { + eventSD += Math.pow(data.getEvent(event) - eventAvg, 2); } - - public abstract Contract generateContract(User user, Player player, Double buyPrice, Rarity rarity); - - public Double[] getPlayerDataByEvent(Player player, Event event) { - List playerData = playerDataRepo.findByPlayer(player); - Integer N = playerData.size(); - Double eventTotal = 0.0; - for (PlayerData data : playerData) { - eventTotal += data.getEvent(event); - } - Double eventAvg = eventTotal / N; - Double eventSD = 0.0; - for (PlayerData data : playerData) { - eventSD += Math.pow(data.getEvent(event) - eventAvg, 2); - } - eventSD = Math.sqrt(eventSD / N); - if (eventSD == 0.0) { - eventSD = 1.0; - } - return new Double[] {eventAvg, eventSD}; - } - - public Integer normalizeEventThreshold(Player player, Event event, Double eventProb) { - // Normalize the event threshold based on player averages - Double[] eventMetrics = getPlayerDataByEvent(player, event); - Double eventAvg = eventMetrics[0]; - Double eventSD = eventMetrics[1]; - NormalDistribution X = new NormalDistribution(eventAvg, eventSD); - Integer threshold = (int) Math.ceil(X.inverseCumulativeProbability(1 - eventProb)); - return threshold; + eventSD = Math.sqrt(eventSD / N); + if (eventSD == 0.0) { + eventSD = 1.0; } -} \ No newline at end of file + return new Double[] {eventAvg, eventSD}; + } + + public Integer normalizeEventThreshold(Player player, Event event, Double eventProb) { + // Normalize the event threshold based on player averages + Double[] eventMetrics = getPlayerDataByEvent(player, event); + Double eventAvg = eventMetrics[0]; + Double eventSD = eventMetrics[1]; + NormalDistribution X = new NormalDistribution(eventAvg, eventSD); + Integer threshold = (int) Math.ceil(X.inverseCumulativeProbability(1 - eventProb)); + return threshold; + } +} diff --git a/src/main/java/com/appdev/allin/contract/ContractRepo.java b/src/main/java/com/appdev/allin/contract/ContractRepo.java index f9c4393..8e07b61 100644 --- a/src/main/java/com/appdev/allin/contract/ContractRepo.java +++ b/src/main/java/com/appdev/allin/contract/ContractRepo.java @@ -2,18 +2,16 @@ import com.appdev.allin.player.Player; import com.appdev.allin.user.User; - +import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; -import java.util.List; - @Repository public interface ContractRepo extends JpaRepository { - public List findByPlayer(Player player); + public List findByPlayer(Player player); - public List findByOwner(User owner); + public List findByOwner(User owner); - public List findByForSale(Boolean forSale); + public List findByForSale(Boolean forSale); } diff --git a/src/main/java/com/appdev/allin/contract/ContractService.java b/src/main/java/com/appdev/allin/contract/ContractService.java index bc392f9..3f402a0 100644 --- a/src/main/java/com/appdev/allin/contract/ContractService.java +++ b/src/main/java/com/appdev/allin/contract/ContractService.java @@ -10,211 +10,205 @@ import com.appdev.allin.transaction.TransactionRepo; import com.appdev.allin.user.User; import com.appdev.allin.user.UserRepo; - -import org.springframework.stereotype.Service; - import java.nio.file.Files; import java.nio.file.Path; import java.time.LocalDate; import java.util.List; import java.util.Optional; +import org.springframework.stereotype.Service; @Service public class ContractService { - private final ContractRepo contractRepo; - private final UserRepo userRepo; - private final TransactionRepo transactionRepo; - private final PlayerRepo playerRepo; - private final PlayerDataRepo playerDataRepo; - - public final String imagePath = "src/main/resources/static/images/teams/"; - - // public final String imagePath = - // "root/all-in-backend/src/main/resources/static/images/teams/"; - - public ContractService( - ContractRepo contractRepo, - UserRepo userRepo, - TransactionRepo transactionRepo, - PlayerRepo playerRepo, - PlayerDataRepo playerDataRepo) { - this.contractRepo = contractRepo; - this.userRepo = userRepo; - this.transactionRepo = transactionRepo; - this.playerRepo = playerRepo; - this.playerDataRepo = playerDataRepo; + private final ContractRepo contractRepo; + private final UserRepo userRepo; + private final TransactionRepo transactionRepo; + private final PlayerRepo playerRepo; + private final PlayerDataRepo playerDataRepo; + + public final String imagePath = "src/main/resources/static/images/teams/"; + + // public final String imagePath = + // "root/all-in-backend/src/main/resources/static/images/teams/"; + + public ContractService( + ContractRepo contractRepo, + UserRepo userRepo, + TransactionRepo transactionRepo, + PlayerRepo playerRepo, + PlayerDataRepo playerDataRepo) { + this.contractRepo = contractRepo; + this.userRepo = userRepo; + this.transactionRepo = transactionRepo; + this.playerRepo = playerRepo; + this.playerDataRepo = playerDataRepo; + } + + public List getAllContracts() { + return contractRepo.findAll(); + } + + public Contract getContractById(final Integer contract_id) throws NotFoundException { + Optional contractOptional = contractRepo.findById(contract_id); + if (contractOptional.isEmpty()) { + throw new NotFoundException("Contract with id " + contract_id + " not found."); } + return contractOptional.get(); + } - public List getAllContracts() { - return contractRepo.findAll(); + public List getContractsByPlayerId(final Integer player_id) throws NotFoundException { + Optional playerOptional = playerRepo.findById(player_id); + if (playerOptional.isEmpty()) { + throw new NotFoundException("Player with id " + player_id + " not found."); } - - public Contract getContractById(final Integer contract_id) throws NotFoundException { - Optional contractOptional = contractRepo.findById(contract_id); - if (contractOptional.isEmpty()) { - throw new NotFoundException("Contract with id " + contract_id + " not found."); - } - return contractOptional.get(); + Player player = playerOptional.get(); + return contractRepo.findByPlayer(player); + } + + public List getContractsByUserId(final Integer user_id) throws NotFoundException { + Optional userOptional = userRepo.findById(user_id); + if (userOptional.isEmpty()) { + throw new NotFoundException("User with id " + user_id + " not found."); } - - public List getContractsByPlayerId(final Integer player_id) throws NotFoundException { - Optional playerOptional = playerRepo.findById(player_id); - if (playerOptional.isEmpty()) { - throw new NotFoundException("Player with id " + player_id + " not found."); - } - Player player = playerOptional.get(); - return contractRepo.findByPlayer(player); + User user = userOptional.get(); + return contractRepo.findByOwner(user); + } + + public Contract createContract( + final Integer user_id, final Integer player_id, final Double buyPrice, final Rarity rarity) + throws NotFoundException, OverdrawnException { + Optional userOptional = userRepo.findById(user_id); + Optional playerOptional = playerRepo.findById(player_id); + if (userOptional.isEmpty() || playerOptional.isEmpty()) { + throw new NotFoundException("User or player not found."); } + User user = userOptional.get(); + Player player = playerOptional.get(); - public List getContractsByUserId(final Integer user_id) throws NotFoundException { - Optional userOptional = userRepo.findById(user_id); - if (userOptional.isEmpty()) { - throw new NotFoundException("User with id " + user_id + " not found."); - } - User user = userOptional.get(); - return contractRepo.findByOwner(user); + if (buyPrice > user.getBalance()) { + throw new OverdrawnException("User balance is too low."); } - public Contract createContract( - final Integer user_id, - final Integer player_id, - final Double buyPrice, - final Rarity rarity) - throws NotFoundException, OverdrawnException { - Optional userOptional = userRepo.findById(user_id); - Optional playerOptional = playerRepo.findById(player_id); - if (userOptional.isEmpty() || playerOptional.isEmpty()) { - throw new NotFoundException("User or player not found."); - } - User user = userOptional.get(); - Player player = playerOptional.get(); - - if (buyPrice > user.getBalance()) { - throw new OverdrawnException("User balance is too low."); - } - - ContractGenerator contractGenerator = new BasketballContractGenerator(playerDataRepo); - Contract contract = contractGenerator.generateContract(user, player, buyPrice, rarity); - contractRepo.save(contract); - - user.setBalance(user.getBalance() - contract.getBuyPrice()); - userRepo.save(user); - - Transaction transaction = - new Transaction( - null, user, contract, contract.getCreationTime(), contract.getBuyPrice()); - transactionRepo.save(transaction); - - return contract; - } + ContractGenerator contractGenerator = new BasketballContractGenerator(playerDataRepo); + Contract contract = contractGenerator.generateContract(user, player, buyPrice, rarity); + contractRepo.save(contract); - public Contract updateContract(final Integer contract_id, final Contract contract) - throws NotFoundException { - Optional contractOptional = contractRepo.findById(contract_id); - if (contractOptional.isEmpty()) { - throw new NotFoundException("Contract with id " + contract_id + " not found."); - } - Contract contractToUpdate = contractOptional.get(); - contractToUpdate.setRarity(contract.getRarity()); - contractToUpdate.setEvent(contract.getEvent()); - contractToUpdate.setEventThreshold(contract.getEventThreshold()); - contractToUpdate.setCreationTime(contract.getCreationTime()); - contractToUpdate.setValue(contract.getValue()); - contractToUpdate.setForSale(contract.getForSale()); - contractToUpdate.setSellPrice(contract.getSellPrice()); - return contractRepo.save(contractToUpdate); - } + user.setBalance(user.getBalance() - contract.getBuyPrice()); + userRepo.save(user); - public Contract deleteContract(final Integer contract_id) throws NotFoundException { - Optional contractOptional = contractRepo.findById(contract_id); - if (contractOptional.isEmpty()) { - throw new NotFoundException("Contract with id " + contract_id + " not found."); - } - contractRepo.deleteById(contract_id); - return contractOptional.get(); - } + Transaction transaction = + new Transaction(null, user, contract, contract.getCreationTime(), contract.getBuyPrice()); + transactionRepo.save(transaction); - public List getMarketContracts() { - return contractRepo.findByForSale(true); + return contract; + } + + public Contract updateContract(final Integer contract_id, final Contract contract) + throws NotFoundException { + Optional contractOptional = contractRepo.findById(contract_id); + if (contractOptional.isEmpty()) { + throw new NotFoundException("Contract with id " + contract_id + " not found."); + } + Contract contractToUpdate = contractOptional.get(); + contractToUpdate.setRarity(contract.getRarity()); + contractToUpdate.setEvent(contract.getEvent()); + contractToUpdate.setEventThreshold(contract.getEventThreshold()); + contractToUpdate.setCreationTime(contract.getCreationTime()); + contractToUpdate.setValue(contract.getValue()); + contractToUpdate.setForSale(contract.getForSale()); + contractToUpdate.setSellPrice(contract.getSellPrice()); + return contractRepo.save(contractToUpdate); + } + + public Contract deleteContract(final Integer contract_id) throws NotFoundException { + Optional contractOptional = contractRepo.findById(contract_id); + if (contractOptional.isEmpty()) { + throw new NotFoundException("Contract with id " + contract_id + " not found."); + } + contractRepo.deleteById(contract_id); + return contractOptional.get(); + } + + public List getMarketContracts() { + return contractRepo.findByForSale(true); + } + + public Contract buyContract(final Integer contract_id, final Integer buyer_id) + throws NotFoundException, OverdrawnException, NotForSaleException { + Optional contractOptional = contractRepo.findById(contract_id); + if (contractOptional.isEmpty()) { + throw new NotFoundException("Contract with id " + contract_id + " not found."); } - public Contract buyContract(final Integer contract_id, final Integer buyer_id) - throws NotFoundException, OverdrawnException, NotForSaleException { - Optional contractOptional = contractRepo.findById(contract_id); - if (contractOptional.isEmpty()) { - throw new NotFoundException("Contract with id " + contract_id + " not found."); - } + Contract contractToBuy = contractOptional.get(); - Contract contractToBuy = contractOptional.get(); + if (!contractToBuy.getForSale()) { + throw new NotForSaleException("Contract is not for sale."); + } - if (!contractToBuy.getForSale()) { - throw new NotForSaleException("Contract is not for sale."); - } + Optional sellerOptional = userRepo.findById(contractToBuy.getOwner().getId()); + Optional buyerOptional = userRepo.findById(buyer_id); + if (sellerOptional.isEmpty() || buyerOptional.isEmpty()) { + throw new NotFoundException("Seller or buyer not found."); + } - Optional sellerOptional = userRepo.findById(contractToBuy.getOwner().getId()); - Optional buyerOptional = userRepo.findById(buyer_id); - if (sellerOptional.isEmpty() || buyerOptional.isEmpty()) { - throw new NotFoundException("Seller or buyer not found."); - } + User seller = contractToBuy.getOwner(); + User buyer = buyerOptional.get(); + Double sellPrice = contractToBuy.getSellPrice(); - User seller = contractToBuy.getOwner(); - User buyer = buyerOptional.get(); - Double sellPrice = contractToBuy.getSellPrice(); + if (sellPrice > buyer.getBalance()) { + throw new OverdrawnException("Buyer balance is too low."); + } - if (sellPrice > buyer.getBalance()) { - throw new OverdrawnException("Buyer balance is too low."); - } + seller.setBalance(seller.getBalance() + sellPrice); + buyer.setBalance(buyer.getBalance() - sellPrice); - seller.setBalance(seller.getBalance() + sellPrice); - buyer.setBalance(buyer.getBalance() - sellPrice); + contractToBuy.setOwner(buyer); + contractToBuy.setForSale(false); + contractRepo.save(contractToBuy); - contractToBuy.setOwner(buyer); - contractToBuy.setForSale(false); - contractRepo.save(contractToBuy); + Transaction transaction = + new Transaction(seller, buyer, contractToBuy, LocalDate.now(), sellPrice); + transactionRepo.save(transaction); - Transaction transaction = - new Transaction(seller, buyer, contractToBuy, LocalDate.now(), sellPrice); - transactionRepo.save(transaction); + return contractToBuy; + } - return contractToBuy; + public Contract sellContract(final Integer contract_id, final Double sellPrice) + throws NotFoundException { + Optional contractOptional = contractRepo.findById(contract_id); + if (contractOptional.isEmpty()) { + throw new NotFoundException("Contract with id " + contract_id + " not found."); } - public Contract sellContract(final Integer contract_id, final Double sellPrice) - throws NotFoundException { - Optional contractOptional = contractRepo.findById(contract_id); - if (contractOptional.isEmpty()) { - throw new NotFoundException("Contract with id " + contract_id + " not found."); - } + Contract contractToSell = contractOptional.get(); + contractToSell.setForSale(true); + contractToSell.setSellPrice(sellPrice); - Contract contractToSell = contractOptional.get(); - contractToSell.setForSale(true); - contractToSell.setSellPrice(sellPrice); + return contractRepo.save(contractToSell); + } - return contractRepo.save(contractToSell); + public byte[] getContractImageById(final String uploadDirectory, final String fileName) { + Path uploadPath = Path.of(uploadDirectory); + Path filePath = uploadPath.resolve(fileName); + try { + return Files.readAllBytes(filePath); + } catch (Exception e) { + e.printStackTrace(); } + return null; + } - public byte[] getContractImageById(final String uploadDirectory, final String fileName) { - Path uploadPath = Path.of(uploadDirectory); - Path filePath = uploadPath.resolve(fileName); - try { - return Files.readAllBytes(filePath); - } catch (Exception e) { - e.printStackTrace(); - } - return null; + public Contract recallContract(final Integer contract_id) throws NotFoundException { + Optional contractOptional = contractRepo.findById(contract_id); + if (contractOptional.isEmpty()) { + throw new NotFoundException("Contract with id " + contract_id + " not found."); } - public Contract recallContract(final Integer contract_id) throws NotFoundException { - Optional contractOptional = contractRepo.findById(contract_id); - if (contractOptional.isEmpty()) { - throw new NotFoundException("Contract with id " + contract_id + " not found."); - } + Contract contractToRecall = contractOptional.get(); + contractToRecall.setForSale(false); + contractToRecall.setSellPrice(0.0); - Contract contractToRecall = contractOptional.get(); - contractToRecall.setForSale(false); - contractToRecall.setSellPrice(0.0); - - return contractRepo.save(contractToRecall); - } + return contractRepo.save(contractToRecall); + } } diff --git a/src/main/java/com/appdev/allin/contract/Event.java b/src/main/java/com/appdev/allin/contract/Event.java index 4a79a02..e7ee628 100644 --- a/src/main/java/com/appdev/allin/contract/Event.java +++ b/src/main/java/com/appdev/allin/contract/Event.java @@ -3,19 +3,19 @@ import java.util.concurrent.ThreadLocalRandom; public enum Event { - Points, - Minutes, - Field_Goals, - Three_Pointers, - Free_Throws, - Rebounds, - Assists, - Steals, - Blocks, - Turnovers, - Fouls; + Points, + Minutes, + Field_Goals, + Three_Pointers, + Free_Throws, + Rebounds, + Assists, + Steals, + Blocks, + Turnovers, + Fouls; - public static Event getRandomEvent() { - return values()[(int) (ThreadLocalRandom.current().nextDouble() * values().length)]; - } + public static Event getRandomEvent() { + return values()[(int) (ThreadLocalRandom.current().nextDouble() * values().length)]; + } } diff --git a/src/main/java/com/appdev/allin/contract/OpposingTeam.java b/src/main/java/com/appdev/allin/contract/OpposingTeam.java index a20b072..4882fdb 100644 --- a/src/main/java/com/appdev/allin/contract/OpposingTeam.java +++ b/src/main/java/com/appdev/allin/contract/OpposingTeam.java @@ -3,30 +3,30 @@ import java.util.concurrent.ThreadLocalRandom; public enum OpposingTeam { - Lehigh, - Morrisville, - Fordham, - George, - Fullerton, - Utah, - Monmouth, - Lafayette, - Syracuse, - Siena, - Robert, - Colgate, - Baylor, - Columbia, - Penn, - Brown, - Wells, - Princeton, - Dartmouth, - Harvard, - Yale, - Ohio; + Lehigh, + Morrisville, + Fordham, + George, + Fullerton, + Utah, + Monmouth, + Lafayette, + Syracuse, + Siena, + Robert, + Colgate, + Baylor, + Columbia, + Penn, + Brown, + Wells, + Princeton, + Dartmouth, + Harvard, + Yale, + Ohio; - public static OpposingTeam getRandomOpposingTeam() { - return values()[(int) (ThreadLocalRandom.current().nextDouble() * values().length)]; - } + public static OpposingTeam getRandomOpposingTeam() { + return values()[(int) (ThreadLocalRandom.current().nextDouble() * values().length)]; + } } diff --git a/src/main/java/com/appdev/allin/contract/Rarity.java b/src/main/java/com/appdev/allin/contract/Rarity.java index 92dc389..255df8b 100644 --- a/src/main/java/com/appdev/allin/contract/Rarity.java +++ b/src/main/java/com/appdev/allin/contract/Rarity.java @@ -3,21 +3,21 @@ import java.util.concurrent.ThreadLocalRandom; public enum Rarity { - Common, - Rare, - Epic, - Legendary; + Common, + Rare, + Epic, + Legendary; - public static Rarity getRandomRarity() { - double random = ThreadLocalRandom.current().nextDouble(); - if (random < 0.55) { - return Common; - } else if (random < 0.8) { - return Rare; - } else if (random < 0.95) { - return Epic; - } else { - return Legendary; - } + public static Rarity getRandomRarity() { + double random = ThreadLocalRandom.current().nextDouble(); + if (random < 0.55) { + return Common; + } else if (random < 0.8) { + return Rare; + } else if (random < 0.95) { + return Epic; + } else { + return Legendary; } + } } diff --git a/src/main/java/com/appdev/allin/exceptions/ErrorHandler.java b/src/main/java/com/appdev/allin/exceptions/ErrorHandler.java index b3adabb..75b3619 100644 --- a/src/main/java/com/appdev/allin/exceptions/ErrorHandler.java +++ b/src/main/java/com/appdev/allin/exceptions/ErrorHandler.java @@ -1,5 +1,7 @@ package com.appdev.allin.exceptions; +import java.util.HashMap; +import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; @@ -7,43 +9,40 @@ import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestControllerAdvice; -import java.util.HashMap; -import java.util.Map; - @RestControllerAdvice public class ErrorHandler { - private static final Logger logger = LoggerFactory.getLogger(ErrorHandler.class); - - public Map createErrorResponse(Exception e) { - Map response = new HashMap<>(); - response.put("error", e.getMessage()); - response.put("timestamp", String.valueOf(System.currentTimeMillis())); - logger.error("Exception occurred: {}", e.getMessage()); - return response; - } - - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(NotFoundException.class) - public Map handleNotFoundException(NotFoundException e) { - return createErrorResponse(e); - } - - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler(OverdrawnException.class) - public Map handleOverdrawnException(OverdrawnException e) { - return createErrorResponse(e); - } - - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler(NotForSaleException.class) - public Map handleNotForSaleException(NotForSaleException e) { - return createErrorResponse(e); - } - - @ResponseStatus(HttpStatus.FORBIDDEN) - @ExceptionHandler(ForbiddenException.class) - public Map handleForbiddenException(ForbiddenException e) { - return createErrorResponse(e); - } + private static final Logger logger = LoggerFactory.getLogger(ErrorHandler.class); + + public Map createErrorResponse(Exception e) { + Map response = new HashMap<>(); + response.put("error", e.getMessage()); + response.put("timestamp", String.valueOf(System.currentTimeMillis())); + logger.error("Exception occurred: {}", e.getMessage()); + return response; + } + + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler(NotFoundException.class) + public Map handleNotFoundException(NotFoundException e) { + return createErrorResponse(e); + } + + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(OverdrawnException.class) + public Map handleOverdrawnException(OverdrawnException e) { + return createErrorResponse(e); + } + + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(NotForSaleException.class) + public Map handleNotForSaleException(NotForSaleException e) { + return createErrorResponse(e); + } + + @ResponseStatus(HttpStatus.FORBIDDEN) + @ExceptionHandler(ForbiddenException.class) + public Map handleForbiddenException(ForbiddenException e) { + return createErrorResponse(e); + } } diff --git a/src/main/java/com/appdev/allin/exceptions/ForbiddenException.java b/src/main/java/com/appdev/allin/exceptions/ForbiddenException.java index 11398ac..eeac2ab 100644 --- a/src/main/java/com/appdev/allin/exceptions/ForbiddenException.java +++ b/src/main/java/com/appdev/allin/exceptions/ForbiddenException.java @@ -1,7 +1,7 @@ package com.appdev.allin.exceptions; public class ForbiddenException extends RuntimeException { - public ForbiddenException(String message) { - super(message); - } + public ForbiddenException(String message) { + super(message); + } } diff --git a/src/main/java/com/appdev/allin/exceptions/NotForSaleException.java b/src/main/java/com/appdev/allin/exceptions/NotForSaleException.java index 90f9f54..2ad5489 100644 --- a/src/main/java/com/appdev/allin/exceptions/NotForSaleException.java +++ b/src/main/java/com/appdev/allin/exceptions/NotForSaleException.java @@ -1,7 +1,7 @@ package com.appdev.allin.exceptions; public class NotForSaleException extends RuntimeException { - public NotForSaleException(String message) { - super(message); - } + public NotForSaleException(String message) { + super(message); + } } diff --git a/src/main/java/com/appdev/allin/exceptions/NotFoundException.java b/src/main/java/com/appdev/allin/exceptions/NotFoundException.java index b3a1871..3598d26 100644 --- a/src/main/java/com/appdev/allin/exceptions/NotFoundException.java +++ b/src/main/java/com/appdev/allin/exceptions/NotFoundException.java @@ -1,7 +1,7 @@ package com.appdev.allin.exceptions; public class NotFoundException extends RuntimeException { - public NotFoundException(String message) { - super(message); - } + public NotFoundException(String message) { + super(message); + } } diff --git a/src/main/java/com/appdev/allin/exceptions/OverdrawnException.java b/src/main/java/com/appdev/allin/exceptions/OverdrawnException.java index 5bab4f6..276570c 100644 --- a/src/main/java/com/appdev/allin/exceptions/OverdrawnException.java +++ b/src/main/java/com/appdev/allin/exceptions/OverdrawnException.java @@ -1,7 +1,7 @@ package com.appdev.allin.exceptions; public class OverdrawnException extends RuntimeException { - public OverdrawnException(String message) { - super(message); - } + public OverdrawnException(String message) { + super(message); + } } diff --git a/src/main/java/com/appdev/allin/player/Player.java b/src/main/java/com/appdev/allin/player/Player.java index d56a037..57d7ebf 100644 --- a/src/main/java/com/appdev/allin/player/Player.java +++ b/src/main/java/com/appdev/allin/player/Player.java @@ -3,7 +3,6 @@ import com.appdev.allin.contract.Contract; import com.appdev.allin.playerData.PlayerData; import com.fasterxml.jackson.annotation.JsonIgnore; - import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; @@ -11,228 +10,227 @@ import jakarta.persistence.Id; import jakarta.persistence.OneToMany; import jakarta.persistence.Table; - import java.util.LinkedList; import java.util.List; @Entity @Table(name = "players") public class Player { - @Id - @GeneratedValue(strategy = jakarta.persistence.GenerationType.AUTO) - private Integer id; - - @Column(name = "firstName", nullable = false) - private String firstName; - - @Column(name = "lastName", nullable = false) - private String lastName; - - @Column(name = "position", nullable = false) - private Position[] position; - - @Column(name = "number", nullable = false) - private Integer number; - - @Column(name = "height", nullable = false) - private String height; - - @Column(name = "weight", nullable = false) - private Integer weight; - - @Column(name = "hometown", nullable = false) - private String hometown; - - @Column(name = "highSchool", nullable = false) - private String highSchool; - - @Column(name = "image", nullable = false) - private String image = "src/main/resources/static/images/players/default.jpg"; - - @OneToMany(mappedBy = "player", fetch = FetchType.EAGER) - private List contracts = new LinkedList<>(); - - @OneToMany(mappedBy = "player", fetch = FetchType.EAGER) - private List playerData = new LinkedList<>(); - - public Player() {} - - public Player( - String firstName, - String lastName, - Position[] position, - Integer number, - String height, - Integer weight, - String hometown, - String highSchool) { - this.firstName = firstName; - this.lastName = lastName; - this.position = position; - this.number = number; - this.height = height; - this.weight = weight; - this.hometown = hometown; - this.highSchool = highSchool; - } - - public Player( - String firstName, - String lastName, - Position[] position, - Integer number, - String height, - Integer weight, - String hometown, - String highSchool, - String image) { - this.firstName = firstName; - this.lastName = lastName; - this.position = position; - this.number = number; - this.height = height; - this.weight = weight; - this.hometown = hometown; - this.highSchool = highSchool; - this.image = image; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public Position[] getPosition() { - return position; - } - - public void setPosition(Position[] position) { - this.position = position; - } - - public Integer getNumber() { - return number; - } - - public void setNumber(Integer number) { - this.number = number; - } - - public String getHeight() { - return height; - } - - public void setHeight(String height) { - this.height = height; - } - - public Integer getWeight() { - return weight; - } - - public void setWeight(Integer weight) { - this.weight = weight; - } - - public String getHometown() { - return hometown; - } - - public void setHometown(String hometown) { - this.hometown = hometown; - } - - public String getHighSchool() { - return highSchool; - } - - public void setHighSchool(String highSchool) { - this.highSchool = highSchool; - } - - @JsonIgnore - public String getImage() { - return image; - } - - @JsonIgnore - public void setImage(String image) { - this.image = image; - } - - public List getContracts() { - return contracts; - } - - public void addContract(Contract contract) { - contracts.add(contract); - } - - public void removeContract(Contract contract) { - contracts.remove(contract); - } - - public void setContracts(List contracts) { - this.contracts = contracts; - } - - public List getPlayerData() { - return playerData; - } - - public void addPlayerData(PlayerData playerData) { - this.playerData.add(playerData); - } - - public void removePlayerData(PlayerData playerData) { - this.playerData.remove(playerData); - } - - public void setPlayerData(List playerData) { - this.playerData = playerData; - } - - @Override - public String toString() { - return "Player [id=" - + id - + ", firstName=" - + firstName - + ", lastName=" - + lastName - + ", position=" - + position - + ", number=" - + number - + ", height=" - + height - + ", weight=" - + weight - + ", hometown=" - + hometown - + ", highSchool=" - + highSchool - + ", image=" - + image - + "]"; - } + @Id + @GeneratedValue(strategy = jakarta.persistence.GenerationType.AUTO) + private Integer id; + + @Column(name = "firstName", nullable = false) + private String firstName; + + @Column(name = "lastName", nullable = false) + private String lastName; + + @Column(name = "position", nullable = false) + private Position[] position; + + @Column(name = "number", nullable = false) + private Integer number; + + @Column(name = "height", nullable = false) + private String height; + + @Column(name = "weight", nullable = false) + private Integer weight; + + @Column(name = "hometown", nullable = false) + private String hometown; + + @Column(name = "highSchool", nullable = false) + private String highSchool; + + @Column(name = "image", nullable = false) + private String image = "src/main/resources/static/images/players/default.jpg"; + + @OneToMany(mappedBy = "player", fetch = FetchType.EAGER) + private List contracts = new LinkedList<>(); + + @OneToMany(mappedBy = "player", fetch = FetchType.EAGER) + private List playerData = new LinkedList<>(); + + public Player() {} + + public Player( + String firstName, + String lastName, + Position[] position, + Integer number, + String height, + Integer weight, + String hometown, + String highSchool) { + this.firstName = firstName; + this.lastName = lastName; + this.position = position; + this.number = number; + this.height = height; + this.weight = weight; + this.hometown = hometown; + this.highSchool = highSchool; + } + + public Player( + String firstName, + String lastName, + Position[] position, + Integer number, + String height, + Integer weight, + String hometown, + String highSchool, + String image) { + this.firstName = firstName; + this.lastName = lastName; + this.position = position; + this.number = number; + this.height = height; + this.weight = weight; + this.hometown = hometown; + this.highSchool = highSchool; + this.image = image; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public Position[] getPosition() { + return position; + } + + public void setPosition(Position[] position) { + this.position = position; + } + + public Integer getNumber() { + return number; + } + + public void setNumber(Integer number) { + this.number = number; + } + + public String getHeight() { + return height; + } + + public void setHeight(String height) { + this.height = height; + } + + public Integer getWeight() { + return weight; + } + + public void setWeight(Integer weight) { + this.weight = weight; + } + + public String getHometown() { + return hometown; + } + + public void setHometown(String hometown) { + this.hometown = hometown; + } + + public String getHighSchool() { + return highSchool; + } + + public void setHighSchool(String highSchool) { + this.highSchool = highSchool; + } + + @JsonIgnore + public String getImage() { + return image; + } + + @JsonIgnore + public void setImage(String image) { + this.image = image; + } + + public List getContracts() { + return contracts; + } + + public void addContract(Contract contract) { + contracts.add(contract); + } + + public void removeContract(Contract contract) { + contracts.remove(contract); + } + + public void setContracts(List contracts) { + this.contracts = contracts; + } + + public List getPlayerData() { + return playerData; + } + + public void addPlayerData(PlayerData playerData) { + this.playerData.add(playerData); + } + + public void removePlayerData(PlayerData playerData) { + this.playerData.remove(playerData); + } + + public void setPlayerData(List playerData) { + this.playerData = playerData; + } + + @Override + public String toString() { + return "Player [id=" + + id + + ", firstName=" + + firstName + + ", lastName=" + + lastName + + ", position=" + + position + + ", number=" + + number + + ", height=" + + height + + ", weight=" + + weight + + ", hometown=" + + hometown + + ", highSchool=" + + highSchool + + ", image=" + + image + + "]"; + } } diff --git a/src/main/java/com/appdev/allin/player/PlayerController.java b/src/main/java/com/appdev/allin/player/PlayerController.java index 1728005..9b636da 100644 --- a/src/main/java/com/appdev/allin/player/PlayerController.java +++ b/src/main/java/com/appdev/allin/player/PlayerController.java @@ -3,7 +3,7 @@ import com.appdev.allin.contract.Contract; import com.appdev.allin.contract.ContractService; import com.appdev.allin.exceptions.NotFoundException; - +import java.util.List; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -17,116 +17,114 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; -import java.util.List; - @RestController public class PlayerController { - public final PlayerService playerService; - public final ContractService contractService; - - public PlayerController(PlayerService playerService, ContractService contractService) { - this.playerService = playerService; - this.contractService = contractService; - } - - // CRUD operations - - @GetMapping("/players/") - public ResponseEntity> getAllPlayers() { - List players = playerService.getAllPlayers(); - return ResponseEntity.ok(players); - } - - @GetMapping("/players/{player_id}/") - public ResponseEntity getPlayerById(@PathVariable final Integer player_id) { - try { - Player player = playerService.getPlayerById(player_id); - return ResponseEntity.ok(player); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + public final PlayerService playerService; + public final ContractService contractService; + + public PlayerController(PlayerService playerService, ContractService contractService) { + this.playerService = playerService; + this.contractService = contractService; + } + + // CRUD operations + + @GetMapping("/players/") + public ResponseEntity> getAllPlayers() { + List players = playerService.getAllPlayers(); + return ResponseEntity.ok(players); + } + + @GetMapping("/players/{player_id}/") + public ResponseEntity getPlayerById(@PathVariable final Integer player_id) { + try { + Player player = playerService.getPlayerById(player_id); + return ResponseEntity.ok(player); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } - - @PostMapping("/players/") - public ResponseEntity createPlayer(@RequestBody final Player player) { - return ResponseEntity.status(201).body(playerService.createPlayer(player)); + } + + @PostMapping("/players/") + public ResponseEntity createPlayer(@RequestBody final Player player) { + return ResponseEntity.status(201).body(playerService.createPlayer(player)); + } + + @PatchMapping("/players/{player_id}/") + public ResponseEntity updatePlayer( + @PathVariable final Integer player_id, @RequestBody final Player player) { + try { + Player updatedPlayer = playerService.updatePlayer(player_id, player); + return ResponseEntity.ok(updatedPlayer); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } - - @PatchMapping("/players/{player_id}/") - public ResponseEntity updatePlayer( - @PathVariable final Integer player_id, @RequestBody final Player player) { - try { - Player updatedPlayer = playerService.updatePlayer(player_id, player); - return ResponseEntity.ok(updatedPlayer); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + } + + @DeleteMapping("/players/{player_id}/") + public ResponseEntity deletePlayer(@PathVariable final Integer player_id) { + try { + return ResponseEntity.ok(playerService.deletePlayer(player_id)); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } - - @DeleteMapping("/players/{player_id}/") - public ResponseEntity deletePlayer(@PathVariable final Integer player_id) { - try { - return ResponseEntity.ok(playerService.deletePlayer(player_id)); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + } + + // Contracts Operations + + @GetMapping("/players/{player_id}/contracts/") + public ResponseEntity> getContractsByPlayerId( + @PathVariable final Integer player_id) { + try { + List contracts = contractService.getContractsByPlayerId(player_id); + return ResponseEntity.ok(contracts); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } - - // Contracts Operations - - @GetMapping("/players/{player_id}/contracts/") - public ResponseEntity> getContractsByPlayerId( - @PathVariable final Integer player_id) { - try { - List contracts = contractService.getContractsByPlayerId(player_id); - return ResponseEntity.ok(contracts); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + } + + // Images Operations + + @GetMapping("/players/{player_id}/image/") + public ResponseEntity getPlayerImageById(@PathVariable final Integer player_id) + throws NotFoundException { + try { + Player player = playerService.getPlayerById(player_id); + String currentDirectory = player.getImage(); + String imageName = currentDirectory.substring(currentDirectory.lastIndexOf('/') + 1); + currentDirectory = currentDirectory.replace(imageName, ""); + byte[] image = playerService.getImageFromStorage(currentDirectory, imageName); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.IMAGE_JPEG); + return new ResponseEntity<>(image, headers, HttpStatus.OK); + } catch (Exception e) { + return ResponseEntity.notFound().build(); } - - // Images Operations - - @GetMapping("/players/{player_id}/image/") - public ResponseEntity getPlayerImageById(@PathVariable final Integer player_id) - throws NotFoundException { - try { - Player player = playerService.getPlayerById(player_id); - String currentDirectory = player.getImage(); - String imageName = currentDirectory.substring(currentDirectory.lastIndexOf("/") + 1); - currentDirectory = currentDirectory.replace(imageName, ""); - byte[] image = playerService.getImageFromStorage(currentDirectory, imageName); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.IMAGE_JPEG); - return new ResponseEntity<>(image, headers, HttpStatus.OK); - } catch (Exception e) { - return ResponseEntity.notFound().build(); - } - } - - @PatchMapping("/players/{player_id}/image/") - public ResponseEntity updatePlayerImageById( - @PathVariable final Integer player_id, @RequestBody final MultipartFile image) { - String uploadDirectory = "src/main/resources/static/images/players/"; - try { - playerService.updatePlayerImageById(player_id, image, uploadDirectory); - return ResponseEntity.ok("Image uploaded successfully!"); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + } + + @PatchMapping("/players/{player_id}/image/") + public ResponseEntity updatePlayerImageById( + @PathVariable final Integer player_id, @RequestBody final MultipartFile image) { + String uploadDirectory = "src/main/resources/static/images/players/"; + try { + playerService.updatePlayerImageById(player_id, image, uploadDirectory); + return ResponseEntity.ok("Image uploaded successfully!"); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } - - @DeleteMapping("/players/{player_id}/image/") - public ResponseEntity deletePlayerImageById(@PathVariable final Integer player_id) { - String uploadDirectory = "src/main/resources/static/images/players/"; - try { - if (playerService.deletePlayerImageById(player_id, uploadDirectory)) { - return ResponseEntity.ok("Image deleted successfully"); - } - return ResponseEntity.notFound().build(); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + } + + @DeleteMapping("/players/{player_id}/image/") + public ResponseEntity deletePlayerImageById(@PathVariable final Integer player_id) { + String uploadDirectory = "src/main/resources/static/images/players/"; + try { + if (playerService.deletePlayerImageById(player_id, uploadDirectory)) { + return ResponseEntity.ok("Image deleted successfully"); + } + return ResponseEntity.notFound().build(); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } + } } diff --git a/src/main/java/com/appdev/allin/player/PlayerRepo.java b/src/main/java/com/appdev/allin/player/PlayerRepo.java index 18c6388..279ed00 100644 --- a/src/main/java/com/appdev/allin/player/PlayerRepo.java +++ b/src/main/java/com/appdev/allin/player/PlayerRepo.java @@ -6,5 +6,5 @@ @Repository public interface PlayerRepo extends JpaRepository { - Player findByNumber(Integer number); + Player findByNumber(Integer number); } diff --git a/src/main/java/com/appdev/allin/player/PlayerService.java b/src/main/java/com/appdev/allin/player/PlayerService.java index bd9065e..40432e9 100644 --- a/src/main/java/com/appdev/allin/player/PlayerService.java +++ b/src/main/java/com/appdev/allin/player/PlayerService.java @@ -2,129 +2,125 @@ import com.appdev.allin.exceptions.NotFoundException; import com.appdev.allin.utils.Constants; - -import org.springframework.stereotype.Service; -import org.springframework.web.multipart.MultipartFile; - import java.nio.file.Files; import java.nio.file.Path; import java.util.List; import java.util.Optional; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; @Service public class PlayerService { - private final PlayerRepo playerRepo; + private final PlayerRepo playerRepo; - public PlayerService(PlayerRepo playerRepo) { - this.playerRepo = playerRepo; - } + public PlayerService(PlayerRepo playerRepo) { + this.playerRepo = playerRepo; + } - public List getAllPlayers() { - return playerRepo.findAll(); - } + public List getAllPlayers() { + return playerRepo.findAll(); + } - public Player getPlayerById(final Integer player_id) throws NotFoundException { - Optional playerOptional = playerRepo.findById(player_id); - if (playerOptional.isEmpty()) { - throw new NotFoundException("Player with id " + player_id + " not found."); - } - return playerOptional.get(); + public Player getPlayerById(final Integer player_id) throws NotFoundException { + Optional playerOptional = playerRepo.findById(player_id); + if (playerOptional.isEmpty()) { + throw new NotFoundException("Player with id " + player_id + " not found."); } + return playerOptional.get(); + } - public Player createPlayer(final Player player) { - return playerRepo.save(player); - } + public Player createPlayer(final Player player) { + return playerRepo.save(player); + } - public Player updatePlayer(final Integer player_id, final Player player) - throws NotFoundException { - Optional playerOptional = playerRepo.findById(player_id); - if (playerOptional.isEmpty()) { - throw new NotFoundException("Player with id " + player_id + " not found."); - } - Player playerToUpdate = playerOptional.get(); - playerToUpdate.setFirstName(player.getFirstName()); - playerToUpdate.setLastName(player.getLastName()); - playerToUpdate.setPosition(player.getPosition()); - playerToUpdate.setNumber(player.getNumber()); - playerToUpdate.setHeight(player.getHeight()); - playerToUpdate.setWeight(player.getWeight()); - playerToUpdate.setHometown(player.getHometown()); - playerToUpdate.setHighSchool(player.getHighSchool()); - playerToUpdate.setImage(player.getImage()); - return playerRepo.save(playerToUpdate); + public Player updatePlayer(final Integer player_id, final Player player) + throws NotFoundException { + Optional playerOptional = playerRepo.findById(player_id); + if (playerOptional.isEmpty()) { + throw new NotFoundException("Player with id " + player_id + " not found."); } + Player playerToUpdate = playerOptional.get(); + playerToUpdate.setFirstName(player.getFirstName()); + playerToUpdate.setLastName(player.getLastName()); + playerToUpdate.setPosition(player.getPosition()); + playerToUpdate.setNumber(player.getNumber()); + playerToUpdate.setHeight(player.getHeight()); + playerToUpdate.setWeight(player.getWeight()); + playerToUpdate.setHometown(player.getHometown()); + playerToUpdate.setHighSchool(player.getHighSchool()); + playerToUpdate.setImage(player.getImage()); + return playerRepo.save(playerToUpdate); + } - public Player deletePlayer(final Integer player_id) throws NotFoundException { - Optional playerOptional = playerRepo.findById(player_id); - if (playerOptional.isEmpty()) { - throw new NotFoundException("Player with id " + player_id + " not found."); - } - playerRepo.deleteById(player_id); - return playerOptional.get(); + public Player deletePlayer(final Integer player_id) throws NotFoundException { + Optional playerOptional = playerRepo.findById(player_id); + if (playerOptional.isEmpty()) { + throw new NotFoundException("Player with id " + player_id + " not found."); } + playerRepo.deleteById(player_id); + return playerOptional.get(); + } - public byte[] getImageFromStorage(final String uploadDirectory, final String fileName) { - Path uploadPath = Path.of(uploadDirectory); - Path filePath = uploadPath.resolve(fileName); - try { - return Files.readAllBytes(filePath); - } catch (Exception e) { - e.printStackTrace(); - } - return null; + public byte[] getImageFromStorage(final String uploadDirectory, final String fileName) { + Path uploadPath = Path.of(uploadDirectory); + Path filePath = uploadPath.resolve(fileName); + try { + return Files.readAllBytes(filePath); + } catch (Exception e) { + e.printStackTrace(); } + return null; + } - public void updatePlayerImageById( - final Integer player_id, final MultipartFile image, final String uploadDirectory) - throws NotFoundException { - Optional playerOptional = playerRepo.findById(player_id); - if (playerOptional.isEmpty()) { - throw new NotFoundException("Player with id " + player_id + " not found."); - } - Player playerToUpdate = playerOptional.get(); - String uniqueFileName = player_id + "_" + image.getOriginalFilename(); - Path uploadPath = Path.of(uploadDirectory); - Path filePath = uploadPath.resolve(uniqueFileName); - if (!Files.exists(uploadPath)) { - try { - Files.createDirectories(uploadPath); - } catch (Exception e) { - e.printStackTrace(); - } - } - try { - Files.copy( - image.getInputStream(), - filePath, - java.nio.file.StandardCopyOption.REPLACE_EXISTING); - } catch (Exception e) { - e.printStackTrace(); - } - playerToUpdate.setImage(uploadDirectory + uniqueFileName); - playerRepo.save(playerToUpdate); + public void updatePlayerImageById( + final Integer player_id, final MultipartFile image, final String uploadDirectory) + throws NotFoundException { + Optional playerOptional = playerRepo.findById(player_id); + if (playerOptional.isEmpty()) { + throw new NotFoundException("Player with id " + player_id + " not found."); + } + Player playerToUpdate = playerOptional.get(); + String uniqueFileName = player_id + "_" + image.getOriginalFilename(); + Path uploadPath = Path.of(uploadDirectory); + Path filePath = uploadPath.resolve(uniqueFileName); + if (!Files.exists(uploadPath)) { + try { + Files.createDirectories(uploadPath); + } catch (Exception e) { + e.printStackTrace(); + } } + try { + Files.copy( + image.getInputStream(), filePath, java.nio.file.StandardCopyOption.REPLACE_EXISTING); + } catch (Exception e) { + e.printStackTrace(); + } + playerToUpdate.setImage(uploadDirectory + uniqueFileName); + playerRepo.save(playerToUpdate); + } - public boolean deletePlayerImageById(final Integer player_id, final String uploadDirectory) - throws NotFoundException { - Optional playerOptional = playerRepo.findById(player_id); - if (playerOptional.isEmpty()) { - throw new NotFoundException("Player with id " + player_id + " not found."); - } - Player playerToUpdate = playerOptional.get(); - String image = playerToUpdate.getImage(); - if (image.equals(Constants.DEFAULT_PLAYER_IMAGE)) { - return false; - } - Path pathToFile = Path.of(playerToUpdate.getImage()); - try { - Files.delete(pathToFile); - playerToUpdate.setImage("src/main/resources/static/images/players/default.jpg"); - playerRepo.save(playerToUpdate); - return true; - } catch (Exception e) { - e.printStackTrace(); - } - return false; + public boolean deletePlayerImageById(final Integer player_id, final String uploadDirectory) + throws NotFoundException { + Optional playerOptional = playerRepo.findById(player_id); + if (playerOptional.isEmpty()) { + throw new NotFoundException("Player with id " + player_id + " not found."); + } + Player playerToUpdate = playerOptional.get(); + String image = playerToUpdate.getImage(); + if (image.equals(Constants.DEFAULT_PLAYER_IMAGE)) { + return false; + } + Path pathToFile = Path.of(playerToUpdate.getImage()); + try { + Files.delete(pathToFile); + playerToUpdate.setImage("src/main/resources/static/images/players/default.jpg"); + playerRepo.save(playerToUpdate); + return true; + } catch (Exception e) { + e.printStackTrace(); } + return false; + } } diff --git a/src/main/java/com/appdev/allin/player/Position.java b/src/main/java/com/appdev/allin/player/Position.java index e541e60..eba9e32 100644 --- a/src/main/java/com/appdev/allin/player/Position.java +++ b/src/main/java/com/appdev/allin/player/Position.java @@ -1,7 +1,7 @@ package com.appdev.allin.player; public enum Position { - Guard, - Forward, - Center + Guard, + Forward, + Center } diff --git a/src/main/java/com/appdev/allin/playerData/PlayerData.java b/src/main/java/com/appdev/allin/playerData/PlayerData.java index e74c5bc..c6269f1 100644 --- a/src/main/java/com/appdev/allin/playerData/PlayerData.java +++ b/src/main/java/com/appdev/allin/playerData/PlayerData.java @@ -4,7 +4,6 @@ import com.appdev.allin.contract.OpposingTeam; import com.appdev.allin.player.Player; import com.fasterxml.jackson.annotation.JsonIgnore; - import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; @@ -13,286 +12,284 @@ import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; - +import java.time.LocalDate; import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; -import java.time.LocalDate; - @Entity @Table(name = "player_data") public class PlayerData { - @Id - @GeneratedValue(strategy = jakarta.persistence.GenerationType.AUTO) - private Integer id; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "player_id") - @OnDelete(action = OnDeleteAction.CASCADE) - private Player player; - - @Column(name = "gameDate", nullable = false) - private LocalDate gameDate; - - @Column(name = "opposingTeam", nullable = false) - private OpposingTeam opposingTeam; - - @Column(name = "points", nullable = false) - private Integer points; - - @Column(name = "minutes", nullable = false) - private Integer minutes; - - @Column(name = "fieldGoals", nullable = false) - private Integer fieldGoals; - - @Column(name = "threePointers", nullable = false) - private Integer threePointers; - - @Column(name = "freeThrows", nullable = false) - private Integer freeThrows; - - @Column(name = "rebounds", nullable = false) - private Integer rebounds; - - @Column(name = "assists", nullable = false) - private Integer assists; - - @Column(name = "steals", nullable = false) - private Integer steals; - - @Column(name = "blocks", nullable = false) - private Integer blocks; - - @Column(name = "turnovers", nullable = false) - private Integer turnovers; - - @Column(name = "fouls", nullable = false) - private Integer fouls; - - public PlayerData() {} - - public PlayerData( - Player player, - LocalDate gameDate, - OpposingTeam opposingTeam, - Integer points, - Integer minutes, - Integer fieldGoals, - Integer threePointers, - Integer freeThrows, - Integer rebounds, - Integer assists, - Integer steals, - Integer blocks, - Integer turnovers, - Integer fouls) { - this.player = player; - this.gameDate = gameDate; - this.opposingTeam = opposingTeam; - this.points = points; - this.minutes = minutes; - this.fieldGoals = fieldGoals; - this.threePointers = threePointers; - this.freeThrows = freeThrows; - this.rebounds = rebounds; - this.assists = assists; - this.steals = steals; - this.blocks = blocks; - this.turnovers = turnovers; - this.fouls = fouls; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - @JsonIgnore - public Player getPlayer() { - return player; - } - - public Integer getPlayerId() { - if (player == null) { - return null; - } - return player.getId(); - } - - @JsonIgnore - public void setPlayer(Player player) { - this.player = player; - } - - public LocalDate getGameDate() { - return gameDate; - } - - public void setGameDate(LocalDate gameDate) { - this.gameDate = gameDate; - } - - public OpposingTeam getOpposingTeam() { - return opposingTeam; - } - - public void setOpposingTeam(OpposingTeam opposingTeam) { - this.opposingTeam = opposingTeam; - } - - public Integer getPoints() { - return points; - } - - public void setPoints(Integer points) { - this.points = points; - } - - public Integer getMinutes() { - return minutes; - } - - public void setMinutes(Integer minutes) { - this.minutes = minutes; - } - - public Integer getFieldGoals() { - return fieldGoals; - } - - public void setFieldGoals(Integer fieldGoals) { - this.fieldGoals = fieldGoals; - } - - public Integer getThreePointers() { - return threePointers; - } - - public void setThreePointers(Integer threePointers) { - this.threePointers = threePointers; - } - - public Integer getFreeThrows() { - return freeThrows; - } - - public void setFreeThrows(Integer freeThrows) { - this.freeThrows = freeThrows; - } - - public Integer getRebounds() { - return rebounds; - } - - public void setRebounds(Integer rebounds) { - this.rebounds = rebounds; - } - - public Integer getAssists() { - return assists; - } - - public void setAssists(Integer assists) { - this.assists = assists; - } - - public Integer getSteals() { - return steals; - } - - public void setSteals(Integer steals) { - this.steals = steals; - } - - public Integer getBlocks() { - return blocks; - } - - public void setBlocks(Integer blocks) { - this.blocks = blocks; - } - - public Integer getTurnovers() { - return turnovers; - } - - public void setTurnovers(Integer turnovers) { - this.turnovers = turnovers; - } - - public Integer getFouls() { - return fouls; - } - - public void setFouls(Integer fouls) { - this.fouls = fouls; - } - - @Override - public String toString() { - return "PlayerData [id=" - + id - + ", player=" - + player - + ", gameDate=" - + gameDate - + ", opposingTeam=" - + opposingTeam - + ", points=" - + points - + ", minutes=" - + minutes - + ", fieldGoals=" - + fieldGoals - + ", threePointers=" - + threePointers - + ", freeThrows=" - + freeThrows - + ", rebounds=" - + rebounds - + ", assists=" - + assists - + ", steals=" - + steals - + ", blocks=" - + blocks - + ", turnovers=" - + turnovers - + ", fouls=" - + fouls - + "]"; - } - - public Integer getEvent(Event e) { - switch (e) { - case Points: - return getPoints(); - case Minutes: - return getMinutes(); - case Field_Goals: - return getFieldGoals(); - case Three_Pointers: - return getThreePointers(); - case Free_Throws: - return getFreeThrows(); - case Rebounds: - return getRebounds(); - case Assists: - return getAssists(); - case Steals: - return getSteals(); - case Blocks: - return getBlocks(); - case Turnovers: - return getTurnovers(); - case Fouls: - return getFouls(); - default: - return 0; - } - } + @Id + @GeneratedValue(strategy = jakarta.persistence.GenerationType.AUTO) + private Integer id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "player_id") + @OnDelete(action = OnDeleteAction.CASCADE) + private Player player; + + @Column(name = "gameDate", nullable = false) + private LocalDate gameDate; + + @Column(name = "opposingTeam", nullable = false) + private OpposingTeam opposingTeam; + + @Column(name = "points", nullable = false) + private Integer points; + + @Column(name = "minutes", nullable = false) + private Integer minutes; + + @Column(name = "fieldGoals", nullable = false) + private Integer fieldGoals; + + @Column(name = "threePointers", nullable = false) + private Integer threePointers; + + @Column(name = "freeThrows", nullable = false) + private Integer freeThrows; + + @Column(name = "rebounds", nullable = false) + private Integer rebounds; + + @Column(name = "assists", nullable = false) + private Integer assists; + + @Column(name = "steals", nullable = false) + private Integer steals; + + @Column(name = "blocks", nullable = false) + private Integer blocks; + + @Column(name = "turnovers", nullable = false) + private Integer turnovers; + + @Column(name = "fouls", nullable = false) + private Integer fouls; + + public PlayerData() {} + + public PlayerData( + Player player, + LocalDate gameDate, + OpposingTeam opposingTeam, + Integer points, + Integer minutes, + Integer fieldGoals, + Integer threePointers, + Integer freeThrows, + Integer rebounds, + Integer assists, + Integer steals, + Integer blocks, + Integer turnovers, + Integer fouls) { + this.player = player; + this.gameDate = gameDate; + this.opposingTeam = opposingTeam; + this.points = points; + this.minutes = minutes; + this.fieldGoals = fieldGoals; + this.threePointers = threePointers; + this.freeThrows = freeThrows; + this.rebounds = rebounds; + this.assists = assists; + this.steals = steals; + this.blocks = blocks; + this.turnovers = turnovers; + this.fouls = fouls; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + @JsonIgnore + public Player getPlayer() { + return player; + } + + public Integer getPlayerId() { + if (player == null) { + return null; + } + return player.getId(); + } + + @JsonIgnore + public void setPlayer(Player player) { + this.player = player; + } + + public LocalDate getGameDate() { + return gameDate; + } + + public void setGameDate(LocalDate gameDate) { + this.gameDate = gameDate; + } + + public OpposingTeam getOpposingTeam() { + return opposingTeam; + } + + public void setOpposingTeam(OpposingTeam opposingTeam) { + this.opposingTeam = opposingTeam; + } + + public Integer getPoints() { + return points; + } + + public void setPoints(Integer points) { + this.points = points; + } + + public Integer getMinutes() { + return minutes; + } + + public void setMinutes(Integer minutes) { + this.minutes = minutes; + } + + public Integer getFieldGoals() { + return fieldGoals; + } + + public void setFieldGoals(Integer fieldGoals) { + this.fieldGoals = fieldGoals; + } + + public Integer getThreePointers() { + return threePointers; + } + + public void setThreePointers(Integer threePointers) { + this.threePointers = threePointers; + } + + public Integer getFreeThrows() { + return freeThrows; + } + + public void setFreeThrows(Integer freeThrows) { + this.freeThrows = freeThrows; + } + + public Integer getRebounds() { + return rebounds; + } + + public void setRebounds(Integer rebounds) { + this.rebounds = rebounds; + } + + public Integer getAssists() { + return assists; + } + + public void setAssists(Integer assists) { + this.assists = assists; + } + + public Integer getSteals() { + return steals; + } + + public void setSteals(Integer steals) { + this.steals = steals; + } + + public Integer getBlocks() { + return blocks; + } + + public void setBlocks(Integer blocks) { + this.blocks = blocks; + } + + public Integer getTurnovers() { + return turnovers; + } + + public void setTurnovers(Integer turnovers) { + this.turnovers = turnovers; + } + + public Integer getFouls() { + return fouls; + } + + public void setFouls(Integer fouls) { + this.fouls = fouls; + } + + @Override + public String toString() { + return "PlayerData [id=" + + id + + ", player=" + + player + + ", gameDate=" + + gameDate + + ", opposingTeam=" + + opposingTeam + + ", points=" + + points + + ", minutes=" + + minutes + + ", fieldGoals=" + + fieldGoals + + ", threePointers=" + + threePointers + + ", freeThrows=" + + freeThrows + + ", rebounds=" + + rebounds + + ", assists=" + + assists + + ", steals=" + + steals + + ", blocks=" + + blocks + + ", turnovers=" + + turnovers + + ", fouls=" + + fouls + + "]"; + } + + public Integer getEvent(Event e) { + switch (e) { + case Points: + return getPoints(); + case Minutes: + return getMinutes(); + case Field_Goals: + return getFieldGoals(); + case Three_Pointers: + return getThreePointers(); + case Free_Throws: + return getFreeThrows(); + case Rebounds: + return getRebounds(); + case Assists: + return getAssists(); + case Steals: + return getSteals(); + case Blocks: + return getBlocks(); + case Turnovers: + return getTurnovers(); + case Fouls: + return getFouls(); + default: + return 0; + } + } } diff --git a/src/main/java/com/appdev/allin/playerData/PlayerDataController.java b/src/main/java/com/appdev/allin/playerData/PlayerDataController.java index 697e0df..1933b8f 100644 --- a/src/main/java/com/appdev/allin/playerData/PlayerDataController.java +++ b/src/main/java/com/appdev/allin/playerData/PlayerDataController.java @@ -1,7 +1,8 @@ package com.appdev.allin.playerData; import com.appdev.allin.exceptions.NotFoundException; - +import java.time.LocalDate; +import java.util.List; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -11,86 +12,81 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; -import java.time.LocalDate; -import java.util.List; - @RestController public class PlayerDataController { - public final PlayerDataService playerDataService; + public final PlayerDataService playerDataService; - public PlayerDataController(PlayerDataService playerDataService) { - this.playerDataService = playerDataService; - } + public PlayerDataController(PlayerDataService playerDataService) { + this.playerDataService = playerDataService; + } - // CRUD operations + // CRUD operations - @GetMapping("/playerData/") - public ResponseEntity> getAllPlayerData() { - List playerData = playerDataService.getAllPlayerData(); - return ResponseEntity.ok(playerData); - } + @GetMapping("/playerData/") + public ResponseEntity> getAllPlayerData() { + List playerData = playerDataService.getAllPlayerData(); + return ResponseEntity.ok(playerData); + } - @GetMapping("/playerData/{playerDataId}/") - public ResponseEntity getPlayerDataById(@PathVariable final Integer playerDataId) { - try { - PlayerData playerData = playerDataService.getPlayerDataById(playerDataId); - return ResponseEntity.ok(playerData); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + @GetMapping("/playerData/{playerDataId}/") + public ResponseEntity getPlayerDataById(@PathVariable final Integer playerDataId) { + try { + PlayerData playerData = playerDataService.getPlayerDataById(playerDataId); + return ResponseEntity.ok(playerData); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } + } - @PostMapping("/playerData/") - public ResponseEntity createPlayerData(@RequestBody final PlayerData playerData) { - return ResponseEntity.status(201).body(playerDataService.createPlayerData(playerData)); - } + @PostMapping("/playerData/") + public ResponseEntity createPlayerData(@RequestBody final PlayerData playerData) { + return ResponseEntity.status(201).body(playerDataService.createPlayerData(playerData)); + } - @PatchMapping("/playerData/{playerDataId}/") - public ResponseEntity updatePlayerData( - @PathVariable final Integer playerDataId, @RequestBody final PlayerData playerData) { - try { - PlayerData updatedPlayerData = - playerDataService.updatePlayerData(playerDataId, playerData); - return ResponseEntity.ok(updatedPlayerData); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + @PatchMapping("/playerData/{playerDataId}/") + public ResponseEntity updatePlayerData( + @PathVariable final Integer playerDataId, @RequestBody final PlayerData playerData) { + try { + PlayerData updatedPlayerData = playerDataService.updatePlayerData(playerDataId, playerData); + return ResponseEntity.ok(updatedPlayerData); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } + } - @DeleteMapping("/playerData/{playerDataId}/") - public ResponseEntity deletePlayerData(@PathVariable final Integer playerDataId) { - try { - PlayerData deletedPlayerData = playerDataService.deletePlayerData(playerDataId); - return ResponseEntity.ok(deletedPlayerData); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + @DeleteMapping("/playerData/{playerDataId}/") + public ResponseEntity deletePlayerData(@PathVariable final Integer playerDataId) { + try { + PlayerData deletedPlayerData = playerDataService.deletePlayerData(playerDataId); + return ResponseEntity.ok(deletedPlayerData); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } + } - // Player operations + // Player operations - @GetMapping("/playerData/player/{playerId}/") - public ResponseEntity> getPlayerDataByPlayer( - @PathVariable final Integer playerId) { - try { - List playerData = playerDataService.getPlayerDataByPlayerId(playerId); - return ResponseEntity.ok(playerData); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + @GetMapping("/playerData/player/{playerId}/") + public ResponseEntity> getPlayerDataByPlayer( + @PathVariable final Integer playerId) { + try { + List playerData = playerDataService.getPlayerDataByPlayerId(playerId); + return ResponseEntity.ok(playerData); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } + } - // Game operations + // Game operations - @GetMapping("/playerData/game/{gameDate}/") - public ResponseEntity> getPlayerDataByGame( - @PathVariable final String gameDate) { - try { - List playerData = - playerDataService.getPlayerDataByDate(LocalDate.parse(gameDate)); - return ResponseEntity.ok(playerData); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + @GetMapping("/playerData/game/{gameDate}/") + public ResponseEntity> getPlayerDataByGame(@PathVariable final String gameDate) { + try { + List playerData = + playerDataService.getPlayerDataByDate(LocalDate.parse(gameDate)); + return ResponseEntity.ok(playerData); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } + } } diff --git a/src/main/java/com/appdev/allin/playerData/PlayerDataRepo.java b/src/main/java/com/appdev/allin/playerData/PlayerDataRepo.java index 5d82c9c..c74bbce 100644 --- a/src/main/java/com/appdev/allin/playerData/PlayerDataRepo.java +++ b/src/main/java/com/appdev/allin/playerData/PlayerDataRepo.java @@ -1,19 +1,17 @@ package com.appdev.allin.playerData; import com.appdev.allin.player.Player; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - import java.time.LocalDate; import java.util.List; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; @Repository public interface PlayerDataRepo extends JpaRepository { - List findByPlayer(Player player); + List findByPlayer(Player player); - List findByGameDate(LocalDate gameDate); + List findByGameDate(LocalDate gameDate); - PlayerData findByPlayerAndGameDate(Player player, LocalDate gameDate); + PlayerData findByPlayerAndGameDate(Player player, LocalDate gameDate); } diff --git a/src/main/java/com/appdev/allin/playerData/PlayerDataService.java b/src/main/java/com/appdev/allin/playerData/PlayerDataService.java index 8f26aae..0fc24ab 100644 --- a/src/main/java/com/appdev/allin/playerData/PlayerDataService.java +++ b/src/main/java/com/appdev/allin/playerData/PlayerDataService.java @@ -3,79 +3,76 @@ import com.appdev.allin.exceptions.NotFoundException; import com.appdev.allin.player.Player; import com.appdev.allin.player.PlayerRepo; - -import org.springframework.stereotype.Service; - import java.time.LocalDate; import java.util.List; import java.util.Optional; +import org.springframework.stereotype.Service; @Service public class PlayerDataService { - private final PlayerDataRepo playerDataRepo; - private final PlayerRepo playerRepo; + private final PlayerDataRepo playerDataRepo; + private final PlayerRepo playerRepo; - public PlayerDataService(PlayerDataRepo playerDataRepo, PlayerRepo playerRepo) { - this.playerDataRepo = playerDataRepo; - this.playerRepo = playerRepo; - } + public PlayerDataService(PlayerDataRepo playerDataRepo, PlayerRepo playerRepo) { + this.playerDataRepo = playerDataRepo; + this.playerRepo = playerRepo; + } - public List getAllPlayerData() { - return playerDataRepo.findAll(); - } + public List getAllPlayerData() { + return playerDataRepo.findAll(); + } - public PlayerData getPlayerDataById(final Integer playerDataId) throws NotFoundException { - Optional playerDataOptional = playerDataRepo.findById(playerDataId); - if (playerDataOptional.isEmpty()) { - throw new NotFoundException("Player data with id " + playerDataId + " not found."); - } - return playerDataOptional.get(); + public PlayerData getPlayerDataById(final Integer playerDataId) throws NotFoundException { + Optional playerDataOptional = playerDataRepo.findById(playerDataId); + if (playerDataOptional.isEmpty()) { + throw new NotFoundException("Player data with id " + playerDataId + " not found."); } + return playerDataOptional.get(); + } - public PlayerData createPlayerData(final PlayerData playerData) { - return playerDataRepo.save(playerData); - } + public PlayerData createPlayerData(final PlayerData playerData) { + return playerDataRepo.save(playerData); + } - public PlayerData updatePlayerData(final Integer playerDataId, final PlayerData playerData) - throws NotFoundException { - Optional playerDataOptional = playerDataRepo.findById(playerDataId); - if (playerDataOptional.isEmpty()) { - throw new NotFoundException("Player data with id " + playerDataId + " not found."); - } - PlayerData playerDataToUpdate = playerDataOptional.get(); - playerDataToUpdate.setGameDate(playerData.getGameDate()); - playerDataToUpdate.setOpposingTeam(playerData.getOpposingTeam()); - playerDataToUpdate.setPoints(playerData.getPoints()); - playerDataToUpdate.setMinutes(playerData.getMinutes()); - playerDataToUpdate.setFieldGoals(playerData.getFieldGoals()); - playerDataToUpdate.setThreePointers(playerData.getThreePointers()); - playerDataToUpdate.setFreeThrows(playerData.getFreeThrows()); - playerDataToUpdate.setRebounds(playerData.getRebounds()); - playerDataToUpdate.setAssists(playerData.getAssists()); - playerDataToUpdate.setSteals(playerData.getSteals()); - return playerDataRepo.save(playerDataToUpdate); + public PlayerData updatePlayerData(final Integer playerDataId, final PlayerData playerData) + throws NotFoundException { + Optional playerDataOptional = playerDataRepo.findById(playerDataId); + if (playerDataOptional.isEmpty()) { + throw new NotFoundException("Player data with id " + playerDataId + " not found."); } + PlayerData playerDataToUpdate = playerDataOptional.get(); + playerDataToUpdate.setGameDate(playerData.getGameDate()); + playerDataToUpdate.setOpposingTeam(playerData.getOpposingTeam()); + playerDataToUpdate.setPoints(playerData.getPoints()); + playerDataToUpdate.setMinutes(playerData.getMinutes()); + playerDataToUpdate.setFieldGoals(playerData.getFieldGoals()); + playerDataToUpdate.setThreePointers(playerData.getThreePointers()); + playerDataToUpdate.setFreeThrows(playerData.getFreeThrows()); + playerDataToUpdate.setRebounds(playerData.getRebounds()); + playerDataToUpdate.setAssists(playerData.getAssists()); + playerDataToUpdate.setSteals(playerData.getSteals()); + return playerDataRepo.save(playerDataToUpdate); + } - public PlayerData deletePlayerData(final Integer playerDataId) throws NotFoundException { - Optional playerDataOptional = playerDataRepo.findById(playerDataId); - if (playerDataOptional.isEmpty()) { - throw new NotFoundException("Player data with id " + playerDataId + " not found."); - } - playerDataRepo.deleteById(playerDataId); - return playerDataOptional.get(); + public PlayerData deletePlayerData(final Integer playerDataId) throws NotFoundException { + Optional playerDataOptional = playerDataRepo.findById(playerDataId); + if (playerDataOptional.isEmpty()) { + throw new NotFoundException("Player data with id " + playerDataId + " not found."); } + playerDataRepo.deleteById(playerDataId); + return playerDataOptional.get(); + } - public List getPlayerDataByPlayerId(final Integer playerId) - throws NotFoundException { - Optional playerOptional = playerRepo.findById(playerId); - if (playerOptional.isEmpty()) { - throw new NotFoundException("Player with id " + playerId + " not found."); - } - Player player = playerOptional.get(); - return playerDataRepo.findByPlayer(player); + public List getPlayerDataByPlayerId(final Integer playerId) throws NotFoundException { + Optional playerOptional = playerRepo.findById(playerId); + if (playerOptional.isEmpty()) { + throw new NotFoundException("Player with id " + playerId + " not found."); } + Player player = playerOptional.get(); + return playerDataRepo.findByPlayer(player); + } - public List getPlayerDataByDate(final LocalDate gameDate) throws NotFoundException { - return playerDataRepo.findByGameDate(gameDate); - } + public List getPlayerDataByDate(final LocalDate gameDate) throws NotFoundException { + return playerDataRepo.findByGameDate(gameDate); + } } diff --git a/src/main/java/com/appdev/allin/playerData/util/PopulatePlayerData.java b/src/main/java/com/appdev/allin/playerData/util/PopulatePlayerData.java index d651c7b..8d1851c 100644 --- a/src/main/java/com/appdev/allin/playerData/util/PopulatePlayerData.java +++ b/src/main/java/com/appdev/allin/playerData/util/PopulatePlayerData.java @@ -5,120 +5,118 @@ import com.appdev.allin.player.PlayerRepo; import com.appdev.allin.playerData.PlayerData; import com.appdev.allin.playerData.PlayerDataRepo; - -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.jsoup.select.Elements; - import java.io.IOException; import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.select.Elements; public class PopulatePlayerData { - private PlayerRepo playerRepo; - private PlayerDataRepo playerDataRepo; - String baseUrl = "https://cornellbigred.com/boxscore.aspx?id="; + private PlayerRepo playerRepo; + private PlayerDataRepo playerDataRepo; + String baseUrl = "https://cornellbigred.com/boxscore.aspx?id="; - int[] ids = { - 58875, - // 59093, 59018, 58876, 59200, 59057, 58877, 58878, 58874, 58879, 59092, 58881, - // 58882, - // 57826, 57827, 57828, 59255, 57829, 57830, 57831, 57832, 57833, 57834, 57835, - // 57836, 57837, - // 57838, 57839, 59254 - }; + int[] ids = { + 58875, + // 59093, 59018, 58876, 59200, 59057, 58877, 58878, 58874, 58879, 59092, 58881, + // 58882, + // 57826, 57827, 57828, 59255, 57829, 57830, 57831, 57832, 57833, 57834, 57835, + // 57836, 57837, + // 57838, 57839, 59254 + }; - public PopulatePlayerData(PlayerRepo playerRepo, PlayerDataRepo playerDataRepo) { - this.playerRepo = playerRepo; - this.playerDataRepo = playerDataRepo; - } + public PopulatePlayerData(PlayerRepo playerRepo, PlayerDataRepo playerDataRepo) { + this.playerRepo = playerRepo; + this.playerDataRepo = playerDataRepo; + } - public void populate() throws IOException { - for (int id : ids) { - String url = baseUrl + id; - Document doc = Jsoup.connect(url).get(); - String dateText = doc.getElementsByTag("dd").get(0).text(); - LocalDate gameDate = LocalDate.parse(dateText, DateTimeFormatter.ofPattern("MM/dd/yy")); - Elements opposingTeamElement = doc.getElementsByClass("game-details-history-link"); - int index = opposingTeamElement.get(0).text().indexOf("vs "); - String opposingTeam = opposingTeamElement.get(0).text().substring(index + 3); - if (opposingTeam.equals("SUNY Morrisville")) { - opposingTeam = "Morrisville"; - } else if (opposingTeam.equals("George Mason")) { - opposingTeam = "George"; - } else if (opposingTeam.equals("Cal St. Fullerton")) { - opposingTeam = "Fullerton"; - } else if (opposingTeam.equals("Utah Valley")) { - opposingTeam = "Utah"; - } else if (opposingTeam.equals("Robert Morris")) { - opposingTeam = "Robert"; - } else if (opposingTeam.equals("Ohio St.")) { - opposingTeam = "Ohio"; - } - Elements sections = doc.getElementsByTag("section"); - // check which section whose aria label contains Cornell + public void populate() throws IOException { + for (int id : ids) { + String url = baseUrl + id; + Document doc = Jsoup.connect(url).get(); + String dateText = doc.getElementsByTag("dd").get(0).text(); + LocalDate gameDate = LocalDate.parse(dateText, DateTimeFormatter.ofPattern("MM/dd/yy")); + Elements opposingTeamElement = doc.getElementsByClass("game-details-history-link"); + int index = opposingTeamElement.get(0).text().indexOf("vs "); + String opposingTeam = opposingTeamElement.get(0).text().substring(index + 3); + if (opposingTeam.equals("SUNY Morrisville")) { + opposingTeam = "Morrisville"; + } else if (opposingTeam.equals("George Mason")) { + opposingTeam = "George"; + } else if (opposingTeam.equals("Cal St. Fullerton")) { + opposingTeam = "Fullerton"; + } else if (opposingTeam.equals("Utah Valley")) { + opposingTeam = "Utah"; + } else if (opposingTeam.equals("Robert Morris")) { + opposingTeam = "Robert"; + } else if (opposingTeam.equals("Ohio St.")) { + opposingTeam = "Ohio"; + } + Elements sections = doc.getElementsByTag("section"); + // check which section whose aria label contains Cornell - Elements stats = doc.getElementsByTag("tr"); - // get the 2 and 3 index, and get the first h3 inside of that - String team1 = sections.get(2).getElementsByTag("h3").get(0).text(); - if (team1.contains("Cornell")) { - stats = sections.get(2).getElementsByTag("tr"); - } else { - stats = sections.get(3).getElementsByTag("tr"); - } + Elements stats = doc.getElementsByTag("tr"); + // get the 2 and 3 index, and get the first h3 inside of that + String team1 = sections.get(2).getElementsByTag("h3").get(0).text(); + if (team1.contains("Cornell")) { + stats = sections.get(2).getElementsByTag("tr"); + } else { + stats = sections.get(3).getElementsByTag("tr"); + } - int i = 1; - while (stats.get(i).getElementsByTag("td").get(0).text().equals("TM") == false) { - Elements playerStats = stats.get(i).getElementsByTag("td"); - int playerNumber = Integer.parseInt(playerStats.get(0).text()); - String minString = playerStats.get(3).text(); - int minutes = 0; - if (!minString.contains("+")) { - minutes = Integer.parseInt(minString); - } - int fieldGoalsMade = Integer.parseInt(playerStats.get(4).text().split("-")[0]); - int threePointersMade = Integer.parseInt(playerStats.get(5).text().split("-")[0]); - int freeThrowsMade = Integer.parseInt(playerStats.get(6).text().split("-")[0]); - int rebounds = Integer.parseInt(playerStats.get(8).text()); - int personalFouls = Integer.parseInt(playerStats.get(9).text()); - int assists = Integer.parseInt(playerStats.get(10).text()); - int turnovers = Integer.parseInt(playerStats.get(11).text()); - int blocks = Integer.parseInt(playerStats.get(12).text()); - int steals = Integer.parseInt(playerStats.get(13).text()); - int points = Integer.parseInt(playerStats.get(14).text()); - Player player = playerRepo.findByNumber(playerNumber); + int i = 1; + while (stats.get(i).getElementsByTag("td").get(0).text().equals("TM") == false) { + Elements playerStats = stats.get(i).getElementsByTag("td"); + int playerNumber = Integer.parseInt(playerStats.get(0).text()); + String minString = playerStats.get(3).text(); + int minutes = 0; + if (!minString.contains("+")) { + minutes = Integer.parseInt(minString); + } + int fieldGoalsMade = Integer.parseInt(playerStats.get(4).text().split("-")[0]); + int threePointersMade = Integer.parseInt(playerStats.get(5).text().split("-")[0]); + int freeThrowsMade = Integer.parseInt(playerStats.get(6).text().split("-")[0]); + int rebounds = Integer.parseInt(playerStats.get(8).text()); + int personalFouls = Integer.parseInt(playerStats.get(9).text()); + int assists = Integer.parseInt(playerStats.get(10).text()); + int turnovers = Integer.parseInt(playerStats.get(11).text()); + int blocks = Integer.parseInt(playerStats.get(12).text()); + int steals = Integer.parseInt(playerStats.get(13).text()); + int points = Integer.parseInt(playerStats.get(14).text()); + Player player = playerRepo.findByNumber(playerNumber); - PlayerData playerData = - new PlayerData( - player, - gameDate, - OpposingTeam.valueOf(opposingTeam), - points, - minutes, - fieldGoalsMade, - threePointersMade, - freeThrowsMade, - rebounds, - assists, - steals, - blocks, - turnovers, - personalFouls); + PlayerData playerData = + new PlayerData( + player, + gameDate, + OpposingTeam.valueOf(opposingTeam), + points, + minutes, + fieldGoalsMade, + threePointersMade, + freeThrowsMade, + rebounds, + assists, + steals, + blocks, + turnovers, + personalFouls); - if (playerDataRepo.findByPlayerAndGameDate(player, gameDate) == null) { - playerDataRepo.save(playerData); - } - ++i; - } + if (playerDataRepo.findByPlayerAndGameDate(player, gameDate) == null) { + playerDataRepo.save(playerData); } + ++i; + } } + } - public void run() { - try { - populate(); - } catch (IOException e) { - e.printStackTrace(); - } + public void run() { + try { + populate(); + } catch (IOException e) { + e.printStackTrace(); } + } } diff --git a/src/main/java/com/appdev/allin/transaction/Transaction.java b/src/main/java/com/appdev/allin/transaction/Transaction.java index f0a2940..0b96dec 100644 --- a/src/main/java/com/appdev/allin/transaction/Transaction.java +++ b/src/main/java/com/appdev/allin/transaction/Transaction.java @@ -3,7 +3,6 @@ import com.appdev.allin.contract.Contract; import com.appdev.allin.user.User; import com.fasterxml.jackson.annotation.JsonIgnore; - import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; @@ -12,140 +11,138 @@ import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; - +import java.time.LocalDate; import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; -import java.time.LocalDate; - @Entity @Table(name = "transactions") public class Transaction { - @Id - @GeneratedValue(strategy = jakarta.persistence.GenerationType.AUTO) - private Integer id; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "seller_id") - @OnDelete(action = OnDeleteAction.NO_ACTION) - private User seller; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "buyer_id", nullable = false) - @OnDelete(action = OnDeleteAction.NO_ACTION) - private User buyer; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "contract_id", nullable = false) - @OnDelete(action = OnDeleteAction.NO_ACTION) - private Contract contract; - - @Column(name = "transactionDate", nullable = false) - private LocalDate transactionDate = LocalDate.now(); - - @Column(name = "price", nullable = false) - private Double price; - - public Transaction() {} - - public Transaction( - User seller, User buyer, Contract contract, LocalDate transactionDate, Double price) { - this.seller = seller; - this.buyer = buyer; - this.contract = contract; - this.transactionDate = transactionDate; - this.price = price; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - @JsonIgnore - public User getSeller() { - return seller; - } - - public Integer getSellerId() { - if (seller == null) { - return null; - } - return seller.getId(); - } - - @JsonIgnore - public void setSeller(User seller) { - this.seller = seller; - } - - @JsonIgnore - public User getBuyer() { - return buyer; - } - - public Integer getBuyerId() { - if (buyer == null) { - return null; - } - return buyer.getId(); - } - - @JsonIgnore - public void setBuyer(User buyer) { - this.buyer = buyer; - } - - @JsonIgnore - public Contract getContract() { - return contract; - } - - public Integer getContractId() { - if (contract == null) { - return null; - } - return contract.getId(); - } - - @JsonIgnore - public void setContract(Contract contract) { - this.contract = contract; - } - - public LocalDate getTransactionDate() { - return transactionDate; - } - - public void setTransactionDate(LocalDate transactionDate) { - this.transactionDate = transactionDate; - } - - public Double getPrice() { - return price; - } - - public void setPrice(Double price) { - this.price = price; - } - - @Override - public String toString() { - return "Transaction [id=" - + id - + ", seller=" - + seller - + ", buyer=" - + buyer - + ", contract=" - + contract - + ", transactionDate=" - + transactionDate - + ", price=" - + price - + "]"; - } + @Id + @GeneratedValue(strategy = jakarta.persistence.GenerationType.AUTO) + private Integer id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "seller_id") + @OnDelete(action = OnDeleteAction.NO_ACTION) + private User seller; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "buyer_id", nullable = false) + @OnDelete(action = OnDeleteAction.NO_ACTION) + private User buyer; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "contract_id", nullable = false) + @OnDelete(action = OnDeleteAction.NO_ACTION) + private Contract contract; + + @Column(name = "transactionDate", nullable = false) + private LocalDate transactionDate = LocalDate.now(); + + @Column(name = "price", nullable = false) + private Double price; + + public Transaction() {} + + public Transaction( + User seller, User buyer, Contract contract, LocalDate transactionDate, Double price) { + this.seller = seller; + this.buyer = buyer; + this.contract = contract; + this.transactionDate = transactionDate; + this.price = price; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + @JsonIgnore + public User getSeller() { + return seller; + } + + public Integer getSellerId() { + if (seller == null) { + return null; + } + return seller.getId(); + } + + @JsonIgnore + public void setSeller(User seller) { + this.seller = seller; + } + + @JsonIgnore + public User getBuyer() { + return buyer; + } + + public Integer getBuyerId() { + if (buyer == null) { + return null; + } + return buyer.getId(); + } + + @JsonIgnore + public void setBuyer(User buyer) { + this.buyer = buyer; + } + + @JsonIgnore + public Contract getContract() { + return contract; + } + + public Integer getContractId() { + if (contract == null) { + return null; + } + return contract.getId(); + } + + @JsonIgnore + public void setContract(Contract contract) { + this.contract = contract; + } + + public LocalDate getTransactionDate() { + return transactionDate; + } + + public void setTransactionDate(LocalDate transactionDate) { + this.transactionDate = transactionDate; + } + + public Double getPrice() { + return price; + } + + public void setPrice(Double price) { + this.price = price; + } + + @Override + public String toString() { + return "Transaction [id=" + + id + + ", seller=" + + seller + + ", buyer=" + + buyer + + ", contract=" + + contract + + ", transactionDate=" + + transactionDate + + ", price=" + + price + + "]"; + } } diff --git a/src/main/java/com/appdev/allin/transaction/TransactionController.java b/src/main/java/com/appdev/allin/transaction/TransactionController.java index f2d4a6d..cfe9d58 100644 --- a/src/main/java/com/appdev/allin/transaction/TransactionController.java +++ b/src/main/java/com/appdev/allin/transaction/TransactionController.java @@ -1,7 +1,7 @@ package com.appdev.allin.transaction; import com.appdev.allin.exceptions.NotFoundException; - +import java.util.List; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -11,77 +11,71 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; -import java.util.List; - @RestController public class TransactionController { - public final TransactionService transactionService; + public final TransactionService transactionService; - public TransactionController(TransactionService transactionService) { - this.transactionService = transactionService; - } + public TransactionController(TransactionService transactionService) { + this.transactionService = transactionService; + } - // CRUD operations + // CRUD operations - @GetMapping("/transactions/") - public ResponseEntity> getAllTransactions() { - List transactions = transactionService.getAllTransactions(); - return ResponseEntity.ok(transactions); - } + @GetMapping("/transactions/") + public ResponseEntity> getAllTransactions() { + List transactions = transactionService.getAllTransactions(); + return ResponseEntity.ok(transactions); + } - @GetMapping("/transactions/{transaction_id}/") - public ResponseEntity getTransactionById( - @PathVariable final Integer transaction_id) { - try { - Transaction transaction = transactionService.getTransactionById(transaction_id); - return ResponseEntity.ok(transaction); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + @GetMapping("/transactions/{transaction_id}/") + public ResponseEntity getTransactionById( + @PathVariable final Integer transaction_id) { + try { + Transaction transaction = transactionService.getTransactionById(transaction_id); + return ResponseEntity.ok(transaction); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } + } - @PostMapping("/transactions/") - public ResponseEntity createTransaction( - @RequestBody final Transaction transaction) { - return ResponseEntity.status(201).body(transactionService.createTransaction(transaction)); - } + @PostMapping("/transactions/") + public ResponseEntity createTransaction(@RequestBody final Transaction transaction) { + return ResponseEntity.status(201).body(transactionService.createTransaction(transaction)); + } - @PatchMapping("/transactions/{transaction_id}/") - public ResponseEntity updateTransaction( - @PathVariable final Integer transaction_id, - @RequestBody final Transaction transaction) { - try { - Transaction updatedTransaction = - transactionService.updateTransaction(transaction_id, transaction); - return ResponseEntity.ok(updatedTransaction); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + @PatchMapping("/transactions/{transaction_id}/") + public ResponseEntity updateTransaction( + @PathVariable final Integer transaction_id, @RequestBody final Transaction transaction) { + try { + Transaction updatedTransaction = + transactionService.updateTransaction(transaction_id, transaction); + return ResponseEntity.ok(updatedTransaction); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } + } - @DeleteMapping("/transactions/{transaction_id}/") - public ResponseEntity deleteTransaction( - @PathVariable final Integer transaction_id) { - try { - Transaction deletedTransaction = transactionService.deleteTransaction(transaction_id); - return ResponseEntity.ok(deletedTransaction); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + @DeleteMapping("/transactions/{transaction_id}/") + public ResponseEntity deleteTransaction(@PathVariable final Integer transaction_id) { + try { + Transaction deletedTransaction = transactionService.deleteTransaction(transaction_id); + return ResponseEntity.ok(deletedTransaction); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } + } - // Contract-Transaction operations + // Contract-Transaction operations - @GetMapping("/transactions/contract/{contract_id}/") - public ResponseEntity> getTransactionsByContractId( - @PathVariable final Integer contract_id) { - try { - List transactions = - transactionService.getTransactionsByContractId(contract_id); - return ResponseEntity.ok(transactions); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + @GetMapping("/transactions/contract/{contract_id}/") + public ResponseEntity> getTransactionsByContractId( + @PathVariable final Integer contract_id) { + try { + List transactions = transactionService.getTransactionsByContractId(contract_id); + return ResponseEntity.ok(transactions); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } + } } diff --git a/src/main/java/com/appdev/allin/transaction/TransactionRepo.java b/src/main/java/com/appdev/allin/transaction/TransactionRepo.java index 90a1993..3ed487a 100644 --- a/src/main/java/com/appdev/allin/transaction/TransactionRepo.java +++ b/src/main/java/com/appdev/allin/transaction/TransactionRepo.java @@ -2,20 +2,18 @@ import com.appdev.allin.contract.Contract; import com.appdev.allin.user.User; - +import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; -import java.util.List; - @Repository public interface TransactionRepo extends JpaRepository { - List findByContract(Contract contract); + List findByContract(Contract contract); - List findBySeller(User seller); + List findBySeller(User seller); - List findByBuyer(User buyer); + List findByBuyer(User buyer); - List findBySellerOrBuyer(User seller, User buyer); + List findBySellerOrBuyer(User seller, User buyer); } diff --git a/src/main/java/com/appdev/allin/transaction/TransactionService.java b/src/main/java/com/appdev/allin/transaction/TransactionService.java index 3ed6ee8..5d53ec8 100644 --- a/src/main/java/com/appdev/allin/transaction/TransactionService.java +++ b/src/main/java/com/appdev/allin/transaction/TransactionService.java @@ -5,106 +5,103 @@ import com.appdev.allin.exceptions.NotFoundException; import com.appdev.allin.user.User; import com.appdev.allin.user.UserRepo; - -import org.springframework.stereotype.Service; - import java.util.List; import java.util.Optional; +import org.springframework.stereotype.Service; @Service public class TransactionService { - private final TransactionRepo transactionRepo; - private final UserRepo userRepo; - private final ContractRepo contractRepo; - - public TransactionService( - TransactionRepo transactionRepo, UserRepo userRepo, ContractRepo contractRepo) { - this.transactionRepo = transactionRepo; - this.userRepo = userRepo; - this.contractRepo = contractRepo; + private final TransactionRepo transactionRepo; + private final UserRepo userRepo; + private final ContractRepo contractRepo; + + public TransactionService( + TransactionRepo transactionRepo, UserRepo userRepo, ContractRepo contractRepo) { + this.transactionRepo = transactionRepo; + this.userRepo = userRepo; + this.contractRepo = contractRepo; + } + + public List getAllTransactions() { + return transactionRepo.findAll(); + } + + public Transaction getTransactionById(final Integer transaction_id) throws NotFoundException { + Optional transactionOptional = transactionRepo.findById(transaction_id); + if (transactionOptional.isEmpty()) { + throw new NotFoundException("Transaction with id " + transaction_id + " not found."); } - - public List getAllTransactions() { - return transactionRepo.findAll(); + return transactionOptional.get(); + } + + public List getTransactionsByContract(final Contract contract) + throws NotFoundException { + return transactionRepo.findByContract(contract); + } + + public List getTransactionsByUserId(final Integer user_id) throws NotFoundException { + Optional userOptional = userRepo.findById(user_id); + if (userOptional.isEmpty()) { + throw new NotFoundException("User with id " + user_id + " not found."); } - - public Transaction getTransactionById(final Integer transaction_id) throws NotFoundException { - Optional transactionOptional = transactionRepo.findById(transaction_id); - if (transactionOptional.isEmpty()) { - throw new NotFoundException("Transaction with id " + transaction_id + " not found."); - } - return transactionOptional.get(); + User user = userOptional.get(); + return transactionRepo.findBySellerOrBuyer(user, user); + } + + public List getSellerTransactionsByUserId(final Integer user_id) + throws NotFoundException { + Optional userOptional = userRepo.findById(user_id); + if (userOptional.isEmpty()) { + throw new NotFoundException("User with id " + user_id + " not found."); } - - public List getTransactionsByContract(final Contract contract) - throws NotFoundException { - return transactionRepo.findByContract(contract); + User user = userOptional.get(); + return transactionRepo.findBySeller(user); + } + + public List getBuyerTransactionsByUserId(final Integer user_id) + throws NotFoundException { + Optional userOptional = userRepo.findById(user_id); + if (userOptional.isEmpty()) { + throw new NotFoundException("User with id " + user_id + " not found."); } - - public List getTransactionsByUserId(final Integer user_id) - throws NotFoundException { - Optional userOptional = userRepo.findById(user_id); - if (userOptional.isEmpty()) { - throw new NotFoundException("User with id " + user_id + " not found."); - } - User user = userOptional.get(); - return transactionRepo.findBySellerOrBuyer(user, user); + User user = userOptional.get(); + return transactionRepo.findByBuyer(user); + } + + public Transaction createTransaction(final Transaction transaction) { + return transactionRepo.save(transaction); + } + + public Transaction updateTransaction(final Integer transaction_id, final Transaction transaction) + throws NotFoundException { + Optional transactionOptional = transactionRepo.findById(transaction_id); + if (transactionOptional.isEmpty()) { + throw new NotFoundException("Transaction with id " + transaction_id + " not found."); } - - public List getSellerTransactionsByUserId(final Integer user_id) - throws NotFoundException { - Optional userOptional = userRepo.findById(user_id); - if (userOptional.isEmpty()) { - throw new NotFoundException("User with id " + user_id + " not found."); - } - User user = userOptional.get(); - return transactionRepo.findBySeller(user); + Transaction transactionToUpdate = transactionOptional.get(); + transactionToUpdate.setTransactionDate(transaction.getTransactionDate()); + transactionToUpdate.setPrice(transaction.getPrice()); + return transactionRepo.save(transactionToUpdate); + } + + public Transaction deleteTransaction(final Integer transaction_id) throws NotFoundException { + Optional transactionOptional = transactionRepo.findById(transaction_id); + if (transactionOptional.isEmpty()) { + throw new NotFoundException("Transaction with id " + transaction_id + " not found."); } - - public List getBuyerTransactionsByUserId(final Integer user_id) - throws NotFoundException { - Optional userOptional = userRepo.findById(user_id); - if (userOptional.isEmpty()) { - throw new NotFoundException("User with id " + user_id + " not found."); - } - User user = userOptional.get(); - return transactionRepo.findByBuyer(user); - } - - public Transaction createTransaction(final Transaction transaction) { - return transactionRepo.save(transaction); - } - - public Transaction updateTransaction( - final Integer transaction_id, final Transaction transaction) throws NotFoundException { - Optional transactionOptional = transactionRepo.findById(transaction_id); - if (transactionOptional.isEmpty()) { - throw new NotFoundException("Transaction with id " + transaction_id + " not found."); - } - Transaction transactionToUpdate = transactionOptional.get(); - transactionToUpdate.setTransactionDate(transaction.getTransactionDate()); - transactionToUpdate.setPrice(transaction.getPrice()); - return transactionRepo.save(transactionToUpdate); - } - - public Transaction deleteTransaction(final Integer transaction_id) throws NotFoundException { - Optional transactionOptional = transactionRepo.findById(transaction_id); - if (transactionOptional.isEmpty()) { - throw new NotFoundException("Transaction with id " + transaction_id + " not found."); - } - Transaction transactionToDelete = transactionOptional.get(); - transactionRepo.delete(transactionToDelete); - return transactionToDelete; - } - - public List getTransactionsByContractId(final Integer contract_id) - throws NotFoundException { - Optional contractOptional = contractRepo.findById(contract_id); - if (contractOptional.isEmpty()) { - throw new NotFoundException("Contract with id " + contract_id + " not found."); - } - Contract contract = contractOptional.get(); - return transactionRepo.findByContract(contract); + Transaction transactionToDelete = transactionOptional.get(); + transactionRepo.delete(transactionToDelete); + return transactionToDelete; + } + + public List getTransactionsByContractId(final Integer contract_id) + throws NotFoundException { + Optional contractOptional = contractRepo.findById(contract_id); + if (contractOptional.isEmpty()) { + throw new NotFoundException("Contract with id " + contract_id + " not found."); } + Contract contract = contractOptional.get(); + return transactionRepo.findByContract(contract); + } } diff --git a/src/main/java/com/appdev/allin/user/User.java b/src/main/java/com/appdev/allin/user/User.java index 26ea2bc..008274d 100644 --- a/src/main/java/com/appdev/allin/user/User.java +++ b/src/main/java/com/appdev/allin/user/User.java @@ -3,7 +3,6 @@ import com.appdev.allin.contract.Contract; import com.appdev.allin.transaction.Transaction; import com.fasterxml.jackson.annotation.JsonIgnore; - import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; @@ -11,149 +10,148 @@ import jakarta.persistence.Id; import jakarta.persistence.OneToMany; import jakarta.persistence.Table; - import java.util.LinkedList; import java.util.List; @Entity @Table(name = "users") public class User { - @Id - @GeneratedValue(strategy = jakarta.persistence.GenerationType.AUTO) - private Integer id; + @Id + @GeneratedValue(strategy = jakarta.persistence.GenerationType.AUTO) + private Integer id; - @Column(name = "username", nullable = false, unique = true) - private String username; + @Column(name = "username", nullable = false, unique = true) + private String username; - @Column(name = "email", nullable = false, unique = true) - private String email; + @Column(name = "email", nullable = false, unique = true) + private String email; - @Column(name = "image", nullable = false) - private String image = "src/main/resources/static/images/users/default.jpg"; + @Column(name = "image", nullable = false) + private String image = "src/main/resources/static/images/users/default.jpg"; - @Column(name = "balance", nullable = false) - private Double balance = 1000.0; + @Column(name = "balance", nullable = false) + private Double balance = 1000.0; - @OneToMany(mappedBy = "owner", fetch = FetchType.EAGER) - private List contracts = new LinkedList<>(); + @OneToMany(mappedBy = "owner", fetch = FetchType.EAGER) + private List contracts = new LinkedList<>(); - @OneToMany(mappedBy = "seller", fetch = FetchType.EAGER) - private List sellerTransactions = new LinkedList<>(); + @OneToMany(mappedBy = "seller", fetch = FetchType.EAGER) + private List sellerTransactions = new LinkedList<>(); - @OneToMany(mappedBy = "buyer", fetch = FetchType.EAGER) - private List buyerTransactions = new LinkedList<>(); + @OneToMany(mappedBy = "buyer", fetch = FetchType.EAGER) + private List buyerTransactions = new LinkedList<>(); - public User() {} + public User() {} - public User(String username, String email, String image, Double balance) { - this.username = username; - this.email = email; - this.image = image; - this.balance = balance; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - @JsonIgnore - public String getImage() { - return image; - } - - @JsonIgnore - public void setImage(String image) { - this.image = image; - } - - public Double getBalance() { - return balance; - } - - public void setBalance(Double balance) { - this.balance = balance; - } - - public List getContracts() { - return contracts; - } - - public void setContracts(List contracts) { - this.contracts = contracts; - } - - public void addContract(Contract contract) { - contracts.add(contract); - } - - public void removeContract(Contract contract) { - contracts.remove(contract); - } - - public List getSellerTransactions() { - return sellerTransactions; - } - - public void setSellerTransactions(List sellerTransactions) { - this.sellerTransactions = sellerTransactions; - } - - public void addSellerTransaction(Transaction transaction) { - sellerTransactions.add(transaction); - } - - public void removeSellerTransaction(Transaction transaction) { - sellerTransactions.remove(transaction); - } - - public List getBuyerTransactions() { - return buyerTransactions; - } - - public void setBuyerTransactions(List buyerTransactions) { - this.buyerTransactions = buyerTransactions; - } - - public void addBuyerTransaction(Transaction transaction) { - buyerTransactions.add(transaction); - } - - public void removeBuyerTransaction(Transaction transaction) { - buyerTransactions.remove(transaction); - } - - @Override - public String toString() { - return "User [id=" - + id - + ", username=" - + username - + ", email=" - + email - + ", image=" - + image - + ", balance=" - + balance - + "]"; - } + public User(String username, String email, String image, Double balance) { + this.username = username; + this.email = email; + this.image = image; + this.balance = balance; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + @JsonIgnore + public String getImage() { + return image; + } + + @JsonIgnore + public void setImage(String image) { + this.image = image; + } + + public Double getBalance() { + return balance; + } + + public void setBalance(Double balance) { + this.balance = balance; + } + + public List getContracts() { + return contracts; + } + + public void setContracts(List contracts) { + this.contracts = contracts; + } + + public void addContract(Contract contract) { + contracts.add(contract); + } + + public void removeContract(Contract contract) { + contracts.remove(contract); + } + + public List getSellerTransactions() { + return sellerTransactions; + } + + public void setSellerTransactions(List sellerTransactions) { + this.sellerTransactions = sellerTransactions; + } + + public void addSellerTransaction(Transaction transaction) { + sellerTransactions.add(transaction); + } + + public void removeSellerTransaction(Transaction transaction) { + sellerTransactions.remove(transaction); + } + + public List getBuyerTransactions() { + return buyerTransactions; + } + + public void setBuyerTransactions(List buyerTransactions) { + this.buyerTransactions = buyerTransactions; + } + + public void addBuyerTransaction(Transaction transaction) { + buyerTransactions.add(transaction); + } + + public void removeBuyerTransaction(Transaction transaction) { + buyerTransactions.remove(transaction); + } + + @Override + public String toString() { + return "User [id=" + + id + + ", username=" + + username + + ", email=" + + email + + ", image=" + + image + + ", balance=" + + balance + + "]"; + } } diff --git a/src/main/java/com/appdev/allin/user/UserController.java b/src/main/java/com/appdev/allin/user/UserController.java index 2938387..c74d1c1 100644 --- a/src/main/java/com/appdev/allin/user/UserController.java +++ b/src/main/java/com/appdev/allin/user/UserController.java @@ -9,7 +9,9 @@ import com.appdev.allin.player.PlayerService; import com.appdev.allin.transaction.Transaction; import com.appdev.allin.transaction.TransactionService; - +import java.util.List; +import java.util.Map; +import java.util.concurrent.ThreadLocalRandom; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -23,209 +25,202 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ThreadLocalRandom; - @RestController public class UserController { - private final UserService userService; - private final ContractService contractService; - private final TransactionService transactionService; - private final PlayerService playerService; - - private String uploadDirectory = "src/main/resources/static/images/users/"; - - public UserController( - UserService userService, - ContractService ContractService, - TransactionService transactionService, - PlayerService playerService) { - this.userService = userService; - this.contractService = ContractService; - this.transactionService = transactionService; - this.playerService = playerService; + private final UserService userService; + private final ContractService contractService; + private final TransactionService transactionService; + private final PlayerService playerService; + + private String uploadDirectory = "src/main/resources/static/images/users/"; + + public UserController( + UserService userService, + ContractService ContractService, + TransactionService transactionService, + PlayerService playerService) { + this.userService = userService; + this.contractService = ContractService; + this.transactionService = transactionService; + this.playerService = playerService; + } + + // CRUD operations + + @GetMapping("/users/") + public ResponseEntity> getAllUsers() { + List users = userService.getAllUsers(); + return ResponseEntity.ok(users); + } + + @GetMapping("/users/{user_id}/") + public ResponseEntity getUserById(@PathVariable final Integer user_id) { + // try { + User user = userService.getUserById(user_id); + return ResponseEntity.ok(user); + // } catch (NotFoundException e) { + // return ResponseEntity.notFound().build(); + // } + } + + @PostMapping("/users/") + public ResponseEntity createUser(@RequestBody final User user) { + try { + return ResponseEntity.status(201).body(userService.createUser(user)); + } catch (ForbiddenException e) { + return ResponseEntity.status(403).build(); } - - // CRUD operations - - @GetMapping("/users/") - public ResponseEntity> getAllUsers() { - List users = userService.getAllUsers(); - return ResponseEntity.ok(users); + } + + @PatchMapping("/users/{user_id}/") + public ResponseEntity updateUser( + @PathVariable final Integer user_id, @RequestBody final User user) { + try { + User updatedUser = userService.updateUser(user_id, user); + return ResponseEntity.ok(updatedUser); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } - - @GetMapping("/users/{user_id}/") - public ResponseEntity getUserById(@PathVariable final Integer user_id) { - // try { - User user = userService.getUserById(user_id); - return ResponseEntity.ok(user); - // } catch (NotFoundException e) { - // return ResponseEntity.notFound().build(); - // } + } + + @DeleteMapping("/users/{user_id}/") + public ResponseEntity deleteUser(@PathVariable final Integer user_id) { + try { + User deletedUser = userService.deleteUser(user_id); + return ResponseEntity.ok(deletedUser); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } - - @PostMapping("/users/") - public ResponseEntity createUser(@RequestBody final User user) { - try { - return ResponseEntity.status(201).body(userService.createUser(user)); - } catch (ForbiddenException e) { - return ResponseEntity.status(403).build(); - } + } + + @GetMapping("/users/{user_id}/image/") + public ResponseEntity getUserImageById(@PathVariable final Integer user_id) { + try { + User user = userService.getUserById(user_id); + String currentDirectory = user.getImage(); + String imageName = currentDirectory.substring(currentDirectory.lastIndexOf('/') + 1); + currentDirectory = currentDirectory.replace(imageName, ""); + byte[] image = userService.getUserImageById(currentDirectory, imageName); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.IMAGE_JPEG); + return new ResponseEntity<>(image, headers, HttpStatus.OK); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } - - @PatchMapping("/users/{user_id}/") - public ResponseEntity updateUser( - @PathVariable final Integer user_id, @RequestBody final User user) { - try { - User updatedUser = userService.updateUser(user_id, user); - return ResponseEntity.ok(updatedUser); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + } + + @PatchMapping("/users/{user_id}/image/") + public ResponseEntity updateUserImageById( + @PathVariable final Integer user_id, @RequestBody final MultipartFile image) { + try { + byte[] uploadedImage = userService.updateUserImageById(user_id, image, uploadDirectory); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.IMAGE_JPEG); + return new ResponseEntity<>(uploadedImage, headers, HttpStatus.OK); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } - - @DeleteMapping("/users/{user_id}/") - public ResponseEntity deleteUser(@PathVariable final Integer user_id) { - try { - User deletedUser = userService.deleteUser(user_id); - return ResponseEntity.ok(deletedUser); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } - } - - @GetMapping("/users/{user_id}/image/") - public ResponseEntity getUserImageById(@PathVariable final Integer user_id) { - try { - User user = userService.getUserById(user_id); - String currentDirectory = user.getImage(); - String imageName = currentDirectory.substring(currentDirectory.lastIndexOf("/") + 1); - currentDirectory = currentDirectory.replace(imageName, ""); - byte[] image = userService.getUserImageById(currentDirectory, imageName); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.IMAGE_JPEG); - return new ResponseEntity<>(image, headers, HttpStatus.OK); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } - } - - @PatchMapping("/users/{user_id}/image/") - public ResponseEntity updateUserImageById( - @PathVariable final Integer user_id, @RequestBody final MultipartFile image) { - try { - byte[] uploadedImage = userService.updateUserImageById(user_id, image, uploadDirectory); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.IMAGE_JPEG); - return new ResponseEntity<>(uploadedImage, headers, HttpStatus.OK); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } - } - - @DeleteMapping("/users/{user_id}/image/") - public ResponseEntity deleteUserImageById(@PathVariable final Integer user_id) { - try { - byte[] deletedImage = userService.deleteUserImageById(user_id, uploadDirectory); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.IMAGE_JPEG); - return new ResponseEntity<>(deletedImage, headers, HttpStatus.OK); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } catch (ForbiddenException e) { - return ResponseEntity.status(403).build(); - } + } + + @DeleteMapping("/users/{user_id}/image/") + public ResponseEntity deleteUserImageById(@PathVariable final Integer user_id) { + try { + byte[] deletedImage = userService.deleteUserImageById(user_id, uploadDirectory); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.IMAGE_JPEG); + return new ResponseEntity<>(deletedImage, headers, HttpStatus.OK); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); + } catch (ForbiddenException e) { + return ResponseEntity.status(403).build(); } + } - // Contract operations + // Contract operations - @GetMapping("/users/{user_id}/contracts/") - public ResponseEntity> getUserContracts(@PathVariable final Integer user_id) { - try { - List contracts = contractService.getContractsByUserId(user_id); - return ResponseEntity.ok(contracts); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + @GetMapping("/users/{user_id}/contracts/") + public ResponseEntity> getUserContracts(@PathVariable final Integer user_id) { + try { + List contracts = contractService.getContractsByUserId(user_id); + return ResponseEntity.ok(contracts); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } - - @PostMapping("/users/{user_id}/players/{player_id}/contracts/") - public ResponseEntity createContractByPlayerId( - @PathVariable final Integer user_id, - @PathVariable final Integer player_id, - @RequestBody final Map body) { - try { - Double buyPrice = body.get("buy_price"); - Rarity rarity = Rarity.getRandomRarity(); - Contract createdContract = - contractService.createContract(user_id, player_id, buyPrice, rarity); - return ResponseEntity.status(201).body(createdContract); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } catch (OverdrawnException e) { - return ResponseEntity.status(403).build(); - } catch (ClassCastException e) { - return ResponseEntity.badRequest().build(); - } + } + + @PostMapping("/users/{user_id}/players/{player_id}/contracts/") + public ResponseEntity createContractByPlayerId( + @PathVariable final Integer user_id, + @PathVariable final Integer player_id, + @RequestBody final Map body) { + try { + Double buyPrice = body.get("buy_price"); + Rarity rarity = Rarity.getRandomRarity(); + Contract createdContract = + contractService.createContract(user_id, player_id, buyPrice, rarity); + return ResponseEntity.status(201).body(createdContract); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); + } catch (OverdrawnException e) { + return ResponseEntity.status(403).build(); + } catch (ClassCastException e) { + return ResponseEntity.badRequest().build(); } - - @PostMapping("/users/{user_id}/contracts/") - public ResponseEntity createContractByRarity( - @PathVariable final Integer user_id, @RequestBody final Map body) { - try { - Double buyPrice = (Double) body.get("buy_price"); - Rarity rarity = Rarity.valueOf((String) body.get("rarity")); - Integer max_player_id = playerService.getAllPlayers().size(); - Integer player_id = - (int) (ThreadLocalRandom.current().nextDouble() * max_player_id) + 1; - Contract createdContract = - contractService.createContract(user_id, player_id, buyPrice, rarity); - return ResponseEntity.status(201).body(createdContract); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } catch (OverdrawnException e) { - return ResponseEntity.status(403).build(); - } catch (ClassCastException e) { - return ResponseEntity.badRequest().build(); - } + } + + @PostMapping("/users/{user_id}/contracts/") + public ResponseEntity createContractByRarity( + @PathVariable final Integer user_id, @RequestBody final Map body) { + try { + Double buyPrice = (Double) body.get("buy_price"); + Rarity rarity = Rarity.valueOf((String) body.get("rarity")); + Integer max_player_id = playerService.getAllPlayers().size(); + Integer player_id = (int) (ThreadLocalRandom.current().nextDouble() * max_player_id) + 1; + Contract createdContract = + contractService.createContract(user_id, player_id, buyPrice, rarity); + return ResponseEntity.status(201).body(createdContract); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); + } catch (OverdrawnException e) { + return ResponseEntity.status(403).build(); + } catch (ClassCastException e) { + return ResponseEntity.badRequest().build(); } - - // Transaction operations - - @GetMapping("/users/{user_id}/transactions/") - public ResponseEntity> getUserTransactions( - @PathVariable final Integer user_id) { - try { - List transactions = transactionService.getTransactionsByUserId(user_id); - return ResponseEntity.ok(transactions); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + } + + // Transaction operations + + @GetMapping("/users/{user_id}/transactions/") + public ResponseEntity> getUserTransactions( + @PathVariable final Integer user_id) { + try { + List transactions = transactionService.getTransactionsByUserId(user_id); + return ResponseEntity.ok(transactions); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } - - @GetMapping("/users/{user_id}/transactions/seller/") - public ResponseEntity> getUserSellerTransactions( - @PathVariable final Integer user_id) { - try { - List transactions = - transactionService.getSellerTransactionsByUserId(user_id); - return ResponseEntity.ok(transactions); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + } + + @GetMapping("/users/{user_id}/transactions/seller/") + public ResponseEntity> getUserSellerTransactions( + @PathVariable final Integer user_id) { + try { + List transactions = transactionService.getSellerTransactionsByUserId(user_id); + return ResponseEntity.ok(transactions); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } - - @GetMapping("/users/{user_id}/transactions/buyer/") - public ResponseEntity> getUserBuyerTransactions( - @PathVariable final Integer user_id) { - try { - List transactions = - transactionService.getBuyerTransactionsByUserId(user_id); - return ResponseEntity.ok(transactions); - } catch (NotFoundException e) { - return ResponseEntity.notFound().build(); - } + } + + @GetMapping("/users/{user_id}/transactions/buyer/") + public ResponseEntity> getUserBuyerTransactions( + @PathVariable final Integer user_id) { + try { + List transactions = transactionService.getBuyerTransactionsByUserId(user_id); + return ResponseEntity.ok(transactions); + } catch (NotFoundException e) { + return ResponseEntity.notFound().build(); } + } } diff --git a/src/main/java/com/appdev/allin/user/UserRepo.java b/src/main/java/com/appdev/allin/user/UserRepo.java index 24a76c7..3926d45 100644 --- a/src/main/java/com/appdev/allin/user/UserRepo.java +++ b/src/main/java/com/appdev/allin/user/UserRepo.java @@ -5,7 +5,7 @@ @Repository public interface UserRepo extends JpaRepository { - User findByUsername(String username); + User findByUsername(String username); - User findByEmail(String email); + User findByEmail(String email); } diff --git a/src/main/java/com/appdev/allin/user/UserService.java b/src/main/java/com/appdev/allin/user/UserService.java index bff80cf..868218a 100644 --- a/src/main/java/com/appdev/allin/user/UserService.java +++ b/src/main/java/com/appdev/allin/user/UserService.java @@ -3,131 +3,127 @@ import com.appdev.allin.exceptions.ForbiddenException; import com.appdev.allin.exceptions.NotFoundException; import com.appdev.allin.utils.Constants; - -import org.springframework.stereotype.Service; -import org.springframework.web.multipart.MultipartFile; - import java.nio.file.Files; import java.nio.file.Path; import java.util.List; import java.util.Optional; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; @Service public class UserService { - private final UserRepo userRepo; + private final UserRepo userRepo; - public UserService(UserRepo userRepo) { - this.userRepo = userRepo; - } + public UserService(UserRepo userRepo) { + this.userRepo = userRepo; + } - public List getAllUsers() { - return userRepo.findAll(); - } + public List getAllUsers() { + return userRepo.findAll(); + } - public User getUserById(final Integer user_id) throws NotFoundException { - Optional userOptional = userRepo.findById(user_id); - if (userOptional.isEmpty()) { - throw new NotFoundException("User with id " + user_id + " not found."); - } - return userOptional.get(); + public User getUserById(final Integer user_id) throws NotFoundException { + Optional userOptional = userRepo.findById(user_id); + if (userOptional.isEmpty()) { + throw new NotFoundException("User with id " + user_id + " not found."); } + return userOptional.get(); + } - public User createUser(final User user) throws ForbiddenException { - User existingUser = userRepo.findByUsername(user.getUsername()); - if (existingUser != null) { - if (existingUser.getEmail().equals(user.getEmail())) { - return existingUser; - } else { - throw new ForbiddenException("Username " + user.getUsername() + " already exists."); - } - } - return userRepo.save(user); + public User createUser(final User user) throws ForbiddenException { + User existingUser = userRepo.findByUsername(user.getUsername()); + if (existingUser != null) { + if (existingUser.getEmail().equals(user.getEmail())) { + return existingUser; + } else { + throw new ForbiddenException("Username " + user.getUsername() + " already exists."); + } } + return userRepo.save(user); + } - public User updateUser(final Integer user_id, final User user) throws NotFoundException { - Optional userOptional = userRepo.findById(user_id); - if (userOptional.isEmpty()) { - throw new NotFoundException("User with id " + user_id + " not found."); - } - User userToUpdate = userOptional.get(); - userToUpdate.setUsername(user.getUsername()); - userToUpdate.setEmail(user.getEmail()); - userToUpdate.setBalance(user.getBalance()); - return userRepo.save(userToUpdate); + public User updateUser(final Integer user_id, final User user) throws NotFoundException { + Optional userOptional = userRepo.findById(user_id); + if (userOptional.isEmpty()) { + throw new NotFoundException("User with id " + user_id + " not found."); } + User userToUpdate = userOptional.get(); + userToUpdate.setUsername(user.getUsername()); + userToUpdate.setEmail(user.getEmail()); + userToUpdate.setBalance(user.getBalance()); + return userRepo.save(userToUpdate); + } - public User deleteUser(final Integer user_id) throws NotFoundException { - Optional userOptional = userRepo.findById(user_id); - if (userOptional.isEmpty()) { - throw new NotFoundException("User with id " + user_id + " not found."); - } - userRepo.deleteById(user_id); - return userOptional.get(); + public User deleteUser(final Integer user_id) throws NotFoundException { + Optional userOptional = userRepo.findById(user_id); + if (userOptional.isEmpty()) { + throw new NotFoundException("User with id " + user_id + " not found."); } + userRepo.deleteById(user_id); + return userOptional.get(); + } - public byte[] getUserImageById(final String uploadDirectory, final String fileName) { - Path uploadPath = Path.of(uploadDirectory); - Path filePath = uploadPath.resolve(fileName); - try { - return Files.readAllBytes(filePath); - } catch (Exception e) { - e.printStackTrace(); - } - return null; + public byte[] getUserImageById(final String uploadDirectory, final String fileName) { + Path uploadPath = Path.of(uploadDirectory); + Path filePath = uploadPath.resolve(fileName); + try { + return Files.readAllBytes(filePath); + } catch (Exception e) { + e.printStackTrace(); } + return null; + } - public byte[] updateUserImageById( - final Integer user_id, final MultipartFile image, final String uploadDirectory) - throws NotFoundException { - Optional userOptional = userRepo.findById(user_id); - if (userOptional.isEmpty()) { - throw new NotFoundException("User with id " + user_id + " not found."); - } - User userToUpdate = userOptional.get(); - String uniqueFileName = user_id + "_" + image.getOriginalFilename(); - Path uploadPath = Path.of(uploadDirectory); - Path filePath = uploadPath.resolve(uniqueFileName); - if (!Files.exists(uploadPath)) { - try { - Files.createDirectories(uploadPath); - } catch (Exception e) { - e.printStackTrace(); - } - } - try { - Files.copy( - image.getInputStream(), - filePath, - java.nio.file.StandardCopyOption.REPLACE_EXISTING); - } catch (Exception e) { - e.printStackTrace(); - } - userToUpdate.setImage(uploadDirectory + uniqueFileName); - userRepo.save(userToUpdate); - return getUserImageById(uploadDirectory, uniqueFileName); + public byte[] updateUserImageById( + final Integer user_id, final MultipartFile image, final String uploadDirectory) + throws NotFoundException { + Optional userOptional = userRepo.findById(user_id); + if (userOptional.isEmpty()) { + throw new NotFoundException("User with id " + user_id + " not found."); + } + User userToUpdate = userOptional.get(); + String uniqueFileName = user_id + "_" + image.getOriginalFilename(); + Path uploadPath = Path.of(uploadDirectory); + Path filePath = uploadPath.resolve(uniqueFileName); + if (!Files.exists(uploadPath)) { + try { + Files.createDirectories(uploadPath); + } catch (Exception e) { + e.printStackTrace(); + } } + try { + Files.copy( + image.getInputStream(), filePath, java.nio.file.StandardCopyOption.REPLACE_EXISTING); + } catch (Exception e) { + e.printStackTrace(); + } + userToUpdate.setImage(uploadDirectory + uniqueFileName); + userRepo.save(userToUpdate); + return getUserImageById(uploadDirectory, uniqueFileName); + } - public byte[] deleteUserImageById(final Integer user_id, final String uploadDirectory) - throws NotFoundException, ForbiddenException { - Optional userOptional = userRepo.findById(user_id); - if (userOptional.isEmpty()) { - throw new NotFoundException("User with id " + user_id + " not found."); - } - User userToUpdate = userOptional.get(); - String image = userToUpdate.getImage(); - if (image.equals(Constants.DEFAULT_USER_IMAGE)) { - throw new ForbiddenException("Cannot delete default image"); - } - Path pathToFile = Path.of(userToUpdate.getImage()); - try { - byte[] deletedImage = Files.readAllBytes(pathToFile); - Files.delete(pathToFile); - userToUpdate.setImage(Constants.DEFAULT_USER_IMAGE); - userRepo.save(userToUpdate); - return deletedImage; - } catch (Exception e) { - e.printStackTrace(); - } - return null; + public byte[] deleteUserImageById(final Integer user_id, final String uploadDirectory) + throws NotFoundException, ForbiddenException { + Optional userOptional = userRepo.findById(user_id); + if (userOptional.isEmpty()) { + throw new NotFoundException("User with id " + user_id + " not found."); + } + User userToUpdate = userOptional.get(); + String image = userToUpdate.getImage(); + if (image.equals(Constants.DEFAULT_USER_IMAGE)) { + throw new ForbiddenException("Cannot delete default image"); + } + Path pathToFile = Path.of(userToUpdate.getImage()); + try { + byte[] deletedImage = Files.readAllBytes(pathToFile); + Files.delete(pathToFile); + userToUpdate.setImage(Constants.DEFAULT_USER_IMAGE); + userRepo.save(userToUpdate); + return deletedImage; + } catch (Exception e) { + e.printStackTrace(); } + return null; + } } diff --git a/src/main/java/com/appdev/allin/utils/Constants.java b/src/main/java/com/appdev/allin/utils/Constants.java index 75a11cc..0ef5454 100644 --- a/src/main/java/com/appdev/allin/utils/Constants.java +++ b/src/main/java/com/appdev/allin/utils/Constants.java @@ -1,10 +1,10 @@ package com.appdev.allin.utils; public class Constants { - private Constants() {} + private Constants() {} - public static final String DEFAULT_USER_IMAGE = - "src/main/resources/static/images/users/default.jpg"; - public static final String DEFAULT_PLAYER_IMAGE = - "src/main/resources/static/images/players/default.jpg"; + public static final String DEFAULT_USER_IMAGE = + "src/main/resources/static/images/users/default.jpg"; + public static final String DEFAULT_PLAYER_IMAGE = + "src/main/resources/static/images/players/default.jpg"; } diff --git a/src/test/java/com/appdev/allin/AllInApplicationTests.java b/src/test/java/com/appdev/allin/AllInApplicationTests.java index 3fa5041..a034bae 100644 --- a/src/test/java/com/appdev/allin/AllInApplicationTests.java +++ b/src/test/java/com/appdev/allin/AllInApplicationTests.java @@ -2,6 +2,7 @@ import static org.mockito.Mockito.mock; +import com.appdev.allin.contract.BasketballContractGenerator; import com.appdev.allin.contract.Contract; import com.appdev.allin.contract.ContractGenerator; import com.appdev.allin.contract.Rarity; @@ -9,133 +10,125 @@ import com.appdev.allin.player.Position; import com.appdev.allin.playerData.PlayerDataRepo; import com.appdev.allin.user.User; - import org.junit.jupiter.api.Test; -import com.appdev.allin.contract.BasketballContractGenerator; - class AllInApplicationTests { - @Test - public void testGenerateContract() { + @Test + public void testGenerateContract() { - PlayerDataRepo playerDataRepo = mock(PlayerDataRepo.class); - ContractGenerator contractGenerator = new BasketballContractGenerator(playerDataRepo); + PlayerDataRepo playerDataRepo = mock(PlayerDataRepo.class); + ContractGenerator contractGenerator = new BasketballContractGenerator(playerDataRepo); - System.out.println("Testing ContractGenerator.generateContract()"); - System.out.println( - "Common Probability Threshold: " + ContractGenerator.COMMON_PROBABILITY_THRESHOLD); - System.out.println( - "Rare Probability Threshold: " + ContractGenerator.RARE_PROBABILITY_THRESHOLD); - System.out.println( - "Epic Probability Threshold: " + ContractGenerator.EPIC_PROBABILITY_THRESHOLD); - System.out.println( - "Legendary Probability Threshold: " - + ContractGenerator.LEGENDARY_PROBABILITY_THRESHOLD - + "\n\n"); + System.out.println("Testing ContractGenerator.generateContract()"); + System.out.println( + "Common Probability Threshold: " + ContractGenerator.COMMON_PROBABILITY_THRESHOLD); + System.out.println( + "Rare Probability Threshold: " + ContractGenerator.RARE_PROBABILITY_THRESHOLD); + System.out.println( + "Epic Probability Threshold: " + ContractGenerator.EPIC_PROBABILITY_THRESHOLD); + System.out.println( + "Legendary Probability Threshold: " + + ContractGenerator.LEGENDARY_PROBABILITY_THRESHOLD + + "\n\n"); - ContractGenerator.generateBounds(); + ContractGenerator.generateBounds(); - System.out.println("Printing Probability and Payout Ranges\n"); - System.out.println( - "Common Probability: [" - + ContractGenerator.COMMON_PROB_LOWER_BOUND - + ", " - + ContractGenerator.COMMON_PROB_UPPER_BOUND - + "]"); - System.out.println( - "Common Payout: [" - + ContractGenerator.COMMON_PAYOUT_LOWER_BOUND - + ", " - + ContractGenerator.COMMON_PAYOUT_UPPER_BOUND - + "]\n"); - System.out.println( - "Rare Probability: [" - + ContractGenerator.RARE_PROB_LOWER_BOUND - + ", " - + ContractGenerator.RARE_PROB_UPPER_BOUND - + "]"); - System.out.println( - "Rare Payout: [" - + ContractGenerator.RARE_PAYOUT_LOWER_BOUND - + ", " - + ContractGenerator.RARE_PAYOUT_UPPER_BOUND - + "]\n"); - System.out.println( - "Epic Probability: [" - + ContractGenerator.EPIC_PROB_LOWER_BOUND - + ", " - + ContractGenerator.EPIC_PROB_UPPER_BOUND - + "]"); - System.out.println( - "Epic Payout: [" - + ContractGenerator.EPIC_PAYOUT_LOWER_BOUND - + ", " - + ContractGenerator.EPIC_PAYOUT_UPPER_BOUND - + "]\n"); - System.out.println( - "Legendary Probability: [" - + ContractGenerator.LEGENDARY_PROB_LOWER_BOUND - + ", " - + ContractGenerator.LEGENDARY_PROB_UPPER_BOUND - + "]"); - System.out.println( - "Legendary Payout: [" - + ContractGenerator.LEGENDARY_PAYOUT_LOWER_BOUND - + ", " - + ContractGenerator.LEGENDARY_PAYOUT_UPPER_BOUND - + "]\n"); + System.out.println("Printing Probability and Payout Ranges\n"); + System.out.println( + "Common Probability: [" + + ContractGenerator.COMMON_PROB_LOWER_BOUND + + ", " + + ContractGenerator.COMMON_PROB_UPPER_BOUND + + "]"); + System.out.println( + "Common Payout: [" + + ContractGenerator.COMMON_PAYOUT_LOWER_BOUND + + ", " + + ContractGenerator.COMMON_PAYOUT_UPPER_BOUND + + "]\n"); + System.out.println( + "Rare Probability: [" + + ContractGenerator.RARE_PROB_LOWER_BOUND + + ", " + + ContractGenerator.RARE_PROB_UPPER_BOUND + + "]"); + System.out.println( + "Rare Payout: [" + + ContractGenerator.RARE_PAYOUT_LOWER_BOUND + + ", " + + ContractGenerator.RARE_PAYOUT_UPPER_BOUND + + "]\n"); + System.out.println( + "Epic Probability: [" + + ContractGenerator.EPIC_PROB_LOWER_BOUND + + ", " + + ContractGenerator.EPIC_PROB_UPPER_BOUND + + "]"); + System.out.println( + "Epic Payout: [" + + ContractGenerator.EPIC_PAYOUT_LOWER_BOUND + + ", " + + ContractGenerator.EPIC_PAYOUT_UPPER_BOUND + + "]\n"); + System.out.println( + "Legendary Probability: [" + + ContractGenerator.LEGENDARY_PROB_LOWER_BOUND + + ", " + + ContractGenerator.LEGENDARY_PROB_UPPER_BOUND + + "]"); + System.out.println( + "Legendary Payout: [" + + ContractGenerator.LEGENDARY_PAYOUT_LOWER_BOUND + + ", " + + ContractGenerator.LEGENDARY_PAYOUT_UPPER_BOUND + + "]\n"); - double common_alpha = - (ContractGenerator.COMMON_PROB_UPPER_BOUND - + ContractGenerator.COMMON_PROB_LOWER_BOUND) - * (ContractGenerator.COMMON_PAYOUT_UPPER_BOUND - + ContractGenerator.COMMON_PAYOUT_LOWER_BOUND) - / 4.0; - double rare_alpha = - (ContractGenerator.RARE_PROB_UPPER_BOUND + ContractGenerator.RARE_PROB_LOWER_BOUND) - * (ContractGenerator.RARE_PAYOUT_UPPER_BOUND - + ContractGenerator.RARE_PAYOUT_LOWER_BOUND) - / 4.0; - double epic_alpha = - (ContractGenerator.EPIC_PROB_UPPER_BOUND + ContractGenerator.EPIC_PROB_LOWER_BOUND) - * (ContractGenerator.EPIC_PAYOUT_UPPER_BOUND - + ContractGenerator.EPIC_PAYOUT_LOWER_BOUND) - / 4.0; - double legendary_alpha = - (ContractGenerator.LEGENDARY_PROB_UPPER_BOUND - + ContractGenerator.LEGENDARY_PROB_LOWER_BOUND) - * (ContractGenerator.LEGENDARY_PAYOUT_UPPER_BOUND - + ContractGenerator.LEGENDARY_PAYOUT_LOWER_BOUND) - / 4.0; + double common_alpha = + (ContractGenerator.COMMON_PROB_UPPER_BOUND + ContractGenerator.COMMON_PROB_LOWER_BOUND) + * (ContractGenerator.COMMON_PAYOUT_UPPER_BOUND + + ContractGenerator.COMMON_PAYOUT_LOWER_BOUND) + / 4.0; + double rare_alpha = + (ContractGenerator.RARE_PROB_UPPER_BOUND + ContractGenerator.RARE_PROB_LOWER_BOUND) + * (ContractGenerator.RARE_PAYOUT_UPPER_BOUND + + ContractGenerator.RARE_PAYOUT_LOWER_BOUND) + / 4.0; + double epic_alpha = + (ContractGenerator.EPIC_PROB_UPPER_BOUND + ContractGenerator.EPIC_PROB_LOWER_BOUND) + * (ContractGenerator.EPIC_PAYOUT_UPPER_BOUND + + ContractGenerator.EPIC_PAYOUT_LOWER_BOUND) + / 4.0; + double legendary_alpha = + (ContractGenerator.LEGENDARY_PROB_UPPER_BOUND + + ContractGenerator.LEGENDARY_PROB_LOWER_BOUND) + * (ContractGenerator.LEGENDARY_PAYOUT_UPPER_BOUND + + ContractGenerator.LEGENDARY_PAYOUT_LOWER_BOUND) + / 4.0; - System.out.println("Alphas:"); - System.out.println("Common: " + common_alpha); - System.out.println("Rare: " + rare_alpha); - System.out.println("Epic: " + epic_alpha); - System.out.println("Legendary: " + legendary_alpha + "\n"); + System.out.println("Alphas:"); + System.out.println("Common: " + common_alpha); + System.out.println("Rare: " + rare_alpha); + System.out.println("Epic: " + epic_alpha); + System.out.println("Legendary: " + legendary_alpha + "\n"); - System.out.println("Generating a Contract\n"); + System.out.println("Generating a Contract\n"); - User user = - new User( - "Tony", - "akm99", - "src/main/resources/static/images/users/default.jpg", - 1000.0); - Player player = - new Player( - "LeBron", - "James", - new Position[] {Position.Center}, - 23, - "6'9", - 250, - "Akron, OH", - "St. Vincent-St. Mary", - "src/main/resources/static/images/players/default.jpg"); + User user = + new User("Tony", "akm99", "src/main/resources/static/images/users/default.jpg", 1000.0); + Player player = + new Player( + "LeBron", + "James", + new Position[] {Position.Center}, + 23, + "6'9", + 250, + "Akron, OH", + "St. Vincent-St. Mary", + "src/main/resources/static/images/players/default.jpg"); - Contract contract = contractGenerator.generateContract(user, player, 100.0, Rarity.Common); - System.out.println("Contract: " + contract.toString()); - } + Contract contract = contractGenerator.generateContract(user, player, 100.0, Rarity.Common); + System.out.println("Contract: " + contract.toString()); + } } diff --git a/src/test/java/com/appdev/allin/ContractGeneratorTest.java b/src/test/java/com/appdev/allin/ContractGeneratorTest.java index 1f60749..838008c 100644 --- a/src/test/java/com/appdev/allin/ContractGeneratorTest.java +++ b/src/test/java/com/appdev/allin/ContractGeneratorTest.java @@ -2,6 +2,7 @@ import static org.mockito.Mockito.mock; +import com.appdev.allin.contract.BasketballContractGenerator; import com.appdev.allin.contract.Contract; import com.appdev.allin.contract.ContractGenerator; import com.appdev.allin.contract.Rarity; @@ -9,132 +10,124 @@ import com.appdev.allin.player.Position; import com.appdev.allin.playerData.PlayerDataRepo; import com.appdev.allin.user.User; - import org.junit.jupiter.api.Test; -import com.appdev.allin.contract.BasketballContractGenerator; - class ContractGeneratorTest { - @Test - public void testGenerateContract() { + @Test + public void testGenerateContract() { - PlayerDataRepo playerDataRepo = mock(PlayerDataRepo.class); - ContractGenerator contractGenerator = new BasketballContractGenerator(playerDataRepo); + PlayerDataRepo playerDataRepo = mock(PlayerDataRepo.class); + ContractGenerator contractGenerator = new BasketballContractGenerator(playerDataRepo); - System.out.println("Testing ContractGenerator.generateContract()"); - System.out.println( - "Common Probability Threshold: " + ContractGenerator.COMMON_PROBABILITY_THRESHOLD); - System.out.println( - "Rare Probability Threshold: " + ContractGenerator.RARE_PROBABILITY_THRESHOLD); - System.out.println( - "Epic Probability Threshold: " + ContractGenerator.EPIC_PROBABILITY_THRESHOLD); - System.out.println( - "Legendary Probability Threshold: " - + ContractGenerator.LEGENDARY_PROBABILITY_THRESHOLD - + "\n\n"); + System.out.println("Testing ContractGenerator.generateContract()"); + System.out.println( + "Common Probability Threshold: " + ContractGenerator.COMMON_PROBABILITY_THRESHOLD); + System.out.println( + "Rare Probability Threshold: " + ContractGenerator.RARE_PROBABILITY_THRESHOLD); + System.out.println( + "Epic Probability Threshold: " + ContractGenerator.EPIC_PROBABILITY_THRESHOLD); + System.out.println( + "Legendary Probability Threshold: " + + ContractGenerator.LEGENDARY_PROBABILITY_THRESHOLD + + "\n\n"); - ContractGenerator.generateBounds(); + ContractGenerator.generateBounds(); - System.out.println("Printing Probability and Payout Ranges\n"); - System.out.println( - "Common Probability: [" - + ContractGenerator.COMMON_PROB_LOWER_BOUND - + ", " - + ContractGenerator.COMMON_PROB_UPPER_BOUND - + "]"); - System.out.println( - "Common Payout: [" - + ContractGenerator.COMMON_PAYOUT_LOWER_BOUND - + ", " - + ContractGenerator.COMMON_PAYOUT_UPPER_BOUND - + "]\n"); - System.out.println( - "Rare Probability: [" - + ContractGenerator.RARE_PROB_LOWER_BOUND - + ", " - + ContractGenerator.RARE_PROB_UPPER_BOUND - + "]"); - System.out.println( - "Rare Payout: [" - + ContractGenerator.RARE_PAYOUT_LOWER_BOUND - + ", " - + ContractGenerator.RARE_PAYOUT_UPPER_BOUND - + "]\n"); - System.out.println( - "Epic Probability: [" - + ContractGenerator.EPIC_PROB_LOWER_BOUND - + ", " - + ContractGenerator.EPIC_PROB_UPPER_BOUND - + "]"); - System.out.println( - "Epic Payout: [" - + ContractGenerator.EPIC_PAYOUT_LOWER_BOUND - + ", " - + ContractGenerator.EPIC_PAYOUT_UPPER_BOUND - + "]\n"); - System.out.println( - "Legendary Probability: [" - + ContractGenerator.LEGENDARY_PROB_LOWER_BOUND - + ", " - + ContractGenerator.LEGENDARY_PROB_UPPER_BOUND - + "]"); - System.out.println( - "Legendary Payout: [" - + ContractGenerator.LEGENDARY_PAYOUT_LOWER_BOUND - + ", " - + ContractGenerator.LEGENDARY_PAYOUT_UPPER_BOUND - + "]\n"); + System.out.println("Printing Probability and Payout Ranges\n"); + System.out.println( + "Common Probability: [" + + ContractGenerator.COMMON_PROB_LOWER_BOUND + + ", " + + ContractGenerator.COMMON_PROB_UPPER_BOUND + + "]"); + System.out.println( + "Common Payout: [" + + ContractGenerator.COMMON_PAYOUT_LOWER_BOUND + + ", " + + ContractGenerator.COMMON_PAYOUT_UPPER_BOUND + + "]\n"); + System.out.println( + "Rare Probability: [" + + ContractGenerator.RARE_PROB_LOWER_BOUND + + ", " + + ContractGenerator.RARE_PROB_UPPER_BOUND + + "]"); + System.out.println( + "Rare Payout: [" + + ContractGenerator.RARE_PAYOUT_LOWER_BOUND + + ", " + + ContractGenerator.RARE_PAYOUT_UPPER_BOUND + + "]\n"); + System.out.println( + "Epic Probability: [" + + ContractGenerator.EPIC_PROB_LOWER_BOUND + + ", " + + ContractGenerator.EPIC_PROB_UPPER_BOUND + + "]"); + System.out.println( + "Epic Payout: [" + + ContractGenerator.EPIC_PAYOUT_LOWER_BOUND + + ", " + + ContractGenerator.EPIC_PAYOUT_UPPER_BOUND + + "]\n"); + System.out.println( + "Legendary Probability: [" + + ContractGenerator.LEGENDARY_PROB_LOWER_BOUND + + ", " + + ContractGenerator.LEGENDARY_PROB_UPPER_BOUND + + "]"); + System.out.println( + "Legendary Payout: [" + + ContractGenerator.LEGENDARY_PAYOUT_LOWER_BOUND + + ", " + + ContractGenerator.LEGENDARY_PAYOUT_UPPER_BOUND + + "]\n"); - double common_alpha = - (ContractGenerator.COMMON_PROB_UPPER_BOUND - + ContractGenerator.COMMON_PROB_LOWER_BOUND) - * (ContractGenerator.COMMON_PAYOUT_UPPER_BOUND - + ContractGenerator.COMMON_PAYOUT_LOWER_BOUND) - / 4.0; - double rare_alpha = - (ContractGenerator.RARE_PROB_UPPER_BOUND + ContractGenerator.RARE_PROB_LOWER_BOUND) - * (ContractGenerator.RARE_PAYOUT_UPPER_BOUND - + ContractGenerator.RARE_PAYOUT_LOWER_BOUND) - / 4.0; - double epic_alpha = - (ContractGenerator.EPIC_PROB_UPPER_BOUND + ContractGenerator.EPIC_PROB_LOWER_BOUND) - * (ContractGenerator.EPIC_PAYOUT_UPPER_BOUND - + ContractGenerator.EPIC_PAYOUT_LOWER_BOUND) - / 4.0; - double legendary_alpha = - (ContractGenerator.LEGENDARY_PROB_UPPER_BOUND - + ContractGenerator.LEGENDARY_PROB_LOWER_BOUND) - * (ContractGenerator.LEGENDARY_PAYOUT_UPPER_BOUND - + ContractGenerator.LEGENDARY_PAYOUT_LOWER_BOUND) - / 4.0; + double common_alpha = + (ContractGenerator.COMMON_PROB_UPPER_BOUND + ContractGenerator.COMMON_PROB_LOWER_BOUND) + * (ContractGenerator.COMMON_PAYOUT_UPPER_BOUND + + ContractGenerator.COMMON_PAYOUT_LOWER_BOUND) + / 4.0; + double rare_alpha = + (ContractGenerator.RARE_PROB_UPPER_BOUND + ContractGenerator.RARE_PROB_LOWER_BOUND) + * (ContractGenerator.RARE_PAYOUT_UPPER_BOUND + + ContractGenerator.RARE_PAYOUT_LOWER_BOUND) + / 4.0; + double epic_alpha = + (ContractGenerator.EPIC_PROB_UPPER_BOUND + ContractGenerator.EPIC_PROB_LOWER_BOUND) + * (ContractGenerator.EPIC_PAYOUT_UPPER_BOUND + + ContractGenerator.EPIC_PAYOUT_LOWER_BOUND) + / 4.0; + double legendary_alpha = + (ContractGenerator.LEGENDARY_PROB_UPPER_BOUND + + ContractGenerator.LEGENDARY_PROB_LOWER_BOUND) + * (ContractGenerator.LEGENDARY_PAYOUT_UPPER_BOUND + + ContractGenerator.LEGENDARY_PAYOUT_LOWER_BOUND) + / 4.0; - System.out.println("Alphas:"); - System.out.println("Common: " + common_alpha); - System.out.println("Rare: " + rare_alpha); - System.out.println("Epic: " + epic_alpha); - System.out.println("Legendary: " + legendary_alpha + "\n"); + System.out.println("Alphas:"); + System.out.println("Common: " + common_alpha); + System.out.println("Rare: " + rare_alpha); + System.out.println("Epic: " + epic_alpha); + System.out.println("Legendary: " + legendary_alpha + "\n"); - System.out.println("Generating a Contract\n"); + System.out.println("Generating a Contract\n"); - User user = - new User( - "Tony", - "akm99", - "src/main/resources/static/images/users/default.jpg", - 1000.0); - Player player = - new Player( - "LeBron", - "James", - new Position[] {Position.Center}, - 23, - "6'9", - 250, - "Akron, OH", - "St. Vincent-St. Mary", - "src/main/resources/static/images/players/default.jpg"); - Contract contract = contractGenerator.generateContract(user, player, 100.0, Rarity.Common); - System.out.println("Contract: " + contract.toString()); - } + User user = + new User("Tony", "akm99", "src/main/resources/static/images/users/default.jpg", 1000.0); + Player player = + new Player( + "LeBron", + "James", + new Position[] {Position.Center}, + 23, + "6'9", + 250, + "Akron, OH", + "St. Vincent-St. Mary", + "src/main/resources/static/images/players/default.jpg"); + Contract contract = contractGenerator.generateContract(user, player, 100.0, Rarity.Common); + System.out.println("Contract: " + contract.toString()); + } } diff --git a/src/test/java/com/appdev/allin/data/ContractFactory.java b/src/test/java/com/appdev/allin/data/ContractFactory.java index 99b2482..d4e6107 100644 --- a/src/test/java/com/appdev/allin/data/ContractFactory.java +++ b/src/test/java/com/appdev/allin/data/ContractFactory.java @@ -1,74 +1,105 @@ package com.appdev.allin.data; + +import com.appdev.allin.contract.Contract; +import com.appdev.allin.contract.Event; import com.appdev.allin.contract.OpposingTeam; import com.appdev.allin.contract.Rarity; -import com.appdev.allin.user.User; import com.appdev.allin.player.Player; -import com.appdev.allin.contract.Contract; -import com.appdev.allin.contract.Event; -import com.appdev.allin.data.PlayerFactory; -import com.appdev.allin.user.UserRepo; +import com.appdev.allin.user.User; import com.appdev.allin.user.UserService; import com.github.javafaker.Faker; - import java.time.LocalDate; import java.util.List; import java.util.Random; import org.springframework.beans.factory.annotation.Autowired; -//needs tests +// needs tests public class ContractFactory { - private static final Faker faker = new Faker(); - private final Random random = new Random(); - - private static final PlayerFactory playerFactory = new PlayerFactory(); + private static final Faker faker = new Faker(); + private final Random random = new Random(); - private final UserFactory userFactory = new UserFactory(); + private static final PlayerFactory playerFactory = new PlayerFactory(); - @Autowired UserService userService; + private final UserFactory userFactory = new UserFactory(); + @Autowired UserService userService; + public Contract createRandomContract(User owner) { + Player player = playerFactory.createFakePlayer(); + Double buyPrice = + faker.number().randomDouble(2, 100, 5000); // Random buy price between 100 and 5000 + Rarity rarity = Rarity.getRandomRarity(); // Random rarity + OpposingTeam opposingTeam = OpposingTeam.getRandomOpposingTeam(); + String opposingTeamImage = faker.internet().avatar(); // Random image URL + Event event = Event.getRandomEvent(); + Integer eventThreshold = + faker.number().numberBetween(1, 100); // Random event threshold between 1 and 100 + LocalDate creationTime = + LocalDate.now().minusDays(faker.number().numberBetween(1, 365)); // Within the past year + Double value = faker.number().randomDouble(2, 100, 5000); // Random value between 100 and 5000 + Boolean expired = faker.bool().bool(); + Boolean forSale = faker.bool().bool(); + Double sellPrice = + forSale + ? faker.number().randomDouble(2, 100, 5000) + : null; // If for sale, random sell price + return new Contract( + player, + owner, + buyPrice, + rarity, + opposingTeam, + opposingTeamImage, + event, + eventThreshold, + creationTime, + value, + expired, + forSale, + sellPrice); + } - public Contract createRandomContract(User owner) { - Player player = playerFactory.createFakePlayer(); - Double buyPrice = faker.number().randomDouble(2, 100, 5000); // Random buy price between 100 and 5000 - Rarity rarity = Rarity.getRandomRarity(); // Random rarity - OpposingTeam opposingTeam = OpposingTeam.getRandomOpposingTeam(); - String opposingTeamImage = faker.internet().avatar(); // Random image URL - Event event = Event.getRandomEvent(); - Integer eventThreshold = faker.number().numberBetween(1, 100); // Random event threshold between 1 and 100 - LocalDate creationTime = LocalDate.now().minusDays(faker.number().numberBetween(1, 365)); // Within the past year - Double value = faker.number().randomDouble(2, 100, 5000); // Random value between 100 and 5000 - Boolean expired = faker.bool().bool(); - Boolean forSale = faker.bool().bool(); - Double sellPrice = forSale ? faker.number().randomDouble(2, 100, 5000) : null; // If for sale, random sell price - - return new Contract(player, owner, buyPrice, rarity, opposingTeam, opposingTeamImage, event, eventThreshold, - creationTime, value, expired, forSale, sellPrice); + public Contract createRandomContract() throws Exception { + Player player = playerFactory.createFakePlayer(); + List users = userService.getAllUsers(); + User owner; + if (users.isEmpty()) { + throw new Exception("No initialized users!"); + } else { + owner = users.get(0); } - public Contract createRandomContract() throws Exception { - Player player = playerFactory.createFakePlayer(); - List users = userService.getAllUsers(); - User owner; - if (users.isEmpty()){ - throw new Exception("No initialized users!"); - }else{ - owner = users.get(0); - } - Double buyPrice = faker.number().randomDouble(2, 100, 5000); // Random buy price between 100 and 5000 - Rarity rarity = Rarity.getRandomRarity(); // Random rarity - OpposingTeam opposingTeam = OpposingTeam.getRandomOpposingTeam(); - String opposingTeamImage = faker.internet().avatar(); // Random image URL - Event event = Event.getRandomEvent(); - Integer eventThreshold = faker.number().numberBetween(1, 100); // Random event threshold between 1 and 100 - LocalDate creationTime = LocalDate.now().minusDays(faker.number().numberBetween(1, 365)); // Within the past year - Double value = faker.number().randomDouble(2, 100, 5000); // Random value between 100 and 5000 - Boolean expired = faker.bool().bool(); - Boolean forSale = faker.bool().bool(); - Double sellPrice = forSale ? faker.number().randomDouble(2, 100, 5000) : null; // If for sale, random sell price + Double buyPrice = + faker.number().randomDouble(2, 100, 5000); // Random buy price between 100 and 5000 + Rarity rarity = Rarity.getRandomRarity(); // Random rarity + OpposingTeam opposingTeam = OpposingTeam.getRandomOpposingTeam(); + String opposingTeamImage = faker.internet().avatar(); // Random image URL + Event event = Event.getRandomEvent(); + Integer eventThreshold = + faker.number().numberBetween(1, 100); // Random event threshold between 1 and 100 + LocalDate creationTime = + LocalDate.now().minusDays(faker.number().numberBetween(1, 365)); // Within the past year + Double value = faker.number().randomDouble(2, 100, 5000); // Random value between 100 and 5000 + Boolean expired = faker.bool().bool(); + Boolean forSale = faker.bool().bool(); + Double sellPrice = + forSale + ? faker.number().randomDouble(2, 100, 5000) + : null; // If for sale, random sell price - return new Contract(player, owner, buyPrice, rarity, opposingTeam, opposingTeamImage, event, eventThreshold, - creationTime, value, expired, forSale, sellPrice); - } + return new Contract( + player, + owner, + buyPrice, + rarity, + opposingTeam, + opposingTeamImage, + event, + eventThreshold, + creationTime, + value, + expired, + forSale, + sellPrice); + } } - diff --git a/src/test/java/com/appdev/allin/data/PlayerDataFactory.java b/src/test/java/com/appdev/allin/data/PlayerDataFactory.java index d0dbe46..c38c433 100644 --- a/src/test/java/com/appdev/allin/data/PlayerDataFactory.java +++ b/src/test/java/com/appdev/allin/data/PlayerDataFactory.java @@ -1,32 +1,48 @@ package com.appdev.allin.data; -import com.appdev.allin.player.Player; + import com.appdev.allin.contract.OpposingTeam; +import com.appdev.allin.player.Player; import com.appdev.allin.playerData.PlayerData; import com.github.javafaker.Faker; - import java.time.LocalDate; import java.util.Random; -//need to test this +// need to test this public class PlayerDataFactory { - private static final Faker faker = new Faker(); - private final Random random = new Random(); + private static final Faker faker = new Faker(); + private final Random random = new Random(); - public static PlayerData createRandomPlayerData(Player player, OpposingTeam opposingTeam) { - LocalDate gameDate = LocalDate.now().minusDays(faker.number().numberBetween(1, 365)); // Random date within the past year - Integer points = faker.number().numberBetween(0, 50); // Points scored - Integer minutes = faker.number().numberBetween(10, 48); // Minutes played - Integer fieldGoals = faker.number().numberBetween(0, points / 2); // Field goals made (estimate based on points) - Integer threePointers = faker.number().numberBetween(0, fieldGoals / 3); // Three-pointers made - Integer freeThrows = faker.number().numberBetween(0, points - fieldGoals * 2); // Free throws - Integer rebounds = faker.number().numberBetween(0, 15); - Integer assists = faker.number().numberBetween(0, 15); - Integer steals = faker.number().numberBetween(0, 5); - Integer blocks = faker.number().numberBetween(0, 5); - Integer turnovers = faker.number().numberBetween(0, 7); - Integer fouls = faker.number().numberBetween(0, 5); + public static PlayerData createRandomPlayerData(Player player, OpposingTeam opposingTeam) { + LocalDate gameDate = + LocalDate.now() + .minusDays(faker.number().numberBetween(1, 365)); // Random date within the past year + Integer points = faker.number().numberBetween(0, 50); // Points scored + Integer minutes = faker.number().numberBetween(10, 48); // Minutes played + Integer fieldGoals = + faker.number().numberBetween(0, points / 2); // Field goals made (estimate based on points) + Integer threePointers = faker.number().numberBetween(0, fieldGoals / 3); // Three-pointers made + Integer freeThrows = faker.number().numberBetween(0, points - fieldGoals * 2); // Free throws + Integer rebounds = faker.number().numberBetween(0, 15); + Integer assists = faker.number().numberBetween(0, 15); + Integer steals = faker.number().numberBetween(0, 5); + Integer blocks = faker.number().numberBetween(0, 5); + Integer turnovers = faker.number().numberBetween(0, 7); + Integer fouls = faker.number().numberBetween(0, 5); - return new PlayerData(player, gameDate, opposingTeam, points, minutes, fieldGoals, threePointers, freeThrows, - rebounds, assists, steals, blocks, turnovers, fouls); - } + return new PlayerData( + player, + gameDate, + opposingTeam, + points, + minutes, + fieldGoals, + threePointers, + freeThrows, + rebounds, + assists, + steals, + blocks, + turnovers, + fouls); + } } diff --git a/src/test/java/com/appdev/allin/data/PlayerFactory.java b/src/test/java/com/appdev/allin/data/PlayerFactory.java index fcfdafb..054f87b 100644 --- a/src/test/java/com/appdev/allin/data/PlayerFactory.java +++ b/src/test/java/com/appdev/allin/data/PlayerFactory.java @@ -1,41 +1,41 @@ package com.appdev.allin.data; + import com.appdev.allin.player.Player; import com.appdev.allin.player.Position; import com.github.javafaker.Faker; import java.util.Random; - public class PlayerFactory { private static final Faker faker = new Faker(); private static final Random random = new Random(); - public static Player createFakePlayer() { String firstName = faker.name().firstName(); String lastName = faker.name().lastName(); Position[] positions = generateRandomPositions(); - Integer number = faker.number().numberBetween(1, 99); // Jersey numbers typically range from 1-99 + Integer number = + faker.number().numberBetween(1, 99); // Jersey numbers typically range from 1-99 String height = generateRandomHeight(); - Integer weight = faker.number().numberBetween(150, 250); // Weight in pounds, adjustable as needed + Integer weight = + faker.number().numberBetween(150, 250); // Weight in pounds, adjustable as needed String hometown = faker.address().city() + ", " + faker.address().state(); String highSchool = faker.educator().secondarySchool(); - return new Player(firstName, lastName, positions, number, height, weight, hometown, highSchool); - } + return new Player(firstName, lastName, positions, number, height, weight, hometown, highSchool); + } private static Position[] generateRandomPositions() { - Position[] allPositions = Position.values(); - int count = random.nextInt(2) + 1; // Players can have 1 or 2 positions - Position[] positions = new Position[count]; - for (int i = 0; i < count; i++) { - positions[i] = allPositions[random.nextInt(allPositions.length)]; - } - return positions; + Position[] allPositions = Position.values(); + int count = random.nextInt(2) + 1; // Players can have 1 or 2 positions + Position[] positions = new Position[count]; + for (int i = 0; i < count; i++) { + positions[i] = allPositions[random.nextInt(allPositions.length)]; + } + return positions; } private static String generateRandomHeight() { int feet = faker.number().numberBetween(5, 7); // Heights between 5 and 7 feet int inches = faker.number().numberBetween(0, 11); return feet + "'" + inches + "\""; -} - + } } diff --git a/src/test/java/com/appdev/allin/data/TransactionFactory.java b/src/test/java/com/appdev/allin/data/TransactionFactory.java index bc17b75..0fd4403 100644 --- a/src/test/java/com/appdev/allin/data/TransactionFactory.java +++ b/src/test/java/com/appdev/allin/data/TransactionFactory.java @@ -1,32 +1,32 @@ package com.appdev.allin.data; -import com.appdev.allin.transaction.Transaction; -import com.appdev.allin.user.User; + import com.appdev.allin.contract.Contract; -import com.appdev.allin.data.PlayerFactory; import com.appdev.allin.player.Player; -import com.appdev.allin.data.ContractFactory; +import com.appdev.allin.transaction.Transaction; +import com.appdev.allin.user.User; import com.github.javafaker.Faker; - import java.time.LocalDate; -//needs tests +// needs tests public class TransactionFactory { - private final Faker faker = new Faker(); - private final UserFactory userFactory = new UserFactory(); - private final ContractFactory contractFactory = new ContractFactory(); + private final Faker faker = new Faker(); + private final UserFactory userFactory = new UserFactory(); + private final ContractFactory contractFactory = new ContractFactory(); - public Transaction createRandomTransaction() { - User seller = userFactory.createRandomUser(); - User buyer = userFactory.createRandomUser(); - while (buyer.equals(seller)) { // Ensure buyer and seller are different - buyer = userFactory.createRandomUser(); - } - Player player = PlayerFactory.createFakePlayer(); + public Transaction createRandomTransaction() { + User seller = userFactory.createRandomUser(); + User buyer = userFactory.createRandomUser(); + while (buyer.equals(seller)) { // Ensure buyer and seller are different + buyer = userFactory.createRandomUser(); + } + Player player = PlayerFactory.createFakePlayer(); - Contract contract = contractFactory.createRandomContract(seller); - LocalDate transactionDate = LocalDate.now().minusDays(faker.number().numberBetween(1, 365)); // Date within the past year - Double price = faker.number().randomDouble(2, 100, 10000); // Random price between 100 and 10000 + Contract contract = contractFactory.createRandomContract(seller); + LocalDate transactionDate = + LocalDate.now() + .minusDays(faker.number().numberBetween(1, 365)); // Date within the past year + Double price = faker.number().randomDouble(2, 100, 10000); // Random price between 100 and 10000 - return new Transaction(seller, buyer, contract, transactionDate, price); - } + return new Transaction(seller, buyer, contract, transactionDate, price); + } } diff --git a/src/test/java/com/appdev/allin/data/UserFactory.java b/src/test/java/com/appdev/allin/data/UserFactory.java index 4545974..e4f3fb3 100644 --- a/src/test/java/com/appdev/allin/data/UserFactory.java +++ b/src/test/java/com/appdev/allin/data/UserFactory.java @@ -1,16 +1,17 @@ package com.appdev.allin.data; + import com.appdev.allin.user.User; import com.github.javafaker.Faker; public class UserFactory { - private static final Faker faker = new Faker(); + private static final Faker faker = new Faker(); - public static User createRandomUser() { - String username = faker.name().username(); - String email = faker.internet().emailAddress(); - String image = faker.internet().avatar(); - Double balance = faker.number().randomDouble(2, 10, 1000); + public static User createRandomUser() { + String username = faker.name().username(); + String email = faker.internet().emailAddress(); + String image = faker.internet().avatar(); + Double balance = faker.number().randomDouble(2, 10, 1000); - return new User(username, email, image, balance); - } + return new User(username, email, image, balance); + } }