diff --git a/.github/workflows/test-code-validation.yml b/.github/workflows/test-code-validation.yml
index a7b94c572..20862e44d 100644
--- a/.github/workflows/test-code-validation.yml
+++ b/.github/workflows/test-code-validation.yml
@@ -22,7 +22,7 @@ jobs:
- name: mv for separate report name
run: mv ./build/reports/jacoco/unitTest/jacocoTestReport.xml ./build/reports/jacoco/unitTest/unitTestReport.xml
- name: ๐ฒ Upload unitTest coverage to Codecov
- uses: codecov/codecov-action@v2
+ uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: true
@@ -33,7 +33,7 @@ jobs:
- name: ๐จโ๐จโ๐งโ๐ฆ Integration Test with Gradle
run: ./gradlew --console verbose clean integrationTestCoverage
- name: ๐ฒ Upload integrationTest coverage to Codecov
- uses: codecov/codecov-action@v2
+ uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: true
diff --git a/src/main/java/com/gg/server/admin/tournament/dto/TournamentAdminCreateRequestDto.java b/src/main/java/com/gg/server/admin/tournament/dto/TournamentAdminCreateRequestDto.java
index 8719f89fe..2c40d764a 100644
--- a/src/main/java/com/gg/server/admin/tournament/dto/TournamentAdminCreateRequestDto.java
+++ b/src/main/java/com/gg/server/admin/tournament/dto/TournamentAdminCreateRequestDto.java
@@ -19,7 +19,7 @@ public class TournamentAdminCreateRequestDto {
private String title;
@NotNull(message = "๋ด์ฉ์ด ํ์ํฉ๋๋ค.")
- @Length(max = 1000, message = "๋ด์ฉ์ 1000์ ์ด๋ด๋ก ์์ฑํด์ฃผ์ธ์.")
+ @Length(max = 3000, message = "๋ด์ฉ์ 3000์ ์ด๋ด๋ก ์์ฑํด์ฃผ์ธ์.")
private String contents;
@NotNull(message = "์์ ์๊ฐ์ด ํ์ํฉ๋๋ค.")
diff --git a/src/main/java/com/gg/server/admin/tournament/dto/TournamentAdminUpdateRequestDto.java b/src/main/java/com/gg/server/admin/tournament/dto/TournamentAdminUpdateRequestDto.java
index d1b54b4d8..ef7def536 100644
--- a/src/main/java/com/gg/server/admin/tournament/dto/TournamentAdminUpdateRequestDto.java
+++ b/src/main/java/com/gg/server/admin/tournament/dto/TournamentAdminUpdateRequestDto.java
@@ -22,7 +22,7 @@ public class TournamentAdminUpdateRequestDto {
private String title;
@NotNull(message = "๋ด์ฉ์ด ํ์ํฉ๋๋ค.")
- @Length(max = 1000, message = "๋ด์ฉ์ 1000์ ์ด๋ด๋ก ์์ฑํด์ฃผ์ธ์.")
+ @Length(max = 3000, message = "๋ด์ฉ์ 3000์ ์ด๋ด๋ก ์์ฑํด์ฃผ์ธ์.")
private String contents;
@NotNull(message = "์์ ์๊ฐ์ด ํ์ํฉ๋๋ค.")
diff --git a/src/main/java/com/gg/server/domain/match/service/MatchFindService.java b/src/main/java/com/gg/server/domain/match/service/MatchFindService.java
index 16ddb0543..46f675a89 100644
--- a/src/main/java/com/gg/server/domain/match/service/MatchFindService.java
+++ b/src/main/java/com/gg/server/domain/match/service/MatchFindService.java
@@ -90,8 +90,6 @@ public SlotStatusResponseListDto getAllMatchStatus(UserDto userDto, Option optio
List games = gameRepository.findAllBetween(slotGenerator.getNow(), slotGenerator.getMaxTime());
slotGenerator.addPastSlots();
slotGenerator.addMatchedSlots(games);
- List tournaments = tournamentRepository.findAllByStatusIsNot(TournamentStatus.END);
- slotGenerator.addTournamentSlots(tournaments);
Optional myGame = gameRepository.findByStatusTypeAndUserId(StatusType.BEFORE, userDto.getId());
Set gameTimes = games.stream().map(Game::getStartTime).collect(Collectors.toSet());
diff --git a/src/main/java/com/gg/server/domain/match/service/MatchTournamentService.java b/src/main/java/com/gg/server/domain/match/service/MatchTournamentService.java
index 247de3da3..376b7fc4a 100644
--- a/src/main/java/com/gg/server/domain/match/service/MatchTournamentService.java
+++ b/src/main/java/com/gg/server/domain/match/service/MatchTournamentService.java
@@ -20,6 +20,7 @@
import com.gg.server.domain.tournament.data.Tournament;
import com.gg.server.domain.tournament.data.TournamentGame;
import com.gg.server.domain.tournament.data.TournamentGameRepository;
+import com.gg.server.domain.tournament.data.TournamentUser;
import com.gg.server.domain.tournament.exception.TournamentGameNotFoundException;
import com.gg.server.domain.tournament.type.TournamentRound;
import com.gg.server.domain.tournament.type.TournamentStatus;
@@ -31,9 +32,7 @@
import javax.transaction.Transactional;
import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
+import java.util.*;
import java.util.stream.Collectors;
import static com.gg.server.domain.match.type.TournamentMatchStatus.*;
@@ -101,25 +100,22 @@ public void matchGames(Tournament tournament, TournamentRound round) {
int gameInterval = slotManagement.getGameInterval();
List allTournamentGames = tournamentGameRepository.findAllByTournamentId(tournament.getId());
List tournamentGames = findSameRoundGames(allTournamentGames, round.getRoundNumber());
- List previousRoundTournamentGames = findSameRoundGames(allTournamentGames, TournamentRound.getPreviousRoundNumber(round));
- List notiUsers = new ArrayList<>();
+ List players = findSortedPlayers(tournament, round);
LocalDateTime startTime = calculateStartTime(tournament, round, gameInterval);
for (int i = 0; i < tournamentGames.size(); ++i) {
Game game = new Game(season, StatusType.BEFORE, Mode.TOURNAMENT, startTime, startTime.plusMinutes(gameInterval));
Team team1 = new Team(game, -1, false);
Team team2 = new Team(game, -1, false);
- User user1 = findMatchUser(previousRoundTournamentGames, i * 2, tournament);
- User user2 = findMatchUser(previousRoundTournamentGames, i * 2 + 1, tournament);
+ User user1 = players.get(i * 2);
+ User user2 = players.get(i * 2 + 1);
new TeamUser(team1, user1);
new TeamUser(team2, user2);
gameRepository.save(game);
tournamentGames.get(i).updateGame(game);
- notiUsers.add(user1);
- notiUsers.add(user2);
startTime = startTime.plusMinutes((long) gameInterval);
}
- notiUsers.stream().distinct()
+ players.stream().distinct()
.forEach(user -> notiAdminService.sendAnnounceNotiToUser(new SendNotiAdminRequestDto(user.getIntraId(), NotiType.TOURNAMENT_GAME_MATCHED.getMessage())));
}
@@ -166,12 +162,39 @@ private LocalDateTime calculateStartTime(Tournament tournament, TournamentRound
return lastGame.getGame().getEndTime().plusMinutes(gameInterval);
}
- private User findMatchUser(List previousTournamentGames, int index, Tournament tournament) {
- if (previousTournamentGames.isEmpty()) {
- return tournament.getTournamentUsers().get(index).getUser();
+ /**
+ * ํ ๋๋จผํธ ๋ผ์ด๋์ ๋งค์นญ๋ ํ๋ ์ด์ด๋ฅผ ์ฐพ๋๋ค.
+ * @param tournament ํ ๋๋จผํธ
+ * @param round ๋งค์นญํ ํ ๋๋จผํธ ๋ผ์ด๋
+ * @return ํ ๋๋จผํธ ๋ผ์ด๋์ ๋งค์นญ๋ ํ๋ ์ด์ด List (์ ๋ ฌ๋ ์ํ)
+ */
+ private List findSortedPlayers(Tournament tournament, TournamentRound round) {
+ List players = new ArrayList<>();
+
+ if (TournamentRound.QUARTER_FINAL_1.getRoundNumber() == round.getRoundNumber()) {
+ Map randomNumbers = new LinkedHashMap<>();
+ Random random = new Random();
+ while (randomNumbers.size() < Tournament.ALLOWED_JOINED_NUMBER) {
+ int randomNumber = random.nextInt(Tournament.ALLOWED_JOINED_NUMBER);
+ if (!randomNumbers.containsValue(randomNumber)) {
+ randomNumbers.put(randomNumbers.size(), randomNumber);
+ }
+ }
+ for (Integer randomNumber : randomNumbers.values()) {
+ List tournamentUsers = tournament.getTournamentUsers();
+ User user = tournamentUsers.get(randomNumber).getUser();
+ players.add(user);
+ }
+ } else {
+ List previousRoundTournamentGames = findSameRoundGames(tournament.getTournamentGames(), TournamentRound.getPreviousRoundNumber(round));
+ int roundNum = round.getRoundNumber();
+ for (int i = 0; i < roundNum; ++i) {
+ User user = getWinningTeam(previousRoundTournamentGames.get(i).getGame())
+ .getTeamUsers().get(0).getUser();
+ players.add(user);
+ }
}
- return getWinningTeam(previousTournamentGames.get(index).getGame())
- .getTeamUsers().get(0).getUser();
+ return players;
}
/**
@@ -206,9 +229,9 @@ private void closeTournament(Tournament tournament, Game finalGame) {
/**
* ๊ฐ์ round์ ํ ๋๋จผํธ ๊ฒ์์ ์ฐพ๋๋ค.
- * @param tournamentGames - ํ ๋๋จผํธ ๊ฒ์ List
- * @param roundNum - ํ ๋๋จผํธ ๋ผ์ด๋ number
- * @return - ๊ฐ์ roundNum์ tournamentGame List
+ * @param tournamentGames ํ ๋๋จผํธ ๊ฒ์ List
+ * @param roundNum ํ ๋๋จผํธ ๋ผ์ด๋ number (2, 4, 8, ...) (์๋ชป๋ roundNum์ผ ๊ฒฝ์ฐ Empty List ๋ฐํํ๋ค.)
+ * @return tournamentGames ์ค roundNum๊ณผ ๋์ผํ roundNum์ ๊ฐ์ง round ์์ผ๋ก ์ ๋ ฌ๋ tournamentGame List ๋ฐํ
*/
private List findSameRoundGames(List tournamentGames, int roundNum) {
return tournamentGames.stream()
diff --git a/src/main/java/com/gg/server/domain/match/utils/SlotGenerator.java b/src/main/java/com/gg/server/domain/match/utils/SlotGenerator.java
index 99918c179..f9272111c 100644
--- a/src/main/java/com/gg/server/domain/match/utils/SlotGenerator.java
+++ b/src/main/java/com/gg/server/domain/match/utils/SlotGenerator.java
@@ -61,25 +61,6 @@ public void addMatchedSlots(List games) {
new SlotStatusDto(e.getStartTime(), SlotStatus.CLOSE, interval)));
}
- /**
- * BEFORE, LIVE ์ํ์ ํ ๋๋จผํธ ์งํ ์๊ฐ์ ์ฌ๋กฏ์ blockํจ
- */
- public void addTournamentSlots(List tournaments) {
- for (Tournament tournament : tournaments) {
- LocalDateTime startTime = tournament.getStartTime();
- int startTimeMinute = startTime.getMinute();
- startTimeMinute = startTimeMinute - (startTimeMinute % interval);
- startTime = startTime.withMinute(startTimeMinute);
- LocalDateTime endTime = tournament.getEndTime();
- int endTimeMinute = endTime.getMinute();
- endTimeMinute = endTimeMinute + (interval - (endTimeMinute % interval));
- endTime = endTime.withMinute(endTimeMinute);
- for (LocalDateTime time = startTime; time.isBefore(endTime); time = time.plusMinutes(interval)) {
- slots.put(time, new SlotStatusDto(time, SlotStatus.CLOSE, interval));
- }
- }
- }
-
public void addMySlots(Game myGame) {
slots.put(myGame.getStartTime(),
new SlotStatusDto(myGame.getStartTime(), myGame.getEndTime(),
diff --git a/src/main/java/com/gg/server/domain/rank/controller/RankV2Controller.java b/src/main/java/com/gg/server/domain/rank/controller/RankV2Controller.java
index a9ab21c2b..1e4081e52 100644
--- a/src/main/java/com/gg/server/domain/rank/controller/RankV2Controller.java
+++ b/src/main/java/com/gg/server/domain/rank/controller/RankV2Controller.java
@@ -12,7 +12,9 @@
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@@ -37,7 +39,7 @@ public ExpRankPageResponseDto getExpRankPage(@Valid PageRequestDto pageRequestDt
*/
@GetMapping("/ranks/{gameType}")
public RankPageResponseDto getRankPage(@Valid PageRequestDto pageRequestDto, @Parameter(hidden = true) @Login UserDto user,
- Long season, String gameType){
+ @RequestParam Long season, @PathVariable String gameType){
PageRequest pageRequest = PageRequest.of(pageRequestDto.getPage() - 1, pageRequestDto.getSize());
return rankService.getRankPageV2(pageRequest, user, season);
}
diff --git a/src/main/java/com/gg/server/domain/rank/data/RankRepository.java b/src/main/java/com/gg/server/domain/rank/data/RankRepository.java
index 1ef5d5f78..a453cd817 100644
--- a/src/main/java/com/gg/server/domain/rank/data/RankRepository.java
+++ b/src/main/java/com/gg/server/domain/rank/data/RankRepository.java
@@ -45,8 +45,8 @@ public interface RankRepository extends JpaRepository {
+ " GROUP BY p.user_id) pg "
+ "ON pg.user_id = u.id "
+ "WHERE r.season_id = :seasonId AND (r.losses > 0 OR r.wins > 0) "
- + "LIMIT :pageSize OFFSET :pageNum ", nativeQuery = true)
- List findPppRankBySeasonId(@Param("pageNum")int pageNum, @Param("pageSize")int pageSize, @Param("seasonId") Long seasonId);
+ + "LIMIT :limit OFFSET :offset ", nativeQuery = true)
+ List findPppRankBySeasonId(@Param("offset")int offset, @Param("limit")int limit, @Param("seasonId") Long seasonId);
@Query(value = "SELECT count(*) "
+ "FROM Ranks r "
diff --git a/src/main/java/com/gg/server/domain/rank/service/RankService.java b/src/main/java/com/gg/server/domain/rank/service/RankService.java
index 7b53ff264..4042287a1 100644
--- a/src/main/java/com/gg/server/domain/rank/service/RankService.java
+++ b/src/main/java/com/gg/server/domain/rank/service/RankService.java
@@ -86,11 +86,13 @@ public ExpRankPageResponseDto getExpRankPage(PageRequest pageRequest, UserDto cu
users.getTotalPages(),
expRankDtos);
}
+
@Cacheable(value = "expRanking", cacheManager = "gameCacheManager",
- key = "#pageRequest.pageNumber + #pageRequest.pageSize")
+ key = "#pageRequest.pageNumber + #pageRequest.pageSize.toString()")
public List getExpRankList(PageRequest pageRequest) {
Season curSeason = seasonFindService.findCurrentSeason(LocalDateTime.now());
- List expRankV2Dtos = userRepository.findExpRank(pageRequest.getPageNumber(), pageRequest.getPageSize(), curSeason.getId());
+ int pageOffset = pageRequest.getPageNumber() * pageRequest.getPageSize();
+ List expRankV2Dtos = userRepository.findExpRank(pageOffset, pageRequest.getPageSize(), curSeason.getId());
return expRankV2Dtos.stream().map(ExpRankDto::from).collect(Collectors.toList());
}
@@ -103,7 +105,7 @@ public List getExpRankList(PageRequest pageRequest) {
*/
@Transactional(readOnly = true)
@Cacheable(value = "ranking", cacheManager = "gameCacheManager",
- key = "#pageRequest.pageSize + #pageRequest.pageNumber + #curUser.id + #seasonId")
+ key = "#pageRequest.pageSize.toString() + #pageRequest.pageNumber + #curUser.id + #seasonId")
public RankPageResponseDto getRankPageV2(PageRequest pageRequest, UserDto curUser, Long seasonId) {
Season season;
if (seasonId == null || seasonId == 0) {
@@ -119,7 +121,8 @@ public RankPageResponseDto getRankPageV2(PageRequest pageRequest, UserDto curUse
int myRank = rankRepository.findRankByUserIdAndSeasonId(curUser.getId(), season.getId())
.orElse(-1);
- List rankList = rankRepository.findPppRankBySeasonId(pageRequest.getPageNumber(), pageRequest.getPageSize(), season.getId())
+ int pageOffset = pageRequest.getPageNumber() * pageRequest.getPageSize();
+ List rankList = rankRepository.findPppRankBySeasonId(pageOffset, pageRequest.getPageSize(), season.getId())
.stream().map(RankDto::from).collect(Collectors.toList());
return new RankPageResponseDto(myRank, pageRequest.getPageNumber() + 1, totalPage, rankList);
}
diff --git a/src/main/java/com/gg/server/domain/tournament/controller/TournamentController.java b/src/main/java/com/gg/server/domain/tournament/controller/TournamentController.java
index c670119e9..42859da36 100644
--- a/src/main/java/com/gg/server/domain/tournament/controller/TournamentController.java
+++ b/src/main/java/com/gg/server/domain/tournament/controller/TournamentController.java
@@ -35,7 +35,7 @@ public class TournamentController {
*/
@GetMapping
public ResponseEntity getAllTournamentList(@ModelAttribute @Valid TournamentFilterRequestDto tournamentFilterRequestDto){
- Pageable pageRequest = PageRequest.of(tournamentFilterRequestDto.getPage() - 1, tournamentFilterRequestDto.getSize(), Sort.by("startTime").descending());
+ Pageable pageRequest = PageRequest.of(tournamentFilterRequestDto.getPage() - 1, tournamentFilterRequestDto.getSize(), Sort.by("startTime").ascending());
return ResponseEntity.status(HttpStatus.OK).
body(tournamentService.getAllTournamentList(pageRequest, tournamentFilterRequestDto.getType(), tournamentFilterRequestDto.getStatus()));
}
diff --git a/src/main/java/com/gg/server/domain/tournament/data/Tournament.java b/src/main/java/com/gg/server/domain/tournament/data/Tournament.java
index 90248417e..a81736da4 100644
--- a/src/main/java/com/gg/server/domain/tournament/data/Tournament.java
+++ b/src/main/java/com/gg/server/domain/tournament/data/Tournament.java
@@ -56,7 +56,7 @@ public class Tournament extends BaseTimeEntity {
private String title;
@NotNull
- @Column(name = "contents", length = 1000)
+ @Column(name = "contents", length = 3000)
private String contents;
@NotNull
diff --git a/src/main/java/com/gg/server/domain/user/data/UserRepository.java b/src/main/java/com/gg/server/domain/user/data/UserRepository.java
index 2f0a1f310..f6750bb6a 100644
--- a/src/main/java/com/gg/server/domain/user/data/UserRepository.java
+++ b/src/main/java/com/gg/server/domain/user/data/UserRepository.java
@@ -45,7 +45,7 @@ public interface UserRepository extends JpaRepository {
+ "FROM User u LEFT JOIN Ranks r "
+ "ON u.id = r.user_id "
+ "WHERE r.season_id = :seasonId AND u.total_exp > 0 "
- + "LIMIT :pageSize OFFSET :pageNum", nativeQuery = true)
- List findExpRank(@Param("pageNum")int pageNum, @Param("pageSize")int pageSize, @Param("seasonId")Long seasonId);
+ + "LIMIT :limit OFFSET :offset", nativeQuery = true)
+ List findExpRank(@Param("offset")int offset, @Param("limit")int limit, @Param("seasonId")Long seasonId);
}
diff --git a/src/main/resources/db/migration/V3__migration_42gg_5th.sql b/src/main/resources/db/migration/V1.1__migration_42gg_5th.sql
similarity index 100%
rename from src/main/resources/db/migration/V3__migration_42gg_5th.sql
rename to src/main/resources/db/migration/V1.1__migration_42gg_5th.sql
diff --git a/src/main/resources/db/migration/V1.1__migration_42gg_v2.sql b/src/main/resources/db/migration/V1.1__migration_42gg_v2.sql
deleted file mode 100644
index fcd7a9a6e..000000000
--- a/src/main/resources/db/migration/V1.1__migration_42gg_v2.sql
+++ /dev/null
@@ -1,337 +0,0 @@
-### delete key ###
-alter table current_match drop foreign key FK4qtnfmeqkj0iy1qeghm6ywb6n;
-alter table current_match drop foreign key FKl53dqtyiaemmm1tqdsdj55ng2;
-alter table current_match drop foreign key FKmaa4irkiicemkq2gl3t0bqn6a;
-alter table slot_team_user drop foreign key FKg9emy523qv3kx98dkb3xc8m9x;
-alter table slot_team_user drop foreign key FKkr5xbxj8y5gcqivythvkwxmqw;
-alter table slot_team_user drop foreign key FKpugruruole12eeo3hvqpt9s42;
-alter table team drop foreign key FK23mky06ol3wc1dj8b11bknntp;
-alter table noti drop foreign key FKehey4772h8bhsaix4x6tkrjjc;
-alter table game drop foreign key FKjnhlg2dqkrjvaai3e70ymw339;
-alter table game drop foreign key FKehwjicpbm71ks5yyuo7co77qj;
-alter table game drop foreign key FKgb66of4ini2gvvu76o8pufcr5;
-alter table pchange drop foreign key FKqu8jxac7ewvc26oc7hukcixxd;
-alter table feedback drop foreign key FK7k33yw505d347mw3avr93akao;
-alter table noti drop foreign key FKbjyk0xemxlmv8f6n7nxvx2akk;
-alter table pchange drop foreign key FKjld3ge0jy4tjbqxso9wpck9r1;
-alter table ranks drop foreign key FK9baj7lwqe9acxbeplowb01mn9;
-
-
-drop table deleted_slot_team_user;
-drop table current_match;
-drop table event_user;
-drop table ping_pong_event;
-drop table user_refresh_token;
-drop table visit;
-####
-
-### INT -> BIGINT ###
-ALTER TABLE announcement MODIFY id BIGINT NOT NULL AUTO_INCREMENT;
-ALTER TABLE feedback MODIFY id BIGINT NOT NULL AUTO_INCREMENT;
-ALTER TABLE game MODIFY id BIGINT NOT NULL AUTO_INCREMENT;
-ALTER TABLE noti MODIFY id BIGINT NOT NULL AUTO_INCREMENT;
-ALTER TABLE pchange MODIFY id BIGINT NOT NULL AUTO_INCREMENT;
-ALTER TABLE ranks MODIFY id BIGINT NOT NULL AUTO_INCREMENT;
-ALTER TABLE season MODIFY id BIGINT NOT NULL AUTO_INCREMENT;
-ALTER TABLE slot_management MODIFY id BIGINT NOT NULL AUTO_INCREMENT;
-ALTER TABLE team MODIFY id BIGINT NOT NULL AUTO_INCREMENT;
-ALTER TABLE slot_team_user CHANGE COLUMN team_user_id id BIGINT NOT NULL AUTO_INCREMENT;
-ALTER TABLE user MODIFY id BIGINT NOT NULL AUTO_INCREMENT;
-
-### team ###
-SET SQL_SAFE_UPDATES=0;
-alter table team add column game_id BIGINT;
-UPDATE team t
- INNER JOIN game g ON g.slot_id = t.slot_id
- SET t.game_id = g.id;
-
-DELETE FROM team
-WHERE slot_id NOT IN (
- SELECT slot_id FROM game);
-
-ALTER TABLE team
- ADD CONSTRAINT fk_team_game_game_id
- FOREIGN KEY (game_id) REFERENCES game(id)
- ON UPDATE CASCADE
- ON DELETE CASCADE;
-
-alter table team modify score INT;
-alter table team modify game_id BIGINT not null;
-alter table team drop column slot_id;
-alter table team drop head_count;
-alter table team drop team_ppp;
-SET SQL_SAFE_UPDATES=1;
-####
-
-### team_user ###
-alter table slot_team_user modify team_id BIGINT not null;
-alter table slot_team_user modify user_id BIGINT not null;
-####
-
-### announcement ###
-SET SQL_SAFE_UPDATES=0;
-alter table announcement modify content VARCHAR(1000) not null;
-alter table announcement modify creator_intra_id VARCHAR(30) not null;
-alter table announcement modify deleter_intra_id VARCHAR(30);
-alter table announcement change deleted_time deleted_at DATETIME;
-alter table announcement drop column is_del;
-alter table announcement change column created_time created_at DATETIME not null;
-alter table announcement add column modified_at DATETIME;
-update announcement set modified_at=deleted_at where modified_at is null;
-SET SQL_SAFE_UPDATES=1;
-####
-
-### feed_back ###
-SET SQL_SAFE_UPDATES=0;
-ALTER TABLE feedback CHANGE user_id intra_id VARCHAR(100);
-alter table feedback add column user_id BIGINT;
-
-UPDATE feedback f
- INNER JOIN user u
-ON f.intra_id = u.intra_id
- SET f.user_id = u.id;
-
-alter table feedback drop intra_id;
-
-alter table feedback
- add constraint fk_feedback_user_user_id
- foreign key (user_id) REFERENCES user(id)
- ON UPDATE CASCADE;
-
-ALTER TABLE feedback CHANGE category enum_category INT;
-alter table feedback add column category VARCHAR(15) not null;
-update feedback set category="BUG" where enum_category=0;
-update feedback set category="GAMERESULT" where enum_category=1;
-update feedback set category="COMPLAINT" where enum_category=2;
-update feedback set category="CHEERS" where enum_category=3;
-update feedback set category="OPINION" where enum_category=4;
-update feedback set category="ETC" where enum_category=5;
-alter table feedback drop enum_category;
-SET SQL_SAFE_UPDATES=1;
-####
-
-### GAME ###
-SET SQL_SAFE_UPDATES=0;
-alter table game ADD COLUMN start_time DATETIME;
-alter table game add column end_time DATETIME;
-
-alter table game change season season_id bigint not null;
-
-alter table game
- add constraint fk_game_season_season_id
- foreign key (season_id) REFERENCES season(id)
- ON UPDATE CASCADE;
-
-ALTER TABLE game CHANGE status enum_status INT;
-alter table game add column status VARCHAR(10) not null;
-update game set status="LIVE" where enum_status=0;
-update game set status="WAIT" where enum_status=1;
-update game set status="END" where enum_status=2;
-alter table game drop enum_status;
-
-ALTER TABLE game CHANGE mode enum_mode INT;
-alter table game add column mode VARCHAR(10) not null;
-update game set mode="NORMAL" where enum_mode=1;
-update game set mode="RANK" where enum_mode=2;
-alter table game drop column enum_mode;
-
-UPDATE game g
- INNER JOIN slot s ON g.slot_id = s.id
- SET g.start_time = s.time, g.end_time = s.end_time;
-
-alter table game modify start_time DATETIME not null;
-
-alter table game drop column team1_id;
-alter table game drop column team2_id;
-alter table game drop column slot_id;
-alter table game drop column time;
-alter table game drop type;
-SET SQL_SAFE_UPDATES=1;
-####
-
-### NOTI ###
-SET SQL_SAFE_UPDATES=0;
-ALTER TABLE noti CHANGE user_id intra_id VARCHAR(100);
-alter table noti add column user_id BIGINT;
-
-UPDATE noti n
- INNER JOIN user u
-ON n.intra_id = u.intra_id
- SET n.user_id = u.id;
-
-alter table noti
- add constraint fk_noti_user_user_id
- foreign key (user_id) REFERENCES user(id)
- ON UPDATE CASCADE;
-
-ALTER TABLE noti CHANGE noti_type enum_noti_type INT;
-alter table noti add column noti_type VARCHAR(15) not null;
-update noti set noti_type="MATCHED" where enum_noti_type=0;
-update noti set noti_type="CANCELEDBYMAN" where enum_noti_type=1;
-update noti set noti_type="CANCELEDBYTIME" where enum_noti_type=2;
-update noti set noti_type="IMMINENT" where enum_noti_type=3;
-update noti set noti_type="ANNOUNCE" where enum_noti_type=4;
-alter table noti drop column enum_noti_type;
-
-alter table noti drop intra_id;
-alter table noti drop slot_id;
-delete from noti;
-ALTER TABLE noti AUTO_INCREMENT = 1;
-SET SQL_SAFE_UPDATES=1;
-####
-
-### PCHANGE ###
-SET SQL_SAFE_UPDATES=0;
-ALTER TABLE pchange CHANGE user_id intra_id VARCHAR(100);
-alter table pchange add column user_id BIGINT;
-
-UPDATE pchange p
- INNER JOIN user u
-ON p.intra_id = u.intra_id
- SET p.user_id = u.id;
-
-alter table pchange modify game_id bigint not null;
-alter table pchange
- add constraint fk_pchange_user_user_id
- foreign key (user_id) REFERENCES user(id)
- ON UPDATE CASCADE;
-
-alter table pchange
- add constraint fk_pchange_game_game_id
- foreign key (game_id) REFERENCES game(id)
- ON UPDATE CASCADE;
-
-alter table pchange modify user_id BIGINT not null;
-alter table pchange modify game_id BIGINT not null;
-
-alter table pchange drop intra_id;
-alter table pchange drop ppp_change;
-alter table pchange drop exp_change;
-alter table pchange change exp_result exp INT not null;
-SET SQL_SAFE_UPDATES=1;
-####
-
-### RANKS ###
-SET SQL_SAFE_UPDATES=0;
-ALTER TABLE ranks CHANGE user_id intra_id VARCHAR(100);
-alter table ranks add column user_id BIGINT;
-
-UPDATE ranks r
- INNER JOIN user u
-ON r.intra_id = u.intra_id
- SET r.user_id = u.id;
-
-alter table ranks modify user_id bigint not null;
-alter table ranks
- add constraint fk_ranks_user_user_id
- foreign key (user_id) REFERENCES user(id)
- ON UPDATE CASCADE;
-
-alter table ranks modify season_id bigint not null;
-alter table ranks
- add constraint fk_ranks_season_season_id
- foreign key (season_id) REFERENCES season(id)
- ON UPDATE CASCADE;
-
-alter table ranks drop intra_id;
-alter table ranks drop game_type;
-alter table ranks drop racket_type;
-####
-
-### season ###
-alter table season modify season_name VARCHAR(20) not null;
-alter table season drop column season_mode;
-####
-
-### team_user ###
-alter table slot_team_user rename to team_user;
-
-alter table team_user drop created_at;
-alter table team_user drop modified_at;
-alter table team_user drop slot_id;
-####
-
-### user ###
-ALTER TABLE user CHANGE racket_type enum_racket_type INT;
-alter table user add column racket_type VARCHAR(10);
-update user set racket_type="PENHOLDER" where enum_racket_type=0;
-update user set racket_type="SHAKEHAND" where enum_racket_type=1;
-update user set racket_type="DUAL" where enum_racket_type=2;
-update user set racket_type="NONE" where enum_racket_type=3;
-alter table user drop column enum_racket_type;
-
-ALTER TABLE user CHANGE role_type enum_role_type INT;
-alter table user add column role_type VARCHAR(10);
-update user set role_type="ADMIN" where enum_role_type=0;
-update user set role_type="USER" where enum_role_type=1;
-update user set role_type="USER" where enum_role_type=2;
-alter table user drop column enum_role_type;
-
-alter table user add column kakao_id BIGINT;
-
-alter table user drop column status_message;
-alter table user modify intra_id VARCHAR(30) not null;
-alter table user modify e_mail VARCHAR(60);
-alter table user modify racket_type VARCHAR(10);
-alter table user modify role_type VARCHAR(10) not null;
-alter table user modify sns_noti_opt VARCHAR(10);
-alter table user drop ppp;
-
-alter table ranks drop ranking;
-####
-
-### add Penalty table ###
-DROP TABLE IF EXISTS `penalty`;
-
-CREATE TABLE `penalty` (
- `id` BIGINT NOT NULL AUTO_INCREMENT,
- `user_id` BIGINT NOT NULL,
- `penalty_type` VARCHAR(20) NOT NULL,
- `message` VARCHAR(100) NULL,
- `start_time` DATETIME NOT NULL,
- `penalty_time` INT NOT NULL,
- `created_at` DATETIME NOT NULL,
- `modified_at` DATETIME NOT NULL,
- PRIMARY KEY (`id`),
- INDEX `fk_penalty_user_user_id_idx` (`user_id` ASC) VISIBLE,
- CONSTRAINT `fk_penalty_user_user_id`
- FOREIGN KEY (`user_id`)
- REFERENCES user (`id`)
- ON DELETE NO ACTION
- ON UPDATE NO ACTION);
-####
-
-### slot_management ###
-alter table slot_management add column start_time DATETIME;
-alter table slot_management add column end_time DATETIME;
-
-SET SQL_SAFE_UPDATES=0;
-DELETE t1
-FROM slot_management t1
-JOIN (SELECT MAX(created_at) AS max_created_at FROM slot_management) t2
-WHERE t1.created_at < t2.max_created_at;
-SET SQL_SAFE_UPDATES=0;
-
-UPDATE slot_management
-SET start_time = created_at;
-
-alter table slot_management modify start_time DATETIME NOT NULL;
-####
-
-### drop tables ###
-drop table slot;
-####
-
-### views ###
-create or replace view v_teamuser as
-select team.id teamId, team.score, team.win, g.id gameId, g.season_id seasonId, g.start_time startTime, g.status, g.mode, tu.user_id userId, u.intra_id intraId, u.image_uri image, u.total_exp
-from team, team_user tu, user u, game g
-where team.id=tu.team_id and u.id=tu.user_id and g.id=team.game_id;
-
-create or replace view v_rank_game_detail as
-select team.id teamId, team.score, team.win, g.id gameId, g.season_id seasonId, g.start_time startTime, g.end_time endTime, g.status, g.mode,
- tu.user_id userId, u.intra_id intraId, u.image_uri image, u.total_exp,
- r.wins, r.losses
-from team, team_user tu, user u, game g, ranks r
-where team.id=tu.team_id and u.id=tu.user_id and g.id=team.game_id and r.user_id = u.id and r.season_id = g.season_id;
-####
\ No newline at end of file
diff --git a/src/main/resources/db/migration/V1.2__team_and_teamuser_cascade.sql b/src/main/resources/db/migration/V1.2__team_and_teamuser_cascade.sql
deleted file mode 100644
index 3281984c1..000000000
--- a/src/main/resources/db/migration/V1.2__team_and_teamuser_cascade.sql
+++ /dev/null
@@ -1,19 +0,0 @@
-SET SQL_SAFE_UPDATES=0;
-
-DELETE FROM team_user
-WHERE team_id NOT IN (SELECT id FROM team);
-delete FROM game
-WHERE id NOT IN (SELECT game_id FROM team);
-
-SET SQL_SAFE_UPDATES=1;
-
-alter table team_user
-add constraint fk_team_user_team_team_id
-foreign key (team_id) REFERENCES team(id)
-ON UPDATE CASCADE
-ON DELETE CASCADE;
-
-alter table team_user
-add constraint fk_team_user_user_user_id
-foreign key (user_id) REFERENCES user(id)
-ON UPDATE CASCADE;
\ No newline at end of file
diff --git a/src/main/resources/db/migration/V3.1__update_tournament_content_column.sql b/src/main/resources/db/migration/V1.2__update_tournament_content_column.sql
similarity index 100%
rename from src/main/resources/db/migration/V3.1__update_tournament_content_column.sql
rename to src/main/resources/db/migration/V1.2__update_tournament_content_column.sql
diff --git a/src/main/resources/db/migration/V1.3__add_prevent_delete_season_trigger.sql b/src/main/resources/db/migration/V1.3__add_prevent_delete_season_trigger.sql
deleted file mode 100644
index f5f6ef6ee..000000000
--- a/src/main/resources/db/migration/V1.3__add_prevent_delete_season_trigger.sql
+++ /dev/null
@@ -1,12 +0,0 @@
-DELIMITER //
-
-CREATE TRIGGER prevent_delete_season
-BEFORE DELETE ON season
-FOR EACH ROW
-BEGIN
- IF OLD.start_time < NOW() THEN
- SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Cannot delete a Season record with startTime in the past';
- END IF;
-END //
-
-DELIMITER ;
\ No newline at end of file
diff --git a/src/main/resources/db/migration/V1.4__pchange_add_is_checked_column.sql b/src/main/resources/db/migration/V1.4__pchange_add_is_checked_column.sql
deleted file mode 100644
index 47bc6e9bb..000000000
--- a/src/main/resources/db/migration/V1.4__pchange_add_is_checked_column.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-ALTER TABLE pchange
- ADD COLUMN is_checked BIT(1) NOT NULL DEFAULT 0 AFTER user_id;
-UPDATE pchange SET is_checked = 1;
\ No newline at end of file
diff --git a/src/main/resources/db/migration/V1.5__insert_pchange_normal_ppp_result.sql b/src/main/resources/db/migration/V1.5__insert_pchange_normal_ppp_result.sql
deleted file mode 100644
index 2fb7d71b2..000000000
--- a/src/main/resources/db/migration/V1.5__insert_pchange_normal_ppp_result.sql
+++ /dev/null
@@ -1,19 +0,0 @@
-UPDATE pchange p
-SET ppp_result = COALESCE(
- (
- SELECT subquery.ppp_result
- FROM (
- SELECT p2.ppp_result
- FROM pchange p2
- INNER JOIN game AS g ON p.game_id = g.id
- WHERE p.user_id = p2.user_id
- AND g.season_id = (SELECT season_id FROM game WHERE id = p.game_id)
- AND p2.created_at < p.created_at
- AND p2.ppp_result != 0
- ORDER BY p2.created_at DESC
- LIMIT 1
- ) AS subquery
- ),
- 1000
-)
-WHERE ppp_result = 0 OR ppp_result IS NULL;
diff --git a/src/main/resources/db/migration/V1__init.sql b/src/main/resources/db/migration/V1__init.sql
index e69de29bb..ef00eb70c 100644
--- a/src/main/resources/db/migration/V1__init.sql
+++ b/src/main/resources/db/migration/V1__init.sql
@@ -0,0 +1,280 @@
+CREATE TABLE `user` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `created_at` datetime NOT NULL,
+ `modified_at` datetime DEFAULT NULL,
+ `e_mail` varchar(60) DEFAULT NULL,
+ `image_uri` varchar(255) DEFAULT NULL,
+ `intra_id` varchar(30) NOT NULL,
+ `total_exp` int DEFAULT NULL,
+ `sns_noti_opt` varchar(10) DEFAULT NULL,
+ `racket_type` varchar(10) DEFAULT NULL,
+ `role_type` varchar(10) NOT NULL,
+ `kakao_id` bigint DEFAULT NULL,
+ `background` varchar(255) DEFAULT 'BASIC',
+ `edge` varchar(255) DEFAULT 'BASIC',
+ `gg_coin` int DEFAULT '0',
+ `text_color` varchar(10) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `UK_l5220ph2ndjh75g6ya39wy519` (`intra_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+
+CREATE TABLE `season` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `end_time` datetime NOT NULL,
+ `ppp_gap` int NOT NULL,
+ `season_name` varchar(20) NOT NULL,
+ `start_ppp` int NOT NULL,
+ `start_time` datetime NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+
+CREATE TABLE `tier` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `image_uri` varchar(255) DEFAULT NULL,
+ `name` varchar(255) DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+
+CREATE TABLE `announcement` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `content` varchar(1000) NOT NULL,
+ `creator_intra_id` varchar(30) NOT NULL,
+ `created_at` datetime NOT NULL,
+ `deleter_intra_id` varchar(30) DEFAULT NULL,
+ `deleted_at` datetime DEFAULT NULL,
+ `modified_at` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+
+CREATE TABLE `coin_history` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `amount` int DEFAULT NULL,
+ `created_at` datetime(6) NOT NULL,
+ `history` varchar(30) DEFAULT NULL,
+ `user_id` bigint DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `user_id` (`user_id`),
+ CONSTRAINT `coin_history_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+
+CREATE TABLE `coin_policy` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `user_id` bigint DEFAULT NULL,
+ `attendance` int DEFAULT NULL,
+ `created_at` datetime(6) NOT NULL,
+ `normal` int DEFAULT NULL,
+ `rank_lose` int DEFAULT NULL,
+ `rank_win` int DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `fk_coin_policy_user_user_id` (`user_id`),
+ CONSTRAINT `fk_coin_policy_user_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+
+CREATE TABLE `feedback` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `created_at` datetime NOT NULL,
+ `modified_at` datetime DEFAULT NULL,
+ `content` varchar(600) NOT NULL,
+ `is_solved` bit(1) NOT NULL,
+ `user_id` bigint DEFAULT NULL,
+ `category` varchar(15) NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `fk_feedback_user_user_id` (`user_id`),
+ CONSTRAINT `fk_feedback_user_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+
+CREATE TABLE `game` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `season_id` bigint NOT NULL,
+ `start_time` datetime NOT NULL,
+ `end_time` datetime DEFAULT NULL,
+ `status` varchar(10) NOT NULL,
+ `mode` varchar(10) NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `fk_game_season_season_id` (`season_id`),
+ CONSTRAINT `fk_game_season_season_id` FOREIGN KEY (`season_id`) REFERENCES `season` (`id`) ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+
+CREATE TABLE `item` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `created_at` datetime(6) NOT NULL,
+ `discount` int DEFAULT NULL,
+ `image_uri` varchar(255) DEFAULT NULL,
+ `is_visible` bit(1) NOT NULL,
+ `name` varchar(30) DEFAULT NULL,
+ `price` int NOT NULL,
+ `creator_intra_id` varchar(10) NOT NULL,
+ `deleter_intra_id` varchar(10) DEFAULT NULL,
+ `type` varchar(255) NOT NULL,
+ `main_content` varchar(255) DEFAULT NULL,
+ `sub_content` varchar(255) DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+
+CREATE TABLE `receipt` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `owner_intra_id` varchar(255) NOT NULL,
+ `created_at` datetime(6) NOT NULL,
+ `purchaser_intra_id` varchar(255) NOT NULL,
+ `status` varchar(255) NOT NULL,
+ `item_id` bigint NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `fk_receipt_item_item_id` (`item_id`),
+ CONSTRAINT `fk_receipt_item_item_id` FOREIGN KEY (`item_id`) REFERENCES `item` (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+
+
+CREATE TABLE `megaphone` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `content` varchar(30) DEFAULT NULL,
+ `used_at` date NOT NULL,
+ `user_id` bigint NOT NULL,
+ `receipt_id` bigint DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `fk_megaphone_user_user_id` (`user_id`),
+ KEY `fk_megaphone_receipt_receipt_id` (`receipt_id`),
+ CONSTRAINT `fk_megaphone_receipt_receipt_id` FOREIGN KEY (`receipt_id`) REFERENCES `receipt` (`id`),
+ CONSTRAINT `fk_megaphone_user_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+
+CREATE TABLE `noti` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `created_at` datetime NOT NULL,
+ `modified_at` datetime DEFAULT NULL,
+ `is_checked` bit(1) NOT NULL,
+ `message` varchar(255) DEFAULT NULL,
+ `user_id` bigint DEFAULT NULL,
+ `noti_type` varchar(15) NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `fk_noti_user_user_id` (`user_id`),
+ CONSTRAINT `fk_noti_user_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+
+CREATE TABLE `pchange` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `created_at` datetime NOT NULL,
+ `modified_at` datetime DEFAULT NULL,
+ `ppp_result` int NOT NULL,
+ `game_id` bigint NOT NULL,
+ `exp` int NOT NULL,
+ `user_id` bigint NOT NULL,
+ `is_checked` bit(1) NOT NULL DEFAULT b'0',
+ PRIMARY KEY (`id`),
+ KEY `fk_pchange_user_user_id` (`user_id`),
+ KEY `fk_pchange_game_game_id` (`game_id`),
+ CONSTRAINT `fk_pchange_game_game_id` FOREIGN KEY (`game_id`) REFERENCES `game` (`id`) ON UPDATE CASCADE,
+ CONSTRAINT `fk_pchange_user_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+
+CREATE TABLE `penalty` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `user_id` bigint NOT NULL,
+ `penalty_type` varchar(20) NOT NULL,
+ `message` varchar(100) DEFAULT NULL,
+ `start_time` datetime NOT NULL,
+ `penalty_time` int NOT NULL,
+ `created_at` datetime NOT NULL,
+ `modified_at` datetime NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `fk_penalty_user_user_id_idx` (`user_id`),
+ CONSTRAINT `fk_penalty_user_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+
+CREATE TABLE `ranks` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `created_at` datetime NOT NULL,
+ `modified_at` datetime DEFAULT NULL,
+ `losses` int NOT NULL,
+ `ppp` int NOT NULL,
+ `season_id` bigint NOT NULL,
+ `wins` int NOT NULL,
+ `status_message` varchar(255) DEFAULT NULL,
+ `user_id` bigint NOT NULL,
+ `tier_id` bigint DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `fk_ranks_user_user_id` (`user_id`),
+ KEY `fk_ranks_season_season_id` (`season_id`),
+ KEY `fk_ranks_tier_tier_id` (`tier_id`),
+ CONSTRAINT `fk_ranks_season_season_id` FOREIGN KEY (`season_id`) REFERENCES `season` (`id`) ON UPDATE CASCADE,
+ CONSTRAINT `fk_ranks_tier_tier_id` FOREIGN KEY (`tier_id`) REFERENCES `tier` (`id`),
+ CONSTRAINT `fk_ranks_user_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+
+CREATE TABLE `slot_management` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `created_at` datetime NOT NULL,
+ `modified_at` datetime DEFAULT NULL,
+ `future_slot_time` int NOT NULL,
+ `game_interval` int NOT NULL,
+ `open_minute` int NOT NULL,
+ `past_slot_time` int NOT NULL,
+ `start_time` datetime NOT NULL,
+ `end_time` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+
+CREATE TABLE `team` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `score` int DEFAULT NULL,
+ `win` bit(1) DEFAULT NULL,
+ `game_id` bigint NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `fk_team_game_game_id` (`game_id`),
+ CONSTRAINT `fk_team_game_game_id` FOREIGN KEY (`game_id`) REFERENCES `game` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+
+CREATE TABLE `team_user` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `team_id` bigint NOT NULL,
+ `user_id` bigint NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `fk_team_user_team_team_id` (`team_id`),
+ KEY `fk_team_user_user_user_id` (`user_id`),
+ CONSTRAINT `fk_team_user_team_team_id` FOREIGN KEY (`team_id`) REFERENCES `team` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `fk_team_user_user_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+
+CREATE TABLE `user_image` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `user_id` bigint DEFAULT NULL,
+ `image_uri` varchar(255) DEFAULT NULL,
+ `created_at` datetime(6) NOT NULL,
+ `deleted_at` datetime(6) DEFAULT NULL,
+ `is_current` bit(1) NOT NULL DEFAULT b'1',
+ PRIMARY KEY (`id`),
+ KEY `fk_user_image_user_user_id` (`user_id`),
+ CONSTRAINT `fk_user_image_user_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+
+create or replace view v_teamuser as
+select team.id teamId, team.score, team.win, g.id gameId, g.season_id seasonId, g.start_time startTime, g.status, g.mode, tu.user_id userId, u.intra_id intraId, u.image_uri image, u.total_exp
+from team, team_user tu, user u, game g
+where team.id=tu.team_id and u.id=tu.user_id and g.id=team.game_id;
+
+
+create or replace view v_rank_game_detail as
+select team.id teamId, team.score, team.win, g.id gameId, g.season_id seasonId, g.start_time startTime, g.end_time endTime, g.status, g.mode,
+ tu.user_id userId, u.intra_id intraId, u.image_uri image, u.total_exp,
+ r.wins, r.losses
+from team, team_user tu, user u, game g, ranks r
+where team.id=tu.team_id and u.id=tu.user_id and g.id=team.game_id and r.user_id = u.id and r.season_id = g.season_id;
+
diff --git a/src/main/resources/db/migration/V2.1__add_item_creator.sql b/src/main/resources/db/migration/V2.1__add_item_creator.sql
deleted file mode 100644
index 0d0c75c10..000000000
--- a/src/main/resources/db/migration/V2.1__add_item_creator.sql
+++ /dev/null
@@ -1,5 +0,0 @@
-alter table item
- add column creator_intra_id varchar(10) NOT NULL;
-
-alter table item
- add column deleter_intra_id varchar(10);
diff --git a/src/main/resources/db/migration/V2.2__add_item_type.sql b/src/main/resources/db/migration/V2.2__add_item_type.sql
deleted file mode 100644
index d1a0ed5ca..000000000
--- a/src/main/resources/db/migration/V2.2__add_item_type.sql
+++ /dev/null
@@ -1,2 +0,0 @@
-alter table item
- add column type varchar(255) NOT NULL;
\ No newline at end of file
diff --git a/src/main/resources/db/migration/V2.3__add_megaphone_receiptId.sql b/src/main/resources/db/migration/V2.3__add_megaphone_receiptId.sql
deleted file mode 100644
index e740d7362..000000000
--- a/src/main/resources/db/migration/V2.3__add_megaphone_receiptId.sql
+++ /dev/null
@@ -1,7 +0,0 @@
-alter table megaphone
- add column receipt_id bigint;
-
-alter table megaphone
- add constraint fk_megaphone_receipt_receipt_id
- foreign key (receipt_id)
- references receipt (id);
\ No newline at end of file
diff --git a/src/main/resources/db/migration/V2.4__modify_item_content_columns.sql b/src/main/resources/db/migration/V2.4__modify_item_content_columns.sql
deleted file mode 100644
index 06d2baae0..000000000
--- a/src/main/resources/db/migration/V2.4__modify_item_content_columns.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-alter table item
- add column main_content varchar(255);
-
-alter table item
- add column sub_content varchar(255);
-
-UPDATE item SET main_content = content, sub_content = content;
-
-alter table item
-drop column content;
\ No newline at end of file
diff --git a/src/main/resources/db/migration/V2.5__add_userImage_and_user_image_uri.sql b/src/main/resources/db/migration/V2.5__add_userImage_and_user_image_uri.sql
deleted file mode 100644
index c67b74395..000000000
--- a/src/main/resources/db/migration/V2.5__add_userImage_and_user_image_uri.sql
+++ /dev/null
@@ -1,18 +0,0 @@
-create table user_image
-(
- id bigint not null auto_increment,
- user_id bigint,
- image_uri varchar(255),
- created_at datetime(6) not null,
- deleted_at datetime(6) default null,
- is_current bit default 1 not null,
-
- primary key (id)
-);
-
-alter table user_image
- add constraint fk_user_image_user_user_id
- foreign key (user_id)
- references `user` (id);
-
-INSERT INTO user_image (user_id, image_uri, created_at) SELECT id, image_uri, created_at FROM user;
\ No newline at end of file
diff --git a/src/main/resources/db/migration/V2__migration_42gg_4th.sql b/src/main/resources/db/migration/V2__migration_42gg_4th.sql
deleted file mode 100644
index 04c56121c..000000000
--- a/src/main/resources/db/migration/V2__migration_42gg_4th.sql
+++ /dev/null
@@ -1,102 +0,0 @@
-create table coin_history
-(
- id bigint not null auto_increment,
- amount integer,
- created_at datetime(6) not null,
- history varchar(30),
- user_id bigint,
- primary key (id)
-);
-
-create table coin_policy
-(
- id bigint not null auto_increment,
- user_id bigint,
- attendance integer,
- created_at datetime(6) not null,
- normal integer,
- rank_lose integer,
- rank_win integer,
- primary key (id)
-);
-
-create table item
-(
- id bigint not null auto_increment,
- content varchar(255),
- created_at datetime(6) not null,
- discount integer,
- image_uri varchar(255),
- is_visible bit not null,
- name varchar(30),
- price integer not null,
- primary key (id)
-);
-
-create table megaphone
-(
- id bigint not null auto_increment,
- content varchar(30),
- used_at date not null,
- user_id bigint not null,
- primary key (id)
-);
-
-alter table ranks
- add column tier_id bigint;
-
-create table receipt
-(
- id bigint not null auto_increment,
- owner_intra_id varchar(255) not null,
- created_at datetime(6) not null,
- purchaser_intra_id varchar(255) not null,
- status varchar(255) not null,
- item_id bigint not null,
- primary key (id)
-);
-
-create table tier
-(
- id bigint not null auto_increment,
- image_uri varchar(255),
- name varchar(255),
- primary key (id)
-);
-
-alter table user
- add column background varchar(255) default "BASIC";
-
-alter table user
- add column edge varchar(255) default "BASIC";
-
-alter table user
- add column gg_coin integer default 0;
-
-alter table user
- add column text_color varchar(10);
-
-alter table coin_history
- add constraint fk_coin_history_user_user_id
- foreign key (user_id)
- references user (id);
-
-alter table coin_policy
- add constraint fk_coin_policy_user_user_id
- foreign key (user_id)
- references user (id);
-
-alter table megaphone
- add constraint fk_megaphone_user_user_id
- foreign key (user_id)
- references user (id);
-
-alter table ranks
- add constraint fk_ranks_tier_tier_id
- foreign key (tier_id)
- references tier (id);
-
-alter table receipt
- add constraint fk_receipt_item_item_id
- foreign key (item_id)
- references item (id);
\ No newline at end of file
diff --git a/src/test/java/com/gg/server/domain/tournament/controller/TournamentFindControllerTest.java b/src/test/java/com/gg/server/domain/tournament/controller/TournamentFindControllerTest.java
index 45cbf8325..a8fabcfd7 100644
--- a/src/test/java/com/gg/server/domain/tournament/controller/TournamentFindControllerTest.java
+++ b/src/test/java/com/gg/server/domain/tournament/controller/TournamentFindControllerTest.java
@@ -102,7 +102,7 @@ public void getTournamentList() throws Exception {
assertThat(tournamentInfoList.get(i).getPlayerCnt()).isEqualTo(tournamentResponseDto.getPlayerCnt());
}
if (i > 0)
- assertThat(tournamentInfoList.get(i).getStartTime()).isBefore(tournamentInfoList.get(i - 1).getEndTime());
+ assertThat(tournamentInfoList.get(i).getStartTime()).isAfter(tournamentInfoList.get(i - 1).getEndTime());
}
}
diff --git a/src/test/java/com/gg/server/utils/annotation/DataJpaUnitTest.java b/src/test/java/com/gg/server/utils/annotation/DataJpaUnitTest.java
new file mode 100644
index 000000000..db6241380
--- /dev/null
+++ b/src/test/java/com/gg/server/utils/annotation/DataJpaUnitTest.java
@@ -0,0 +1,20 @@
+package com.gg.server.utils.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import org.junit.jupiter.api.Tag;
+import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
+
+/**
+ * DataJpa ํ
์คํธ๋ฅผ ์ํ ์ด๋
ธํ
์ด์
+ *
+ */
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Tag(TestTypeConstant.UNIT_TEST)
+@DataJpaTest
+public @interface DataJpaUnitTest {
+
+}
\ No newline at end of file
diff --git a/src/test/java/com/gg/server/utils/annotation/IntegrationTest.java b/src/test/java/com/gg/server/utils/annotation/IntegrationTest.java
index 8c20cdc73..b21fdaddd 100644
--- a/src/test/java/com/gg/server/utils/annotation/IntegrationTest.java
+++ b/src/test/java/com/gg/server/utils/annotation/IntegrationTest.java
@@ -1,5 +1,6 @@
package com.gg.server.utils.annotation;
+import com.gg.server.utils.config.MySQLInitializer;
import com.gg.server.utils.config.RedisInitializer;
import com.gg.server.utils.config.TestRedisConfig;
import java.lang.annotation.ElementType;
@@ -15,16 +16,15 @@
* ํตํฉํ
์คํธ ํ๊ฒฝ์ ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ์ํ ์ด๋
ธํ
์ด์
.
*
*
- * ๊ธฐ๋ณธ์ ์ผ๋ก redis ํธ๋์ญ์
์ false๋ก ์ฒ๋ฆฌํ๋ ์ค์ ์ Import ํ๋ค.
+ * ๊ธฐ๋ณธ์ ์ผ๋ก redis ํธ๋์ญ์
์ false๋ก ์ฒ๋ฆฌํ๋ ์ค์ ์ Import ํ๋ค.
*
- *
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@SpringBootTest
@Import(TestRedisConfig.class)
-@ContextConfiguration(initializers = RedisInitializer.class)
-@Tag(TestType.INTEGRATION_TEST)
+@ContextConfiguration(initializers = {RedisInitializer.class, MySQLInitializer.class})
+@Tag(TestTypeConstant.INTEGRATION_TEST)
public @interface IntegrationTest {
}
\ No newline at end of file
diff --git a/src/test/java/com/gg/server/utils/annotation/IntegrationTestWithRedisTransaction.java b/src/test/java/com/gg/server/utils/annotation/IntegrationTestWithRedisTransaction.java
index ad3d39d1f..5a2a0b5f9 100644
--- a/src/test/java/com/gg/server/utils/annotation/IntegrationTestWithRedisTransaction.java
+++ b/src/test/java/com/gg/server/utils/annotation/IntegrationTestWithRedisTransaction.java
@@ -1,5 +1,6 @@
package com.gg.server.utils.annotation;
+import com.gg.server.utils.config.MySQLInitializer;
import com.gg.server.utils.config.RedisInitializer;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@@ -20,8 +21,8 @@
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@SpringBootTest
-@ContextConfiguration(initializers = RedisInitializer.class)
-@Tag(TestType.INTEGRATION_TEST)
+@ContextConfiguration(initializers = {RedisInitializer.class, MySQLInitializer.class})
+@Tag(TestTypeConstant.INTEGRATION_TEST)
public @interface IntegrationTestWithRedisTransaction {
}
\ No newline at end of file
diff --git a/src/test/java/com/gg/server/utils/annotation/TestType.java b/src/test/java/com/gg/server/utils/annotation/TestTypeConstant.java
similarity index 64%
rename from src/test/java/com/gg/server/utils/annotation/TestType.java
rename to src/test/java/com/gg/server/utils/annotation/TestTypeConstant.java
index 2fef11223..c0d89cc16 100644
--- a/src/test/java/com/gg/server/utils/annotation/TestType.java
+++ b/src/test/java/com/gg/server/utils/annotation/TestTypeConstant.java
@@ -1,5 +1,8 @@
package com.gg.server.utils.annotation;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
/**
* TestType.
*
@@ -8,7 +11,8 @@
*
*
*/
-public class TestType {
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public class TestTypeConstant {
public static final String UNIT_TEST = "UnitTest";
public static final String INTEGRATION_TEST = "IntegrationTest";
}
diff --git a/src/test/java/com/gg/server/utils/annotation/UnitTest.java b/src/test/java/com/gg/server/utils/annotation/UnitTest.java
index 2bb136144..9a2dd50df 100644
--- a/src/test/java/com/gg/server/utils/annotation/UnitTest.java
+++ b/src/test/java/com/gg/server/utils/annotation/UnitTest.java
@@ -12,7 +12,7 @@
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
-@Tag(TestType.UNIT_TEST)
+@Tag(TestTypeConstant.UNIT_TEST)
public @interface UnitTest {
}
\ No newline at end of file
diff --git a/src/test/java/com/gg/server/utils/annotation/WebMvcUnitTest.java b/src/test/java/com/gg/server/utils/annotation/WebMvcUnitTest.java
new file mode 100644
index 000000000..8f7fb7064
--- /dev/null
+++ b/src/test/java/com/gg/server/utils/annotation/WebMvcUnitTest.java
@@ -0,0 +1,20 @@
+package com.gg.server.utils.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import org.junit.jupiter.api.Tag;
+import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
+
+/**
+ * WebMvc ํ
์คํธ๋ฅผ ์ํ ์ด๋
ธํ
์ด์
+ *
+ */
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Tag(TestTypeConstant.UNIT_TEST)
+@WebMvcTest
+public @interface WebMvcUnitTest {
+
+}
\ No newline at end of file
diff --git a/src/test/java/com/gg/server/utils/config/MySQLInitializer.java b/src/test/java/com/gg/server/utils/config/MySQLInitializer.java
new file mode 100644
index 000000000..1f4fde72e
--- /dev/null
+++ b/src/test/java/com/gg/server/utils/config/MySQLInitializer.java
@@ -0,0 +1,39 @@
+package com.gg.server.utils.config;
+
+import org.springframework.boot.test.util.TestPropertyValues;
+import org.springframework.context.ApplicationContextInitializer;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.testcontainers.containers.MySQLContainer;
+
+/**
+ * MysqlInitializer.
+ *
+ *
+ * mysql testContainer ์ด๊ธฐํ ์์
์ ์ํ
+ *
+ *
+ * @author : middlefitting
+ * @since : 2024/01/09
+ */
+public class MySQLInitializer implements
+ ApplicationContextInitializer {
+ private static final String params = "?serverTimezone=Asia/Seoul&characterEncoding=UTF-8";
+ private static final MySQLContainer> MYSQL_CONTAINER =
+ new MySQLContainer<>("mysql:8.0")
+ .withDatabaseName("test")
+ .withUsername("root")
+ .withPassword("1234");
+
+ static {
+ MYSQL_CONTAINER.start();
+ }
+
+ @Override
+ public void initialize(ConfigurableApplicationContext applicationContext) {
+ TestPropertyValues.of(
+ "spring.datasource.url=" + MYSQL_CONTAINER.getJdbcUrl() + params,
+ "spring.datasource.username=" + MYSQL_CONTAINER.getUsername(),
+ "spring.datasource.password=" + MYSQL_CONTAINER.getPassword()
+ ).applyTo(applicationContext.getEnvironment());
+ }
+}
diff --git a/src/test/resources/application.yml b/src/test/resources/application.yml
index eea2fa9f1..4bad41a72 100644
--- a/src/test/resources/application.yml
+++ b/src/test/resources/application.yml
@@ -3,7 +3,7 @@ spring:
name: 42gg
profiles:
- active: local
+ active: testCode
security:
oauth2.client:
@@ -109,21 +109,14 @@ server:
enabled: true
---
-spring.config.activate.on-profile: local
+spring.config.activate.on-profile: testCode
# =========================== LOCAL ===========================
spring:
- datasource:
- driver-class-name: org.testcontainers.jdbc.ContainerDatabaseDriver
- url: jdbc:tc:mysql:8.0:///testdb?serverTimezone=Asia/Seoul&characterEncoding=UTF-8
- username: root
- password: 1234
-
flyway:
- enabled: false
+ enabled: true
baselineOnMigrate: true
- locations: classpath:db/migration/test
- url: jdbc:tc:mysql:8.0:///testdb?serverTimezone=Asia/Seoul&characterEncoding=UTF-8
+ locations: classpath:db/migration
user: root
password: 1234
@@ -151,9 +144,6 @@ spring:
# Redis ์ค์
cache:
type: redis
- sql:
- init:
- mode: always
# cors ์ค์
cors:
diff --git a/src/test/resources/schema.sql b/src/test/resources/schema.sql
deleted file mode 100644
index 975657742..000000000
--- a/src/test/resources/schema.sql
+++ /dev/null
@@ -1,352 +0,0 @@
-SET FOREIGN_KEY_CHECKS=0;
-
-DROP TABLE IF EXISTS `user`;
-CREATE TABLE `user` (
-`id` bigint NOT NULL AUTO_INCREMENT,
-`created_at` datetime NOT NULL,
-`modified_at` datetime DEFAULT NULL,
-`e_mail` varchar(60) DEFAULT NULL,
-`image_uri` varchar(255) DEFAULT NULL,
-`intra_id` varchar(30) NOT NULL,
-`total_exp` int DEFAULT NULL,
-`sns_noti_opt` varchar(10) DEFAULT NULL,
-`racket_type` varchar(10) DEFAULT NULL,
-`role_type` varchar(10) NOT NULL,
-`kakao_id` bigint DEFAULT NULL,
-`background` varchar(255) DEFAULT 'BASIC',
-`edge` varchar(255) DEFAULT 'BASIC',
-`gg_coin` int DEFAULT '0',
-`text_color` varchar(10) DEFAULT NULL,
-PRIMARY KEY (`id`),
-UNIQUE KEY `UK_l5220ph2ndjh75g6ya39wy519` (`intra_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
-
-DROP TABLE IF EXISTS `season`;
-CREATE TABLE `season` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `end_time` datetime NOT NULL,
- `ppp_gap` int NOT NULL,
- `season_name` varchar(20) NOT NULL,
- `start_ppp` int NOT NULL,
- `start_time` datetime NOT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
-
-DROP TABLE IF EXISTS `tier`;
-CREATE TABLE `tier` (
-`id` bigint NOT NULL AUTO_INCREMENT,
-`image_uri` varchar(255) DEFAULT NULL,
-`name` varchar(255) DEFAULT NULL,
-PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
-
-DROP TABLE IF EXISTS `announcement`;
-CREATE TABLE `announcement` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `content` varchar(1000) NOT NULL,
- `creator_intra_id` varchar(30) NOT NULL,
- `created_at` datetime NOT NULL,
- `deleter_intra_id` varchar(30) DEFAULT NULL,
- `deleted_at` datetime DEFAULT NULL,
- `modified_at` datetime DEFAULT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
-
-DROP TABLE IF EXISTS `coin_history`;
-CREATE TABLE `coin_history` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `amount` int DEFAULT NULL,
- `created_at` datetime(6) NOT NULL,
- `history` varchar(30) DEFAULT NULL,
- `user_id` bigint DEFAULT NULL,
- PRIMARY KEY (`id`),
- KEY `user_id` (`user_id`),
- CONSTRAINT `coin_history_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
-
-DROP TABLE IF EXISTS `coin_policy`;
-CREATE TABLE `coin_policy` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `user_id` bigint DEFAULT NULL,
- `attendance` int DEFAULT NULL,
- `created_at` datetime(6) NOT NULL,
- `normal` int DEFAULT NULL,
- `rank_lose` int DEFAULT NULL,
- `rank_win` int DEFAULT NULL,
- PRIMARY KEY (`id`),
- KEY `fk_coin_policy_user_user_id` (`user_id`),
- CONSTRAINT `fk_coin_policy_user_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
-
-DROP TABLE IF EXISTS `feedback`;
-CREATE TABLE `feedback` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `created_at` datetime NOT NULL,
- `modified_at` datetime DEFAULT NULL,
- `content` varchar(600) NOT NULL,
- `is_solved` bit(1) NOT NULL,
- `user_id` bigint DEFAULT NULL,
- `category` varchar(15) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `fk_feedback_user_user_id` (`user_id`),
- CONSTRAINT `fk_feedback_user_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
-
-DROP TABLE IF EXISTS `game`;
-CREATE TABLE `game` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `season_id` bigint NOT NULL,
- `start_time` datetime NOT NULL,
- `end_time` datetime DEFAULT NULL,
- `status` varchar(10) NOT NULL,
- `mode` varchar(10) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `fk_game_season_season_id` (`season_id`),
- CONSTRAINT `fk_game_season_season_id` FOREIGN KEY (`season_id`) REFERENCES `season` (`id`) ON UPDATE CASCADE
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
-
-DROP TABLE IF EXISTS `item`;
-CREATE TABLE `item` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `created_at` datetime(6) NOT NULL,
- `discount` int DEFAULT NULL,
- `image_uri` varchar(255) DEFAULT NULL,
- `is_visible` bit(1) NOT NULL,
- `name` varchar(30) DEFAULT NULL,
- `price` int NOT NULL,
- `creator_intra_id` varchar(10) NOT NULL,
- `deleter_intra_id` varchar(10) DEFAULT NULL,
- `type` varchar(255) NOT NULL,
- `main_content` varchar(255) DEFAULT NULL,
- `sub_content` varchar(255) DEFAULT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
-
-DROP TABLE IF EXISTS `receipt`;
-CREATE TABLE `receipt` (
-`id` bigint NOT NULL AUTO_INCREMENT,
-`owner_intra_id` varchar(255) NOT NULL,
-`created_at` datetime(6) NOT NULL,
-`purchaser_intra_id` varchar(255) NOT NULL,
-`status` varchar(255) NOT NULL,
-`item_id` bigint NOT NULL,
-PRIMARY KEY (`id`),
-KEY `fk_receipt_item_item_id` (`item_id`),
-CONSTRAINT `fk_receipt_item_item_id` FOREIGN KEY (`item_id`) REFERENCES `item` (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
-
-
-DROP TABLE IF EXISTS `megaphone`;
-CREATE TABLE `megaphone` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `content` varchar(30) DEFAULT NULL,
- `used_at` date NOT NULL,
- `user_id` bigint NOT NULL,
- `receipt_id` bigint DEFAULT NULL,
- PRIMARY KEY (`id`),
- KEY `fk_megaphone_user_user_id` (`user_id`),
- KEY `fk_megaphone_receipt_receipt_id` (`receipt_id`),
- CONSTRAINT `fk_megaphone_receipt_receipt_id` FOREIGN KEY (`receipt_id`) REFERENCES `receipt` (`id`),
- CONSTRAINT `fk_megaphone_user_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
-
-DROP TABLE IF EXISTS `noti`;
-CREATE TABLE `noti` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `created_at` datetime NOT NULL,
- `modified_at` datetime DEFAULT NULL,
- `is_checked` bit(1) NOT NULL,
- `message` varchar(255) DEFAULT NULL,
- `user_id` bigint DEFAULT NULL,
- `noti_type` varchar(15) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `fk_noti_user_user_id` (`user_id`),
- CONSTRAINT `fk_noti_user_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
-
-DROP TABLE IF EXISTS `pchange`;
-CREATE TABLE `pchange` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `created_at` datetime NOT NULL,
- `modified_at` datetime DEFAULT NULL,
- `ppp_result` int NOT NULL,
- `game_id` bigint NOT NULL,
- `exp` int NOT NULL,
- `user_id` bigint NOT NULL,
- `is_checked` bit(1) NOT NULL DEFAULT b'0',
- PRIMARY KEY (`id`),
- KEY `fk_pchange_user_user_id` (`user_id`),
- KEY `fk_pchange_game_game_id` (`game_id`),
- CONSTRAINT `fk_pchange_game_game_id` FOREIGN KEY (`game_id`) REFERENCES `game` (`id`) ON UPDATE CASCADE,
- CONSTRAINT `fk_pchange_user_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
-
-DROP TABLE IF EXISTS `penalty`;
-CREATE TABLE `penalty` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `user_id` bigint NOT NULL,
- `penalty_type` varchar(20) NOT NULL,
- `message` varchar(100) DEFAULT NULL,
- `start_time` datetime NOT NULL,
- `penalty_time` int NOT NULL,
- `created_at` datetime NOT NULL,
- `modified_at` datetime NOT NULL,
- PRIMARY KEY (`id`),
- KEY `fk_penalty_user_user_id_idx` (`user_id`),
- CONSTRAINT `fk_penalty_user_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
-
-DROP TABLE IF EXISTS `ranks`;
-CREATE TABLE `ranks` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `created_at` datetime NOT NULL,
- `modified_at` datetime DEFAULT NULL,
- `losses` int NOT NULL,
- `ppp` int NOT NULL,
- `season_id` bigint NOT NULL,
- `wins` int NOT NULL,
- `status_message` varchar(255) DEFAULT NULL,
- `user_id` bigint NOT NULL,
- `tier_id` bigint DEFAULT NULL,
- PRIMARY KEY (`id`),
- KEY `fk_ranks_user_user_id` (`user_id`),
- KEY `fk_ranks_season_season_id` (`season_id`),
- KEY `fk_ranks_tier_tier_id` (`tier_id`),
- CONSTRAINT `fk_ranks_season_season_id` FOREIGN KEY (`season_id`) REFERENCES `season` (`id`) ON UPDATE CASCADE,
- CONSTRAINT `fk_ranks_tier_tier_id` FOREIGN KEY (`tier_id`) REFERENCES `tier` (`id`),
- CONSTRAINT `fk_ranks_user_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
-
-DROP TABLE IF EXISTS `slot_management`;
-CREATE TABLE `slot_management` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `created_at` datetime NOT NULL,
- `modified_at` datetime DEFAULT NULL,
- `future_slot_time` int NOT NULL,
- `game_interval` int NOT NULL,
- `open_minute` int NOT NULL,
- `past_slot_time` int NOT NULL,
- `start_time` datetime NOT NULL,
- `end_time` datetime DEFAULT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
-
-DROP TABLE IF EXISTS `team`;
-CREATE TABLE `team` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `score` int DEFAULT NULL,
- `win` bit(1) DEFAULT NULL,
- `game_id` bigint NOT NULL,
- PRIMARY KEY (`id`),
- KEY `fk_team_game_game_id` (`game_id`),
- CONSTRAINT `fk_team_game_game_id` FOREIGN KEY (`game_id`) REFERENCES `game` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
-
-DROP TABLE IF EXISTS `team_user`;
-CREATE TABLE `team_user` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `team_id` bigint NOT NULL,
- `user_id` bigint NOT NULL,
- PRIMARY KEY (`id`),
- KEY `fk_team_user_team_team_id` (`team_id`),
- KEY `fk_team_user_user_user_id` (`user_id`),
- CONSTRAINT `fk_team_user_team_team_id` FOREIGN KEY (`team_id`) REFERENCES `team` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
- CONSTRAINT `fk_team_user_user_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
-
-DROP TABLE IF EXISTS `tournament`;
-CREATE TABLE tournament (
- id BIGINT NOT NULL AUTO_INCREMENT,
- title VARCHAR(30) NOT NULL,
- contents VARCHAR(1000) NOT NULL,
- start_time DATETIME NOT NULL,
- end_time DATETIME NOT NULL,
- type VARCHAR(15) NOT NULL,
- status VARCHAR(10) NOT NULL DEFAULT 'BEFORE',
- created_at DATETIME NOT NULL,
- modified_at DATETIME NOT NULL,
- winner_id BIGINT,
- PRIMARY KEY (id),
- FOREIGN KEY (winner_id) REFERENCES user(id)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
-
-DROP TABLE IF EXISTS `tournament_user`;
-CREATE TABLE tournament_user (
- id BIGINT NOT NULL AUTO_INCREMENT,
- user_id BIGINT NOT NULL,
- tournament_id BIGINT NOT NULL,
- is_joined BOOLEAN NOT NULL DEFAULT FALSE,
- register_time DATETIME NOT NULL,
- created_at DATETIME NOT NULL,
- modified_at DATETIME NOT NULL,
- PRIMARY KEY (id),
- FOREIGN KEY (tournament_id) REFERENCES tournament(id)
- ON UPDATE CASCADE
- ON DELETE CASCADE ,
- FOREIGN KEY (user_id) REFERENCES user(id)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
-
-DROP TABLE IF EXISTS `tournament_game`;
-CREATE TABLE tournament_game (
- id BIGINT NOT NULL AUTO_INCREMENT,
- tournament_id BIGINT NOT NULL,
- game_id BIGINT,
- round VARCHAR(20) NOT NULL,
- created_at DATETIME NOT NULL,
- modified_at DATETIME NOT NULL,
- PRIMARY KEY (id),
- FOREIGN KEY (tournament_id) REFERENCES tournament(id)
- ON UPDATE CASCADE
- ON DELETE CASCADE ,
- FOREIGN KEY (game_id) REFERENCES game(id)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
-
-DROP TABLE IF EXISTS `user_image`;
-CREATE TABLE `user_image` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `user_id` bigint DEFAULT NULL,
- `image_uri` varchar(255) DEFAULT NULL,
- `created_at` datetime(6) NOT NULL,
- `deleted_at` datetime(6) DEFAULT NULL,
- `is_current` bit(1) NOT NULL DEFAULT b'1',
- PRIMARY KEY (`id`),
- KEY `fk_user_image_user_user_id` (`user_id`),
- CONSTRAINT `fk_user_image_user_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
-
-create or replace view v_teamuser as
-select team.id teamId, team.score, team.win, g.id gameId, g.season_id seasonId, g.start_time startTime, g.status, g.mode, tu.user_id userId, u.intra_id intraId, u.image_uri image, u.total_exp
-from team, team_user tu, user u, game g
-where team.id=tu.team_id and u.id=tu.user_id and g.id=team.game_id;
-
-
-create or replace view v_rank_game_detail as
-select team.id teamId, team.score, team.win, g.id gameId, g.season_id seasonId, g.start_time startTime, g.end_time endTime, g.status, g.mode,
- tu.user_id userId, u.intra_id intraId, u.image_uri image, u.total_exp,
- r.wins, r.losses
-from team, team_user tu, user u, game g, ranks r
-where team.id=tu.team_id and u.id=tu.user_id and g.id=team.game_id and r.user_id = u.id and r.season_id = g.season_id;
-
-SET FOREIGN_KEY_CHECKS=1;
\ No newline at end of file