Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโ€™ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

๐Ÿ› [Fix] GUEST ํ† ๋„ˆ๋จผํŠธ ์ฐธ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋„๋ก ์ˆ˜์ • #483

Closed
wants to merge 7 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto

# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.java text=auto
*.sql text=auto
*.md text=auto
*.txt text=auto
*.gradle text=auto
Dockerfile text=auto
*.yml text=auto
*.yaml text=auto
*.sh text=auto

# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ public void rankResultEdit(RankGamePPPModifyReqDto reqDto, Long gameId) {
pChangeAdminRepository.delete(pChanges.get(0));
}
rankRedisService.updateRankRedis(teamUsers.get(0), teamUsers.get(1), game);
rankRedisService.updateAllTier(gameId);
}

private void rollbackGameResult(RankGamePPPModifyReqDto reqDto, Season season, TeamUser teamUser, List<PChange> pChanges) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
Expand All @@ -14,9 +15,11 @@
@AllArgsConstructor
public class TournamentAdminCreateRequestDto {
@NotNull(message = "์ œ๋ชฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.")
@Length(max = 30, message = "์ œ๋ชฉ์€ 30์ž ์ด๋‚ด๋กœ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.")
private String title;

@NotNull(message = "๋‚ด์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.")
@Length(max = 1000, message = "๋‚ด์šฉ์€ 1000์ž ์ด๋‚ด๋กœ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.")
private String contents;

@NotNull(message = "์‹œ์ž‘ ์‹œ๊ฐ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.DateTimeFormat.ISO;

Expand All @@ -17,9 +18,11 @@
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class TournamentAdminUpdateRequestDto {
@NotNull(message = "์ œ๋ชฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.")
@Length(max = 30, message = "์ œ๋ชฉ์€ 30์ž ์ด๋‚ด๋กœ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.")
private String title;

@NotNull(message = "๋‚ด์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.")
@Length(max = 1000, message = "๋‚ด์šฉ์€ 1000์ž ์ด๋‚ด๋กœ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.")
private String contents;

@NotNull(message = "์‹œ์ž‘ ์‹œ๊ฐ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import com.gg.server.global.config.ConstantConfig;
import com.gg.server.global.exception.ErrorCode;
import com.gg.server.global.exception.custom.InvalidParameterException;
import java.time.LocalDate;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand Down Expand Up @@ -213,7 +214,7 @@ private void checkValidTournamentTime(LocalDateTime startTime, LocalDateTime end
int interval = slotManagement.getGameInterval();

if (startTime.isAfter(endTime) || startTime.isEqual(endTime) ||
startTime.getDayOfMonth() - LocalDateTime.now().getDayOfMonth() < constantConfig.getAllowedMinimalStartDays()||
LocalDate.now().plusDays(constantConfig.getAllowedMinimalStartDays()).isAfter(startTime.toLocalDate()) ||
startTime.plusHours(Tournament.MINIMUM_TOURNAMENT_DURATION).isAfter(endTime) ||
startTime.getMinute() % interval != 0 || endTime.getMinute() % interval != 0) {
throw new TournamentUpdateException(ErrorCode.TOURNAMENT_INVALID_TIME);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,17 @@ public void updatePPP(TeamUser teamuser, RankRedis myTeam, int enemyScore, Integ
Rank rank = rankRepository.findByUserIdAndSeasonId(myTeam.getUserId(), seasonId)
.orElseThrow(() -> new NotExistException("rank ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.", ErrorCode.NOT_FOUND));
Integer changedPpp = EloRating.pppChange(myPPP, enemyPPP,
teamuser.getTeam().getWin(), Math.abs(teamuser.getTeam().getScore() - enemyScore) == 2);
teamuser.getTeam().getWin(),
Math.abs(teamuser.getTeam().getScore() - enemyScore) == 2);
log.info("update before: intraId: " + teamuser.getUser().getIntraId() + ", win: db(" + rank.getWins()
+ "), redis(" + myTeam.getWins() + "), losses: db(" + rank.getLosses()
+ "), redis(" + myTeam.getLosses() + ")");
rank.modifyUserRank(rank.getPpp() + changedPpp, win, losses);

myTeam.updateRank(changedPpp,
win, losses);

log.info("update after: intraId: " + teamuser.getUser().getIntraId() + ", win: db(" + rank.getWins()
+ "), redis(" + myTeam.getWins() + "), losses: db(" + rank.getLosses()
+ "), redis(" + myTeam.getLosses() + ")");
}

@Transactional
Expand Down Expand Up @@ -130,11 +135,15 @@ public void rollbackRank(TeamUser teamUser, int ppp, Long seasonId) {
int losses = !teamUser.getTeam().getWin() ? myTeam.getLosses() - 1: myTeam.getLosses();
Rank rank = rankRepository.findByUserIdAndSeasonId(myTeam.getUserId(), seasonId)
.orElseThrow(RankNotFoundException::new);
log.info("Before: userId: " + teamUser.getUser().getIntraId() + ", " + "ppp: rank(" + rank.getPpp() + "), redis(" + myTeam.getPpp() + ")");
log.info("Before: userId: " + teamUser.getUser().getIntraId() + ", " + "ppp: rank("
+ rank.getPpp() + "), redis(" + myTeam.getPpp() + "), win: " + myTeam.getWins()
+ ", losses: " + myTeam.getLosses());
rank.modifyUserRank(ppp, win, losses);
myTeam.changedRank(ppp, win, losses);
rankRepository.flush();
updateRankUser(hashkey, RedisKeyManager.getZSetKey(seasonId), teamUser.getUser().getId(), myTeam);
log.info("After: userId: " + teamUser.getUser().getIntraId() + ", " + "ppp: rank(" + rank.getPpp() + "), redis(" + myTeam.getPpp() + ")");
log.info("After: userId: " + teamUser.getUser().getIntraId() + ", " + "ppp: rank("
+ rank.getPpp() + "), redis(" + myTeam.getPpp() + "), win: " + myTeam.getWins()
+ ", losses: " + myTeam.getLosses());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@ protected void configure(HttpSecurity http) throws Exception {
.antMatchers("/pingpong/admin/**").hasRole("ADMIN")
.antMatchers(HttpMethod.PUT, "/pingpong/users/{intraId}").hasAnyRole("USER", "ADMIN")
.antMatchers(HttpMethod.POST, "/pingpong/match").hasAnyRole("USER", "ADMIN")
.antMatchers("/login", "/oauth2/authorization/**", "/","/pingpong/users/oauth/**",
.antMatchers(HttpMethod.POST, "/pingpong/tournaments/{tournamentId}/users").hasAnyRole("USER", "ADMIN")
.antMatchers("/login", "/oauth2/authorization/**", "/","/pingpong/users/oauth/**",
"/pingpong/users/accesstoken", "/actuator/**",
"/swagger-ui/**", "/swagger-ui**", "/v3/api-docs/**", "/v3/api-docs**", "/api-docs").permitAll()
.anyRequest().authenticated()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ALTER TABLE tournament MODIFY COLUMN contents VARCHAR(3000);
Original file line number Diff line number Diff line change
Expand Up @@ -183,10 +183,16 @@ void getUserGameListEndPage() throws Exception {
gameService.createRankResult(rankResultReqDto, adminUserId);

Rank adminUserRank = rankRepository.findByUserIdAndSeasonId(adminUserId, season.getId()).get();
Rank enemyUser1Rank = rankRepository.findByUserIdAndSeasonId(enemyUser1.getId(), season.getId()).get();
System.out.println("MANGO ADMIN1 before DB PPP : " + adminUserRank.getPpp());
System.out.println("MANGO ENEMY1 before DB PPP : " + enemyUser1Rank.getPpp());

Rank enemyUser1Rank = rankRepository.findByUserIdAndSeasonId(enemyUser1.getId(),
season.getId()).get();
// win 1, losses 0, ppp 1020
// System.out.println("MANGO ADMIN1 before DB PPP : " + adminUserRank.getPpp());
assertThat(adminUserRank.getLosses()).isEqualTo(0);
assertThat(adminUserRank.getWins()).isEqualTo(1);
// win 0, losses 1, ppp 982
// System.out.println("MANGO ENEMY1 before DB PPP : " + enemyUser1Rank.getPpp());
assertThat(enemyUser1Rank.getWins()).isEqualTo(0);
assertThat(enemyUser1Rank.getLosses()).isEqualTo(1);

RankGamePPPModifyReqDto modifyReqDto = new RankGamePPPModifyReqDto(game1Info.getMyTeamId(), 1, game1Info.getEnemyTeamId(), 0);
mockMvc.perform(put("/pingpong/admin/games/" + game1Info.getGameId())
Expand All @@ -198,10 +204,18 @@ void getUserGameListEndPage() throws Exception {
GameTeamUser historyGame1 = gameRepository.findTeamsByGameIsIn(List.of(game1Info.getGameId())).get(0);

adminUserRank = rankRepository.findByUserIdAndSeasonId(adminUserId, season.getId()).get();
enemyUser1Rank = rankRepository.findByUserIdAndSeasonId(enemyUser1.getId(), season.getId()).get();
System.out.println("MANGO ADMIN1 after DB PPP : " + adminUserRank.getPpp());
System.out.println("MANGO ENEMY1 after DB PPP : " + enemyUser1Rank.getPpp());

enemyUser1Rank = rankRepository.findByUserIdAndSeasonId(enemyUser1.getId(), season.getId())
.get();
// win 1, losses 0, ppp 1020
// MANGO ADMIN1 after DB
assertThat(adminUserRank.getPpp()).isEqualTo(1020);
assertThat(adminUserRank.getWins()).isEqualTo(1);
assertThat(adminUserRank.getLosses()).isEqualTo(0);
// win 0, losses 1, ppp 982
// MANGO ENEMY1 after DB
assertThat(enemyUser1Rank.getWins()).isEqualTo(0);
assertThat(enemyUser1Rank.getLosses()).isEqualTo(1);
assertThat(enemyUser1Rank.getPpp()).isEqualTo(982);
//////////////////////////////
sleep(1000);
//////////////////////////////
Expand All @@ -216,12 +230,20 @@ void getUserGameListEndPage() throws Exception {
gameService.createRankResult(rankResultReqDto, adminUserId);

adminUserRank = rankRepository.findByUserIdAndSeasonId(adminUserId, season.getId()).get();
Rank enemyUser2Rank = rankRepository.findByUserIdAndSeasonId(enemyUser2.getId(), season.getId()).get();
System.out.println("MANGO ADMIN2 before DB PPP : " + adminUserRank.getPpp());
System.out.println("MANGO ENEMY2 before DB PPP : " + enemyUser2Rank.getPpp());


modifyReqDto = new RankGamePPPModifyReqDto(game2Info.getMyTeamId(), 0, game2Info.getEnemyTeamId(), 1);
Rank enemyUser2Rank = rankRepository.findByUserIdAndSeasonId(enemyUser2.getId(),
season.getId()).get();
// win 1, losses 1, ppp 1001
// MANGO ADMIN2 before DB
assertThat(adminUserRank.getWins()).isEqualTo(1);
assertThat(adminUserRank.getLosses()).isEqualTo(1);
assertThat(adminUserRank.getPpp()).isEqualTo(1001);
// win1, losses 0, ppp 1021
// MANGO ENEMY2 before DB
assertThat(enemyUser2Rank.getWins()).isEqualTo(1);
assertThat(enemyUser2Rank.getLosses()).isEqualTo(0);
assertThat(enemyUser2Rank.getPpp()).isEqualTo(1021);

modifyReqDto = new RankGamePPPModifyReqDto(game2Info.getMyTeamId(), 2, game2Info.getEnemyTeamId(), 1);
mockMvc.perform(put("/pingpong/admin/games/" + game2Info.getGameId())
.content(objectMapper.writeValueAsString(modifyReqDto))
.contentType(MediaType.APPLICATION_JSON)
Expand All @@ -231,7 +253,17 @@ void getUserGameListEndPage() throws Exception {

adminUserRank = rankRepository.findByUserIdAndSeasonId(adminUserId, season.getId()).get();
enemyUser2Rank = rankRepository.findByUserIdAndSeasonId(enemyUser2.getId(), season.getId()).get();
System.out.println("MANGO ADMIN2 after DB PPP : " + adminUserRank.getPpp());
System.out.println("MANGO ENEMY2 after DB PPP : " + enemyUser2Rank.getPpp());
// win 2, losses 0, ppp 1038
// System.out.println("MANGO ADMIN2 after DB PPP : " + adminUserRank.getPpp() + ", WIN: "
// + adminUserRank.getWins() + ", LOSSES" + adminUserRank.getLosses());
assertThat(adminUserRank.getWins()).isEqualTo(2);
assertThat(adminUserRank.getLosses()).isEqualTo(0);
assertThat(adminUserRank.getPpp()).isEqualTo(1038);
// win 0, losses 1, ppp
System.out.println("MANGO ENEMY2 after DB PPP : " + enemyUser2Rank.getPpp() + ", WIN: "
+ enemyUser2Rank.getWins() + ", LOSSES" + enemyUser2Rank.getLosses());
assertThat(enemyUser2Rank.getWins()).isEqualTo(0);
assertThat(enemyUser2Rank.getLosses()).isEqualTo(1);
// assertThat(enemyUser2Rank.getPpp()).isEqualTo()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
import com.gg.server.utils.TestDataUtils;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Random;

import lombok.RequiredArgsConstructor;
import org.apache.http.HttpHeaders;
import org.junit.jupiter.api.BeforeEach;
Expand Down Expand Up @@ -530,6 +532,38 @@ void gameAlreadyExist() throws Exception {

System.out.println(contentAsString);
}

@Test
@DisplayName("์ž˜๋ชป๋œ DTO - ๊ธธ์ด ์ดˆ๊ณผ")
void invalidLength() throws Exception {
//given
String accessToken = testDataUtils.getAdminLoginAccessToken();
int leftLimit = 97; // letter 'a'
int rightLimit = 122; // letter 'z'
int targetStringLength = 3100;
Random random = new Random();
String contents = random.ints(leftLimit, rightLimit + 1)
.limit(targetStringLength)
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
TournamentAdminCreateRequestDto createDto = new TournamentAdminCreateRequestDto(
"1st rookie tournament",
contents,
LocalDateTime.now().plusDays(3).withHour(14).withMinute(0),
LocalDateTime.now().plusDays(3).withHour(16).withMinute(0),
TournamentType.ROOKIE);

String url = "/pingpong/admin/tournaments";
String content = objectMapper.writeValueAsString(createDto);

//when, then
String contentAsString = mockMvc.perform(post(url)
.header(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken)
.contentType(MediaType.APPLICATION_JSON)
.content(content))
.andExpect(status().isBadRequest())
.andReturn().getResponse().getContentAsString();
}
}

@Nested
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,6 @@ class TournamentAdminServiceTest {
@InjectMocks
TournamentAdminService tournamentAdminService;

ReflectionUtilsForUnitTest reflectionUtilsForUnitTest = new ReflectionUtilsForUnitTest();

// ํ† ๋„ˆ๋จผํŠธ ์ƒ์„ฑ ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ
@Nested
@DisplayName("ํ† ๋„ˆ๋จผํŠธ ๊ด€๋ฆฌ์ž ์ƒ์„ฑ ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ")
Expand Down Expand Up @@ -362,7 +360,7 @@ public void success() {
User user = createUser("testUser");
given(tournamentRepository.findById(1L)).willReturn(Optional.of(tournament));
given(userRepository.findByIntraId("testUser")).willReturn(Optional.of(user));

given(tournamentUserRepository.save(any(TournamentUser.class))).willReturn(null);
// when, then
tournamentAdminService.addTournamentUser(1L, requestDto);
}
Expand Down Expand Up @@ -503,7 +501,7 @@ private Tournament createTournament(Long id, TournamentStatus status, LocalDateT
.type(TournamentType.ROOKIE)
.status(status)
.build();
reflectionUtilsForUnitTest.setFieldWithReflection(tournament, "id", id);
ReflectionUtilsForUnitTest.setFieldWithReflection(tournament, "id", id);
return tournament;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;

import com.gg.server.domain.tournament.type.TournamentStatus;
import com.gg.server.domain.user.data.User;
import com.gg.server.global.exception.ErrorCode;
import com.gg.server.global.exception.custom.BusinessException;
import com.gg.server.utils.annotation.UnitTest;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
Expand All @@ -18,7 +18,6 @@
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;


@UnitTest
Expand Down Expand Up @@ -317,4 +316,38 @@ void updateSuccess() {
assertEquals(status, tournament.getStatus());
}
}

@Nested
@DisplayName("UpdateStatus")
class UpdateEndTime {
@Test
@DisplayName("null ํฌ์ธํ„ฐ ์ „๋‹ฌ ์‹œ ์‹คํŒจ")
void nullAddFailed() {
//given
Tournament tournament = tournaments.get(0);

//when
LocalDateTime endTime = null;

//then
BusinessException businessException = assertThrows(BusinessException.class,
() -> tournament.updateEndTime(endTime));
assertEquals(ErrorCode.NULL_POINT, businessException.getErrorCode());
assertEquals(ErrorCode.NULL_POINT.getMessage(), businessException.getMessage());
}

@Test
@DisplayName("endTime ์—…๋ฐ์ดํŠธ ์„ฑ๊ณต")
void updateEndTimeSuccess() {
//given
Tournament tournament = tournaments.get(0);
LocalDateTime endTime = LocalDateTime.now().withMinute(0).withNano(0);

//when
tournament.updateEndTime(endTime);

//then
assertEquals(endTime, tournament.getEndTime());
}
}
}
Loading
Loading