diff --git a/docker-compose.yaml b/docker-compose.yaml index 4bc8da635b628ba84803ac1ba30a73e2e5c5997e..c42b75815ca0c1915a336b63ae3e4fb4636192df 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -26,5 +26,5 @@ services: MONGO_INITDB_ROOT_USERNAME: alhb MONGO_INITDB_ROOT_PASSWORD: asdasd123 ports: - - 27018:27017 + - 27017:27017 diff --git a/sth-backend/pom.xml b/sth-backend/pom.xml index 539b22fe07c9d786494a8053c653dd92db1b1414..a8a7dfccec988293fe8b2be0e07959e229ea8d7e 100644 --- a/sth-backend/pom.xml +++ b/sth-backend/pom.xml @@ -20,6 +20,7 @@ <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> + <version>3.2.1</version> </dependency> <dependency> <groupId>org.mockito</groupId> @@ -71,8 +72,12 @@ <artifactId>junit</artifactId> <scope>test</scope> </dependency> - - </dependencies> + <dependency> + <groupId>org.springdoc</groupId> + <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> + <version>2.3.0</version> + </dependency> + </dependencies> <build> <plugins> diff --git a/sth-backend/src/main/java/hdm/mi/sthbackend/SthBackendApplication.java b/sth-backend/src/main/java/hdm/mi/sthbackend/SthBackendApplication.java index c6aba53ce2b19028a1965dccd517a0255da6f15c..17abe0de7697134018c5f7375a885dd483304bfc 100644 --- a/sth-backend/src/main/java/hdm/mi/sthbackend/SthBackendApplication.java +++ b/sth-backend/src/main/java/hdm/mi/sthbackend/SthBackendApplication.java @@ -11,6 +11,8 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.util.UUID; @@ -32,6 +34,7 @@ public class SthBackendApplication { } + @Bean public CommandLineRunner demo() { return args -> { diff --git a/sth-backend/src/main/java/hdm/mi/sthbackend/controller/TestController.java b/sth-backend/src/main/java/hdm/mi/sthbackend/controller/TestController.java new file mode 100644 index 0000000000000000000000000000000000000000..c6634cecf6641a173197918773d3e1a540fc8a1f --- /dev/null +++ b/sth-backend/src/main/java/hdm/mi/sthbackend/controller/TestController.java @@ -0,0 +1,23 @@ +package hdm.mi.sthbackend.controller; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/api") +public class TestController { + @GetMapping() + @CrossOrigin("http://localhost:5173") + public ResponseEntity<String> handleGet(){ + return ResponseEntity.ok("Success"); + } + + @PostMapping + @CrossOrigin + public ResponseEntity<String> handlePost(@RequestBody String test ){ + return ResponseEntity.ok(test); + } + +} diff --git a/sth-backend/src/main/java/hdm/mi/sthbackend/controller/TournamentController.java b/sth-backend/src/main/java/hdm/mi/sthbackend/controller/TournamentController.java index 16288fb200ca4a661143d645b926f0c04658e343..c2df70671647a585adbc83a1afbcb58f404cbd9b 100644 --- a/sth-backend/src/main/java/hdm/mi/sthbackend/controller/TournamentController.java +++ b/sth-backend/src/main/java/hdm/mi/sthbackend/controller/TournamentController.java @@ -1,12 +1,9 @@ package hdm.mi.sthbackend.controller; - -import hdm.mi.sthbackend.dto.MatchDTO; -import hdm.mi.sthbackend.dto.PlayerDTO; -import hdm.mi.sthbackend.dto.TeamDTO; -import hdm.mi.sthbackend.dto.TournamentDTO; +import hdm.mi.sthbackend.dto.*; import hdm.mi.sthbackend.exeptions.*; import hdm.mi.sthbackend.model.Match; +import hdm.mi.sthbackend.model.Team; import hdm.mi.sthbackend.model.Tournament; import hdm.mi.sthbackend.service.TournamentService; import hdm.mi.sthbackend.types.TeamMatchScore; @@ -15,11 +12,15 @@ import hdm.mi.sthbackend.types.TournamentName; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.*; +import java.util.Arrays; +import java.util.List; import java.util.UUID; + @RestController @RequestMapping("/api/v1") @AllArgsConstructor +@CrossOrigin(origins = "*") public class TournamentController { private final TournamentService service; @@ -105,8 +106,12 @@ public class TournamentController { } @PostMapping("/tournaments") - public Tournament createTournament(@RequestBody Tournament tournament) { - return service.createTournament(tournament); + public Tournament createTournament(@RequestBody CreateTournamentDTO tournament) { + + String tournamentName = tournament.getTournamentName(); + List<String> teamNames = tournament.getTeamNames(); + + return service.createTournament( new Tournament(tournamentName, teamNames) ); } @DeleteMapping("/tournaments/{tournamentId}") diff --git a/sth-backend/src/main/java/hdm/mi/sthbackend/dto/CreateTournamentDTO.java b/sth-backend/src/main/java/hdm/mi/sthbackend/dto/CreateTournamentDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..849a47d882e90db86d32bd0f24f3a7dcfb87f139 --- /dev/null +++ b/sth-backend/src/main/java/hdm/mi/sthbackend/dto/CreateTournamentDTO.java @@ -0,0 +1,17 @@ +package hdm.mi.sthbackend.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +@AllArgsConstructor +public class CreateTournamentDTO { + + private String tournamentName; + private List<String> teamNames; + +} diff --git a/sth-backend/src/main/java/hdm/mi/sthbackend/mapper/ModelToDTOMapper.java b/sth-backend/src/main/java/hdm/mi/sthbackend/mapper/ModelToDTOMapper.java index b9418ca1d3d15337aefda1c141263998bc091a90..68abfa22d780c1af31e93de44c5eafe0f75b71f2 100644 --- a/sth-backend/src/main/java/hdm/mi/sthbackend/mapper/ModelToDTOMapper.java +++ b/sth-backend/src/main/java/hdm/mi/sthbackend/mapper/ModelToDTOMapper.java @@ -3,14 +3,10 @@ package hdm.mi.sthbackend.mapper; import hdm.mi.sthbackend.dto.MatchDTO; import hdm.mi.sthbackend.dto.PlayerDTO; import hdm.mi.sthbackend.dto.TeamDTO; -import hdm.mi.sthbackend.dto.TournamentDTO; -import hdm.mi.sthbackend.exeptions.MatchIdNotFoundException; import hdm.mi.sthbackend.exeptions.PlayerIdNotFoundException; -import hdm.mi.sthbackend.exeptions.TournamentIdNotFoundException; import hdm.mi.sthbackend.model.Match; import hdm.mi.sthbackend.model.Player; import hdm.mi.sthbackend.model.Team; -import hdm.mi.sthbackend.model.Tournament; import hdm.mi.sthbackend.repository.IMatchRepository; import hdm.mi.sthbackend.repository.IPlayerRepository; import hdm.mi.sthbackend.repository.ITeamRepository; @@ -115,7 +111,7 @@ public class ModelToDTOMapper { .stream() .collect(Collectors.toMap(Entry::getKey, e -> mapToPlayerDTO(e.getValue()))); return new TeamDTO( - team.getId(), + team.getTeamId(), team.getTeamName(), mappedPlayers ); diff --git a/sth-backend/src/main/java/hdm/mi/sthbackend/model/Team.java b/sth-backend/src/main/java/hdm/mi/sthbackend/model/Team.java index 620a1d1bee0a7f6830d7f6c9aa72b8cd79fd4907..8d4e46a984ed0400128935fe6337b33b3e4635ca 100644 --- a/sth-backend/src/main/java/hdm/mi/sthbackend/model/Team.java +++ b/sth-backend/src/main/java/hdm/mi/sthbackend/model/Team.java @@ -6,16 +6,22 @@ import lombok.Setter; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; +import java.util.ArrayList; import java.util.List; import java.util.UUID; @Getter -@Document("Team") @AllArgsConstructor public class Team { - @Id - private final UUID id; + + private final UUID teamId; @Setter private String teamName; private final List<UUID> teamMembers; + + public Team(String teamName) { + this.teamId = UUID.randomUUID(); + this.teamName = teamName; + this.teamMembers = new ArrayList<>(); + } } diff --git a/sth-backend/src/main/java/hdm/mi/sthbackend/model/Tournament.java b/sth-backend/src/main/java/hdm/mi/sthbackend/model/Tournament.java index 18356b42fc89db0b33583facd9d2140c1105950c..2ec62f31181f03c8ec82912dc0e3ca47b94ad3ad 100644 --- a/sth-backend/src/main/java/hdm/mi/sthbackend/model/Tournament.java +++ b/sth-backend/src/main/java/hdm/mi/sthbackend/model/Tournament.java @@ -10,9 +10,11 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.stream.Collectors; @Document("Tournament") @Getter +@Setter @AllArgsConstructor public class Tournament implements ITournament{ @Id @@ -21,12 +23,16 @@ public class Tournament implements ITournament{ private String tournamentName; @Setter private List<BracketRound> bracket; - private List<UUID> teams; + private Map<UUID, Team> teams; + private List<UUID> users; - public Tournament(String tournamentName, List<UUID> teams){ + + + public Tournament(String tournamentName, List<String> teamNames){ this.tournamentId = UUID.randomUUID(); this.tournamentName = tournamentName; - this.teams = teams; this.bracket = new ArrayList<>(); + this.teams = teamNames.stream().map( Team::new ).collect(Collectors.toMap(Team::getTeamId, team -> team )); } + } diff --git a/sth-backend/src/main/java/hdm/mi/sthbackend/repository/IMatchRepository.java b/sth-backend/src/main/java/hdm/mi/sthbackend/repository/IMatchRepository.java deleted file mode 100644 index 9c7b2360b0a05ebe600ce979f411ce793b040731..0000000000000000000000000000000000000000 --- a/sth-backend/src/main/java/hdm/mi/sthbackend/repository/IMatchRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package hdm.mi.sthbackend.repository; - -import hdm.mi.sthbackend.model.Match; -import org.springframework.data.mongodb.repository.MongoRepository; - -import java.util.UUID; - -public interface IMatchRepository extends MongoRepository<Match, UUID> { -} diff --git a/sth-backend/src/main/java/hdm/mi/sthbackend/repository/IPlayerRepository.java b/sth-backend/src/main/java/hdm/mi/sthbackend/repository/IPlayerRepository.java deleted file mode 100644 index def782437cb1748269a22f1f390b1f7a973c39ee..0000000000000000000000000000000000000000 --- a/sth-backend/src/main/java/hdm/mi/sthbackend/repository/IPlayerRepository.java +++ /dev/null @@ -1,13 +0,0 @@ -package hdm.mi.sthbackend.repository; - -import hdm.mi.sthbackend.model.Player; -import hdm.mi.sthbackend.model.Tournament; -import org.springframework.data.mongodb.repository.MongoRepository; -import org.springframework.stereotype.Repository; - -import java.util.UUID; - -@Repository -public interface IPlayerRepository extends MongoRepository<Player, UUID> { - -} diff --git a/sth-backend/src/main/java/hdm/mi/sthbackend/repository/ITeamRepository.java b/sth-backend/src/main/java/hdm/mi/sthbackend/repository/ITeamRepository.java deleted file mode 100644 index e2bb9c3d526f8f8a9cdb06065fd23c914215184f..0000000000000000000000000000000000000000 --- a/sth-backend/src/main/java/hdm/mi/sthbackend/repository/ITeamRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package hdm.mi.sthbackend.repository; - -import hdm.mi.sthbackend.model.Team; -import org.springframework.data.mongodb.repository.MongoRepository; - -import java.util.UUID; - -public interface ITeamRepository extends MongoRepository<Team, UUID> { -} diff --git a/sth-backend/src/main/java/hdm/mi/sthbackend/service/TournamentService.java b/sth-backend/src/main/java/hdm/mi/sthbackend/service/TournamentService.java index fadff0303c71dcdc2ff2b86f30a00b7de6821e2c..9f8bda9ceffe65476e529662e6fa5be639835c35 100644 --- a/sth-backend/src/main/java/hdm/mi/sthbackend/service/TournamentService.java +++ b/sth-backend/src/main/java/hdm/mi/sthbackend/service/TournamentService.java @@ -3,7 +3,6 @@ package hdm.mi.sthbackend.service; import hdm.mi.sthbackend.dto.MatchDTO; import hdm.mi.sthbackend.dto.PlayerDTO; import hdm.mi.sthbackend.dto.TeamDTO; -import hdm.mi.sthbackend.dto.TournamentDTO; import hdm.mi.sthbackend.exeptions.*; import hdm.mi.sthbackend.mapper.ModelToDTOMapper; import hdm.mi.sthbackend.model.*; @@ -11,7 +10,6 @@ import hdm.mi.sthbackend.repository.IMatchRepository; import hdm.mi.sthbackend.repository.IPlayerRepository; import hdm.mi.sthbackend.repository.ITeamRepository; import hdm.mi.sthbackend.repository.ITournamentRepository; -import hdm.mi.sthbackend.types.TeamMatchScore; import lombok.AllArgsConstructor; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -27,17 +25,16 @@ public class TournamentService { private final Logger log = LogManager.getLogger(TournamentService.class); ITournamentRepository tournamentRepository; - IPlayerRepository playerRepository; - ITeamRepository teamRepository; - IMatchRepository matchRepository; @Autowired ModelToDTOMapper mapper; - public PlayerDTO addPlayerToTeam(UUID teamId, - String playerName) throws TeamIdNotFoundException { - Team team = teamRepository.findById(teamId) - .orElseThrow(() -> new TeamIdNotFoundException(teamId)); + public PlayerDTO addPlayerToTeam(UUID tournamentId, UUID teamId, + String playerName) throws TournamentIdNotFoundException, TeamIdNotFoundException { + Tournament tournament = tournamentRepository.findById(tournamentId) + .orElseThrow(() -> new TournamentIdNotFoundException( tournamentId)); + + Team team = Optional.ofNullable( tournament.getTeams().get( teamId )).orElseThrow(() -> new TeamIdNotFoundException(teamId)) ; Player newPlayer = new Player(UUID.randomUUID(), playerName); team.getTeamMembers() @@ -113,10 +110,10 @@ public class TournamentService { Tournament tournament = tournamentRepository.findById(tournamentId) .orElseThrow(() -> new TournamentIdNotFoundException(tournamentId)); - Team newTeam = new Team(UUID.randomUUID(), teamName, new ArrayList<>()); + Team newTeam = new Team(teamName); tournament.getTeams() - .add(newTeam.getId()); + .add(newTeam); teamRepository.insert(newTeam); tournamentRepository.save(tournament); @@ -132,7 +129,7 @@ public class TournamentService { .orElseThrow(() -> new TeamIdNotFoundException(teamId)); try { tournament.getTeams() - .remove(teamToDelete.getId()); + .remove(teamToDelete.getTeamId()); } catch (NullPointerException e) { throw new TeamIdNotFoundException(tournamentId); } @@ -143,8 +140,9 @@ public class TournamentService { } public Tournament createTournament(Tournament tournament) { + tournamentRepository.insert(tournament); - log.debug("created Tournament " + tournament.getTournamentId()); + log.info("created Tournament " + tournament.getTournamentId()); return tournament; } @@ -235,7 +233,7 @@ public class TournamentService { public Tournament createBracket(UUID tournamentId) throws TournamentIdNotFoundException, InsufficientTeamsException, BracketAlreadyInitializedException{ Tournament tournament = tournamentRepository.findById(tournamentId) .orElseThrow(() -> new TournamentIdNotFoundException(tournamentId)); - List<UUID> teams = tournament.getTeams(); + List<Team> teams = tournament.getTeams(); if(teams.size() < 2){ throw new InsufficientTeamsException(tournamentId); @@ -263,21 +261,52 @@ public class TournamentService { else{ throw new BracketAlreadyInitializedException(tournamentId); } + + linkMatchesInNextRound(tournamentId); + tournamentRepository.save(tournament); return tournament; } + public void linkMatchesInNextRound(UUID tournamentId)throws TournamentIdNotFoundException { + Tournament tournament = tournamentRepository.findById(tournamentId) + .orElseThrow(() -> new TournamentIdNotFoundException(tournamentId)); + + int timesUsed = 0; + Map<UUID, Match> nextRoundMatches; + + for (int i = 0; i < tournament.getBracket().size() - 1; i++) { + nextRoundMatches = tournament.getBracket().get(i + 1).getMatches(); + List<UUID> nextRoundMatchIds = nextRoundMatches.keySet().stream().toList(); + + for (Map.Entry<UUID, Match> entry : tournament.getBracket().get(i).getMatches().entrySet()) { + UUID nextMatch = nextRoundMatchIds.get(0); + entry.getValue().setNextMatchId(nextMatch); + + if (timesUsed > 0) { + nextRoundMatchIds.removeFirst(); + timesUsed = 0; + } else { + timesUsed += 1; + } + + } + } + tournamentRepository.save(tournament); + } + + public Tournament fillBracketRandom(UUID tournamentId) throws TournamentIdNotFoundException { Tournament tournament = tournamentRepository.findById(tournamentId) .orElseThrow(() -> new TournamentIdNotFoundException(tournamentId)); - List<UUID> teams = tournament.getTeams(); + List<Team> teams = tournament.getTeams(); Random random = new Random(); for(int i = 0; i < 2; i++){ for(Match match: tournament.getBracket().get(0).getMatches().values()){ - if(teams.size() > 0){ + if(!teams.isEmpty()){ int teamIndex = random.nextInt(0, teams.size()); - match.getTeamScores().put(teams.get(teamIndex), 0); + match.getTeamScores().put(teams.get(teamIndex).getTeamId(), 0); teams.remove(teamIndex); } else{ diff --git a/sth-backend/src/main/resources/application-dev.yaml b/sth-backend/src/main/resources/application-dev.yaml index e7c0fa4e0780d6313a1aaa401efab832bd9d7533..76ede2e4fc54615487b8bd67a88508b4cf716a3c 100644 --- a/sth-backend/src/main/resources/application-dev.yaml +++ b/sth-backend/src/main/resources/application-dev.yaml @@ -1,5 +1,5 @@ spring: datasource: - url: mongodb://alhb:asdasd123@localhost:27018/?authMechanism=DEFAULT + url: mongodb://alhb:asdasd123@localhost:27017/?authMechanism=DEFAULT username: alhb password: asdasd123 diff --git a/sth-backend/src/main/resources/application.yaml b/sth-backend/src/main/resources/application.yaml index ba22ea1ff5b66a8c1230e26a20a380a912389f8a..6a46c2375f354c2247cb0c6d165739be566ef068 100644 --- a/sth-backend/src/main/resources/application.yaml +++ b/sth-backend/src/main/resources/application.yaml @@ -2,8 +2,9 @@ spring: data: mongodb: host: localhost - port: 27018 + port: 27017 database: tournament-hub authentication-database: admin username: alhb password: asdasd123 + diff --git a/sth-backend/src/test/java/hdm/mi/sthbackend/TournamentControllerTest.java b/sth-backend/src/test/java/hdm/mi/sthbackend/TournamentControllerTest.java index 7970142aa0f9cf7c6c4ec0bdba2075a1a7322a0f..0fd940f35462a79ed9208524406730bfed240160 100644 --- a/sth-backend/src/test/java/hdm/mi/sthbackend/TournamentControllerTest.java +++ b/sth-backend/src/test/java/hdm/mi/sthbackend/TournamentControllerTest.java @@ -10,10 +10,8 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; @@ -25,10 +23,10 @@ import java.util.ArrayList; import java.util.Optional; import java.util.UUID; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @SpringBootTest @AutoConfigureMockMvc diff --git a/sth-backend/src/test/java/hdm/mi/sthbackend/dummyObjects/dummyTournaments.java b/sth-backend/src/test/java/hdm/mi/sthbackend/dummyObjects/dummyTournaments.java index 2d5c9ee56ad0233c90934f963d0e7c71bedf0712..a5ab7680000d19bb349fb841f2d528113c46e0c2 100644 --- a/sth-backend/src/test/java/hdm/mi/sthbackend/dummyObjects/dummyTournaments.java +++ b/sth-backend/src/test/java/hdm/mi/sthbackend/dummyObjects/dummyTournaments.java @@ -1,48 +1,30 @@ package hdm.mi.sthbackend.dummyObjects; +import hdm.mi.sthbackend.model.Team; import hdm.mi.sthbackend.model.Tournament; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.UUID; +import java.util.*; public class dummyTournaments { private final Logger log = LogManager.getLogger("dummyTournaments"); public static UUID dummyTournamentId = UUID.randomUUID(); - public static Tournament t1 = new Tournament(dummyTournamentId, "TestTournament", new ArrayList<>(), - new ArrayList<>(Arrays.asList( - UUID.randomUUID(), UUID.randomUUID()))); - public static Tournament t2 = new Tournament(dummyTournamentId, "TestTournament", new ArrayList<>(), - new ArrayList<>(Arrays.asList( - UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID()))); - public static Tournament t3 = new Tournament(dummyTournamentId, "TestTournament", new ArrayList<>(), - new ArrayList<>(Arrays.asList( - UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), - UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID()))); - public static Tournament t4 = new Tournament(dummyTournamentId, "TestTournament", new ArrayList<>(), - new ArrayList<>(Arrays.asList( - UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), - UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), - UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), - UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID()))); - public static Tournament t11 = new Tournament(dummyTournamentId, "TestTournament", new ArrayList<>(), - new ArrayList<>(Arrays.asList( - UUID.randomUUID()))); - public static Tournament t12 = new Tournament(dummyTournamentId, "TestTournament", new ArrayList<>(), - new ArrayList<>(Arrays.asList( - UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID()))); - public static Tournament t13 = new Tournament(dummyTournamentId, "TestTournament", new ArrayList<>(), - new ArrayList<>(Arrays.asList( - UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), - UUID.randomUUID()))); - public static Tournament t14 = new Tournament(dummyTournamentId, "TestTournament", new ArrayList<>(), - new ArrayList<>(Arrays.asList( - UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), - UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), - UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), - UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID()))); + public static Tournament t1 = new Tournament(dummyTournamentId, "TestTournament", new ArrayList<>(), new ArrayList<>( generateTeams( 2 )), new ArrayList<>()); + public static Tournament t2 = new Tournament(dummyTournamentId, "TestTournament", new ArrayList<>(), new ArrayList<>( generateTeams( 4 )), new ArrayList<>()); + public static Tournament t3 = new Tournament(dummyTournamentId, "TestTournament", new ArrayList<>(), new ArrayList<>( generateTeams( 8 )), new ArrayList<>()); + public static Tournament t4 = new Tournament(dummyTournamentId, "TestTournament", new ArrayList<>(), new ArrayList<>( generateTeams( 16 )), new ArrayList<>()); + public static Tournament t11 = new Tournament(dummyTournamentId, "TestTournament", new ArrayList<>(), new ArrayList<>( generateTeams( 1 )), new ArrayList<>()); + public static Tournament t12 = new Tournament(dummyTournamentId, "TestTournament", new ArrayList<>(), new ArrayList<>( generateTeams( 3 )), new ArrayList<>()); + public static Tournament t13 = new Tournament(dummyTournamentId, "TestTournament", new ArrayList<>(), new ArrayList<>( generateTeams( 5 )), new ArrayList<>()); + public static Tournament t14 = new Tournament(dummyTournamentId, "TestTournament", new ArrayList<>(), new ArrayList<>( generateTeams( 15 )), new ArrayList<>()); + private static List<Team> generateTeams(int count) { + List<Team> teamList = new ArrayList<>(); + for (int i = 0; i < count; i++) { + teamList.add(new Team( "dummy" )); + } + return teamList; + } } diff --git a/sth-backend/src/test/java/hdm/mi/sthbackend/serviceTests/CreacteBracketTest.java b/sth-backend/src/test/java/hdm/mi/sthbackend/serviceTests/CreateBracketTest.java similarity index 99% rename from sth-backend/src/test/java/hdm/mi/sthbackend/serviceTests/CreacteBracketTest.java rename to sth-backend/src/test/java/hdm/mi/sthbackend/serviceTests/CreateBracketTest.java index 03fc5eaea90fd0f086008b70917eebffd977e17b..70862e5a887137bddb93ff3f70d994fc98d232a0 100644 --- a/sth-backend/src/test/java/hdm/mi/sthbackend/serviceTests/CreacteBracketTest.java +++ b/sth-backend/src/test/java/hdm/mi/sthbackend/serviceTests/CreateBracketTest.java @@ -21,7 +21,7 @@ import static org.mockito.Mockito.*; import java.util.Optional; @ExtendWith(MockitoExtension.class) -public class CreacteBracketTest { +public class CreateBracketTest { @Mock public ITournamentRepository tournamentRepository; diff --git a/sth-frontend/.env b/sth-frontend/.env index a97bd7733774a0d552408b194bada84ba0847ac6..efccb62ff3d0ae0245960485ced291348add740c 100644 --- a/sth-frontend/.env +++ b/sth-frontend/.env @@ -1,2 +1,2 @@ # .env - +VITE_BASE_URL=http://localhost:8080 diff --git a/sth-frontend/src/App.jsx b/sth-frontend/src/App.jsx index cd877e1cf671d69ec4559b8cf0d918cb366386b7..694637039d4829b3151bdbf8c2f5ea80a971b532 100644 --- a/sth-frontend/src/App.jsx +++ b/sth-frontend/src/App.jsx @@ -2,15 +2,12 @@ import Navbar from "./layouts/Navbar"; import {Outlet} from "react-router-dom"; import "./index.css" import Button from "./components/Button"; +import Home from "./pages/Home"; function App() { return ( <> - <Navbar /> - <div className={'p-6'}> - <Outlet /> - </div> - <Button className={'bg-blue-500'}>Hello</Button> + <Home /> </> ); } diff --git a/sth-frontend/src/components/TournamentForm.jsx b/sth-frontend/src/components/TournamentForm.jsx index 71962aa13563dfbbe010f64ce4fa5035236d9b74..e46ae3d4fa4d21979b95f5f7d68aa3ad0aef72e4 100644 --- a/sth-frontend/src/components/TournamentForm.jsx +++ b/sth-frontend/src/components/TournamentForm.jsx @@ -30,8 +30,8 @@ export default function TournamentForm({setIsOpen}) { const handleSubmit = async (event) => { event.preventDefault() const tournament = { - name: tournamentName, - teams: teamNames + tournamentName: tournamentName, + teamNames: teamNames } try { await createTournament(tournament) diff --git a/sth-frontend/src/features/auth/components/loginForm.jsx b/sth-frontend/src/features/auth/components/loginForm.jsx new file mode 100644 index 0000000000000000000000000000000000000000..88bf10dc2481fa1753da656acc043857a232b430 --- /dev/null +++ b/sth-frontend/src/features/auth/components/loginForm.jsx @@ -0,0 +1,17 @@ +function LoginForm() { + + + + return ( + <div className={'flex flex-col justify-center items-center'}> + <h1 >Sign up</h1> + <form className={'flex flex-col mt-3 w-1/4'}> + <input className={'mt-3 border'} type={'text'} id={'email'} name={'email'}/> + <input className={'mt-3 border'} type={'password'} id={'password'} name={'password'}/> + <button className={'text-white bg-blue-700 hover:bg-blue-800 rounded mt-3' } type={'submit'}>SIGN UP</button> + </form> + </div> + ); +} + +export default LoginForm \ No newline at end of file diff --git a/sth-frontend/src/features/tournament/components/Team.jsx b/sth-frontend/src/features/tournament/components/Team.jsx index bb762e829932c9011db904d134a8d618f378ad93..952c504939d7cec316e992135c6efce6efb339aa 100644 --- a/sth-frontend/src/features/tournament/components/Team.jsx +++ b/sth-frontend/src/features/tournament/components/Team.jsx @@ -3,6 +3,7 @@ import Score from "./Score"; export default function Team({name, score, setScore, winning}) { + return( <div className={'flex w-40 m-3'}> <div className={`mr-4 rounded flex justify-center ` + (winning ? 'bg-green-300' : 'bg-gray-100')}>{name}</div> diff --git a/sth-frontend/src/features/tournament/services/tournamentService.js b/sth-frontend/src/features/tournament/services/tournamentService.js index fd02f1168aed0fc127f5d6b2b45691ff3a771301..99f2da460278439065c4c9ecbbb9643ed9c5a1c1 100644 --- a/sth-frontend/src/features/tournament/services/tournamentService.js +++ b/sth-frontend/src/features/tournament/services/tournamentService.js @@ -1,21 +1,25 @@ async function createTournament(tournament) { - const baseURL = import.meta.env.BASE_URL; - const url = `${baseURL}/api/v1/tournaments/`; + const baseURL = import.meta.env.VITE_BASE_URL; + const url = `${baseURL}/api/v1/tournaments` const options = { method: 'POST', headers: { 'Content-Type': 'application/json', - }, body: JSON.stringify(tournament), mode: 'cors', - credentials: 'include' + credentials: 'omit' }; try { - console.log('fetching'); + console.log(`fetching ${url}`); + console.log(options) + const response = await fetch(url, options); + const data = await response.text() + console.log(data) + if (!response.ok) { throw new HttpResponseError('Bad fetch', response); diff --git a/sth-frontend/src/layouts/Navbar.jsx b/sth-frontend/src/layouts/Navbar.jsx index dc6654418a7a0e84533d3d74fc5181a5322834a4..0de1e1cda0505f7d2b97be0511fcceb162f0fe61 100644 --- a/sth-frontend/src/layouts/Navbar.jsx +++ b/sth-frontend/src/layouts/Navbar.jsx @@ -25,7 +25,7 @@ export default function Navbar() { <Link to="/">Home</Link> </li> <li className={'flex items-center justify-center w-24 h-8 rounded-lg h-full hover:bg-gray-200 duration-100'}> - <Link to="/">About</Link> + <Link to="/login">Login</Link> </li> </ul> </div> diff --git a/sth-frontend/src/pages/Home.jsx b/sth-frontend/src/pages/Home.jsx index 51dbe6e675951aaa2188c7f0bb56e3963f9bb4e0..00ff1578b7666493048c797261dd9c68a2cba8c1 100644 --- a/sth-frontend/src/pages/Home.jsx +++ b/sth-frontend/src/pages/Home.jsx @@ -1,9 +1,13 @@ import Navbar from "../layouts/Navbar"; +import {Outlet} from "react-router-dom"; export default function Home() { return ( <div> <Navbar /> + <div className={'p-6'}> + <Outlet /> + </div> </div> ); } \ No newline at end of file diff --git a/sth-frontend/src/pages/LoginPage.jsx b/sth-frontend/src/pages/LoginPage.jsx new file mode 100644 index 0000000000000000000000000000000000000000..805209792d2b6126028c9d34669cf03137d27f16 --- /dev/null +++ b/sth-frontend/src/pages/LoginPage.jsx @@ -0,0 +1,15 @@ +import Navbar from "../layouts/Navbar"; +import {Outlet} from "react-router-dom"; +import LoginForm from "../features/auth/components/loginForm"; + +function LoginPage() { + + return ( + <> + <Navbar /> + <LoginForm /> + </> + ) +} + +export default LoginPage \ No newline at end of file diff --git a/sth-frontend/src/utils/router.jsx b/sth-frontend/src/utils/router.jsx index 665fcf1b4ea129a5b3bb3f2334be105969bfd18d..8409f14b2bcddd0bb155fe42f3dbdc9c7d79b74e 100644 --- a/sth-frontend/src/utils/router.jsx +++ b/sth-frontend/src/utils/router.jsx @@ -2,6 +2,7 @@ import {createBrowserRouter} from "react-router-dom"; import Tournament from "../features/tournament/components/Tournament"; import App from "../App"; import Landingpage from "../features/landingpage/Landingpage"; +import LoginPage from "../pages/LoginPage"; const router = createBrowserRouter([ { @@ -9,6 +10,7 @@ const router = createBrowserRouter([ element: <App/>, children: [ {path: "", element: <Tournament/>}, + {path: "/login", element: <LoginPage />} ] }, {