Skip to content

Commit 0f41a78

Browse files
committed
Merge branch 'merge_test' into Merge_refactoring
2 parents 18da9d5 + f7ec6c3 commit 0f41a78

File tree

28 files changed

+805
-61
lines changed

28 files changed

+805
-61
lines changed

T23-G1/src/main/java/com/example/db_setup/controller/PlayerController.java

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package com.example.db_setup.controller;
22

33
import com.example.db_setup.model.Player;
4-
import com.example.db_setup.model.repository.PlayerRepository;
4+
import com.example.db_setup.model.dto.gamification.PlayerDTO;
55
import com.example.db_setup.service.PlayerService;
6-
import org.slf4j.Logger;
7-
import org.slf4j.LoggerFactory;
6+
import io.swagger.v3.oas.annotations.Operation;
7+
import io.swagger.v3.oas.annotations.media.ArraySchema;
8+
import io.swagger.v3.oas.annotations.media.Content;
9+
import io.swagger.v3.oas.annotations.media.Schema;
10+
import io.swagger.v3.oas.annotations.responses.ApiResponse;
11+
import io.swagger.v3.oas.annotations.responses.ApiResponses;
812
import org.springframework.http.ResponseEntity;
913
import org.springframework.web.bind.annotation.*;
1014

@@ -20,21 +24,28 @@ public class PlayerController {
2024
*/
2125

2226
private final PlayerService playerService;
23-
private final PlayerRepository playerRepository;
24-
private final Logger logger = LoggerFactory.getLogger(PlayerController.class);
2527

26-
public PlayerController(PlayerService playerService, PlayerRepository playerRepository) {
28+
public PlayerController(PlayerService playerService) {
2729
this.playerService = playerService;
28-
this.playerRepository = playerRepository;
2930
}
3031

32+
@Operation(
33+
summary = "Get all players",
34+
description = "Returns a list of all registered players"
35+
)
36+
@ApiResponses(value = {
37+
@ApiResponse(
38+
responseCode = "200",
39+
description = "List of player returned successfully or empty if there are no players",
40+
content = @Content(
41+
mediaType = "application/json",
42+
array = @ArraySchema(schema = @Schema(implementation = PlayerDTO.class))
43+
)
44+
)
45+
})
3146
@GetMapping("/players")
32-
public ResponseEntity<List<Player>> getAllPlayers() {
33-
logger.info("[GET /players] Received request");
34-
List<Player> players = playerRepository.findAll();
35-
36-
logger.info("[GET /players] Players retrieved: {}", players);
37-
return ResponseEntity.ok(players);
47+
public ResponseEntity<List<PlayerDTO>> getAllPlayers() {
48+
return ResponseEntity.ok(playerService.getAllPlayers());
3849
}
3950

4051
@PostMapping("/players/studentsByIds")

T23-G1/src/main/java/com/example/db_setup/mapper/MapperFacade.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
import com.example.db_setup.model.GameProgress;
44
import com.example.db_setup.model.Opponent;
5+
import com.example.db_setup.model.Player;
56
import com.example.db_setup.model.PlayerProgress;
67
import com.example.db_setup.model.dto.gamification.GameProgressDTO;
78
import com.example.db_setup.model.dto.gamification.OpponentDTO;
9+
import com.example.db_setup.model.dto.gamification.PlayerDTO;
810
import com.example.db_setup.model.dto.gamification.PlayerProgressDTO;
911
import org.springframework.stereotype.Service;
1012

@@ -29,13 +31,16 @@ public class MapperFacade {
2931
private final OpponentMapper opponentMapper;
3032
private final PlayerProgressMapper playerProgressMapper;
3133
private final GameProgressMapper gameProgressMapper;
34+
private final PlayerMapper playerMapper;
3235

3336
public MapperFacade(OpponentMapper opponentMapper,
3437
PlayerProgressMapper playerProgressMapper,
35-
GameProgressMapper gameProgressMapper) {
38+
GameProgressMapper gameProgressMapper,
39+
PlayerMapper playerMapper) {
3640
this.opponentMapper = opponentMapper;
3741
this.playerProgressMapper = playerProgressMapper;
3842
this.gameProgressMapper = gameProgressMapper;
43+
this.playerMapper = playerMapper;
3944
}
4045

4146
public OpponentDTO toDTO(Opponent opponent) {
@@ -49,4 +54,8 @@ public PlayerProgressDTO toDTO(PlayerProgress playerProgress) {
4954
public GameProgressDTO toDTO(GameProgress gameProgress) {
5055
return gameProgressMapper.gameProgressToGameProgressDTO(gameProgress);
5156
}
57+
58+
public PlayerDTO toDTO(Player player){
59+
return playerMapper.playerToPlayerDTO(player);
60+
}
5261
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.example.db_setup.mapper;
2+
3+
import com.example.db_setup.model.Player;
4+
import com.example.db_setup.model.dto.gamification.PlayerDTO;
5+
import com.example.db_setup.model.dto.gamification.PlayerProgressDTO;
6+
import org.mapstruct.BeanMapping;
7+
import org.mapstruct.Mapper;
8+
import org.mapstruct.Mapping;
9+
10+
@Mapper(componentModel = "spring", uses = PlayerProgressMapper.class)
11+
public interface PlayerMapper {
12+
13+
@BeanMapping(ignoreUnmappedSourceProperties = {"password"})
14+
@Mapping(source = "player.userProfile.name", target = "name")
15+
@Mapping(source = "player.userProfile.surname", target = "surname")
16+
@Mapping(source = "player.userProfile.nickname", target = "nickname")
17+
@Mapping(source = "player.userProfile.email", target = "email")
18+
@Mapping(source="ID", target="id")
19+
PlayerDTO playerToPlayerDTO(Player player);
20+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// added by GaetanoM
2+
package com.example.db_setup.model.dto.gamification;
3+
4+
import com.example.db_setup.mapper.MapperFacade;
5+
import com.example.db_setup.model.Player;
6+
import lombok.*;
7+
8+
@Getter
9+
@Setter
10+
@ToString
11+
@NoArgsConstructor
12+
@AllArgsConstructor
13+
public class PlayerDTO {
14+
private long id;
15+
private String name;
16+
private String surname;
17+
private String nickname;
18+
private String email;
19+
private String studies;
20+
private PlayerProgressDTO playerProgress;
21+
}
Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.example.db_setup.model.dto.gamification;
22

3+
import com.example.db_setup.model.GameProgress;
4+
import com.example.db_setup.model.Opponent;
5+
import com.example.db_setup.model.PlayerProgress;
36
import lombok.*;
47

58
import java.util.ArrayList;
@@ -15,17 +18,4 @@ public class PlayerProgressDTO {
1518
private int experiencePoints;
1619
private Set<String> globalAchievements;
1720
private List<GameProgressDTO> gameProgressesDTO = new ArrayList<>();
18-
19-
/*
20-
public PlayerProgressDTO(int experiencePoints, Set<String> globalAchievements, List<GameProgress> gameProgresses) {
21-
this.experiencePoints = experiencePoints;
22-
this.globalAchievements = globalAchievements;
23-
for (GameProgress gameProgress : gameProgresses) {
24-
Opponent opponent = gameProgress.getOpponent();
25-
this.gameProgressesDTO.add(new GameProgressDTO(opponent.getClassUT(), opponent.getGameMode(), opponent.getType(),
26-
opponent.getDifficulty(), gameProgress.isWinner(), gameProgress.getAchievements()));
27-
}
28-
}
29-
30-
*/
3121
}

T23-G1/src/main/java/com/example/db_setup/service/PlayerService.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@
1616
*/
1717
package com.example.db_setup.service;
1818

19+
import com.example.db_setup.mapper.MapperFacade;
1920
import com.example.db_setup.model.Player;
2021
import com.example.db_setup.model.Studies;
2122
import com.example.db_setup.model.UserProfile;
23+
import com.example.db_setup.model.dto.gamification.PlayerDTO;
2224
import com.example.db_setup.model.repository.PlayerRepository;
2325
import com.example.db_setup.model.repository.UserProfileRepository;
2426
import com.example.db_setup.service.exception.UserNotFoundException;
@@ -40,11 +42,24 @@ public class PlayerService {
4042
private final PlayerProgressService playerProgressService;
4143
private final PlayerRepository playerRepository;
4244
private final UserProfileRepository userProfileRepository;
45+
private final MapperFacade mapperFacade;
4346

44-
public PlayerService(PlayerProgressService playerProgressService, PlayerRepository playerRepository, UserProfileRepository userProfileRepository) {
47+
public PlayerService(PlayerProgressService playerProgressService,
48+
PlayerRepository playerRepository,
49+
UserProfileRepository userProfileRepository,
50+
MapperFacade mapperFacade) {
4551
this.playerProgressService = playerProgressService;
4652
this.playerRepository = playerRepository;
4753
this.userProfileRepository = userProfileRepository;
54+
this.mapperFacade = mapperFacade;
55+
}
56+
57+
public List<PlayerDTO> getAllPlayers() {
58+
logger.info("[GET /players] Received request");
59+
List<Player> players = playerRepository.findAll();
60+
List<PlayerDTO> playersDTO = players.stream().map(mapperFacade::toDTO).toList();
61+
logger.info("[GET /players] Players retrieved");
62+
return playersDTO;
4863
}
4964

5065
@Transactional
@@ -65,7 +80,6 @@ public Player getUserByID(Long id) {
6580
Optional<Player> player = playerRepository.findById(id);
6681
if (player.isEmpty())
6782
throw new UserNotFoundException();
68-
6983
return player.get();
7084
}
7185

T5-G2/t5/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,12 @@
8080
<artifactId>commons-csv</artifactId>
8181
<version>1.9.0</version>
8282
</dependency>
83+
<!-- TODO: fix this dependency-->
84+
<!-- <dependency>-->
85+
<!-- <groupId>com.commons</groupId>-->
86+
<!-- <artifactId>commons</artifactId>-->
87+
<!-- <version>1.0-SNAPSHOT</version>-->
88+
<!-- </dependency>-->
8389
<dependency>
8490
<groupId>org.json</groupId>
8591
<artifactId>json</artifactId>
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
// added by GaetanoM
2+
package com.g2.components;
3+
4+
import com.g2.interfaces.ServiceManager;
5+
import com.g2.model.dto.LeaderboardRecordDTO;
6+
import com.g2.model.dto.PlayerDTO;
7+
import com.g2.model.LeaderboardRecord;
8+
import org.slf4j.Logger;
9+
import org.slf4j.LoggerFactory;
10+
11+
import java.util.List;
12+
import java.util.Optional;
13+
14+
// LogicComponent che esegue la logica e la chiamata API per la costruzione della classifica
15+
public class LeaderboardComponent extends GenericLogicComponent {
16+
private final String ErrorCode = "leaderboard_error";
17+
private final ServiceManager serviceManager;
18+
private final Long currentPlayerId;
19+
private final GenericObjectComponent leaderboardObjectComponent;
20+
private static final Logger logger = LoggerFactory.getLogger(LeaderboardComponent.class);
21+
22+
public LeaderboardComponent(
23+
GenericObjectComponent leaderboardObjectComponent,
24+
Long currentPlayerId,
25+
ServiceManager serviceManager
26+
) {
27+
this.serviceManager = serviceManager;
28+
this.currentPlayerId = currentPlayerId;
29+
this.leaderboardObjectComponent = leaderboardObjectComponent;
30+
}
31+
32+
@Override
33+
public boolean executeLogic() {
34+
List<PlayerDTO> players = (List<PlayerDTO>) serviceManager.handleRequest("T23", "getAllPlayers", null);
35+
logger.debug("Players retrieved: {}", players);
36+
Optional<PlayerDTO> optCurrentPlayer = players.stream().filter(player -> player.getId() == this.currentPlayerId).findFirst();
37+
if(optCurrentPlayer.isEmpty()) return false;
38+
PlayerDTO currentPlayer = optCurrentPlayer.get();
39+
List<LeaderboardRecordDTO> leaderboard = players.stream().map(LeaderboardRecord::new).sorted().map(LeaderboardRecordDTO::new).toList();
40+
logger.debug("Leaderboard: {}", leaderboard);
41+
LeaderboardRecord currentPlayerRecord = new LeaderboardRecord(currentPlayer);
42+
logger.debug("Current player record: {}", currentPlayerRecord);
43+
// la leaderboard è inserita all'interno di un ObjectComponent che sarà passato al PageBuilder per la
44+
// costruzione della pagina della classifica
45+
leaderboardObjectComponent.setObject("leaderboard", leaderboard);
46+
leaderboardObjectComponent.setObject("playerRecord", new LeaderboardRecordDTO(currentPlayerRecord));
47+
return true;
48+
}
49+
50+
@Override
51+
public String getErrorCode() {
52+
return this.ErrorCode;
53+
}
54+
}

T5-G2/t5/src/main/java/com/g2/controllers/GuiController.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -112,15 +112,7 @@ public String editorPage(Model model,
112112
return editor.handlePageRequest();
113113
}
114114

115-
@GetMapping("/leaderboard")
116-
public String leaderboard(Model model, @CookieValue(name = "jwt", required = false) String jwt) {
117-
PageBuilder leaderboard = new PageBuilder(serviceManager, "leaderboard", model);
118-
ServiceObjectComponent listaUtenti = new ServiceObjectComponent(serviceManager, "listaPlayers", "T23", "GetUsers");
119-
leaderboard.setObjectComponents(listaUtenti);
120-
return leaderboard.handlePageRequest();
121-
}
122-
123-
/*
115+
/*
124116
@PostMapping("/save-scalata")
125117
public ResponseEntity<String> saveScalata(@RequestParam("playerID") int playerID,
126118
@RequestParam("scalataName") String scalataName,

T5-G2/t5/src/main/java/com/g2/controllers/UserProfileController.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.g2.components.GenericObjectComponent;
55
import com.g2.components.PageBuilder;
66
import com.g2.components.UserProfileComponent;
7+
import com.g2.components.LeaderboardComponent;
78
import com.g2.interfaces.ServiceManager;
89
import com.g2.model.GameConfigData;
910
import com.g2.model.User;
@@ -124,6 +125,18 @@ public String showAchievements(Model model) {
124125
return achievement.handlePageRequest();
125126
}
126127

128+
// Handler per la costruzione della pagina contenente la classifica
129+
// La pagina è costruita utilizzando un ObjectComponent "riempito" da un LogicComponent
130+
@GetMapping("/leaderboard")
131+
public String showLeaderboard(Model model) {
132+
PageBuilder leaderboardPage = new PageBuilder(serviceManager, "Leaderboard", model, JwtRequestContext.getJwtToken());
133+
GenericObjectComponent leaderboardObjectComponent = new GenericObjectComponent(null, null);
134+
LeaderboardComponent leaderboardComponent = new LeaderboardComponent(leaderboardObjectComponent, leaderboardPage.getUserId(), serviceManager);
135+
leaderboardPage.setLogicComponents(leaderboardComponent);
136+
leaderboardPage.setObjectComponents(leaderboardObjectComponent);
137+
return leaderboardPage.handlePageRequest();
138+
}
139+
127140
@GetMapping("/Notification")
128141
public String showProfileNotificationPage(Model model) {
129142
PageBuilder notificationPage = new PageBuilder(serviceManager, "notification", model, JwtRequestContext.getJwtToken());

0 commit comments

Comments
 (0)