Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -26,40 +26,40 @@
@Getter
public enum Achievement {

FIRST_STEP("first_step", "첫 걸음", "오답노트를 처음 적었어요",
FIRST_STEP("first_step", "첫 걸음", "오답노트를 처음 작성했어요",
1, false, AchievementStats::problemCount),

ARCHIVIST("archivist", "기록광", "오답노트를 백 개나 모았어요",
ARCHIVIST("archivist", "기록광", "오답노트를 100개 작성했어요",
100, true, AchievementStats::problemCount),

PERSISTENCE("persistence", "집념", "한 문제를 다섯 번 다시 봤어요",
PERSISTENCE("persistence", "집념", "한 문제를 5번 복습했어요",
5, true, AchievementStats::maxSolveCountOnOneProblem),

PHOENIX("phoenix", "불사조", "틀렸던 문제를 기어이 맞혔어요",
PHOENIX("phoenix", "불사조", "틀렸던 문제를 다시 풀어 맞혔어요",
1, false, AchievementStats::comebackCount),

DAWN_CLASS("dawn_class", "새벽반", "해 뜨기 전에 열 번 공부했어요",
DAWN_CLASS("dawn_class", "새벽반", "새벽 5~8시에 10번 복습했어요",
10, true, AchievementStats::dawnSolveCount),

NIGHT_OWL("night_owl", "올빼미", "밤이 깊어도 열 번 공부했어요",
NIGHT_OWL("night_owl", "올빼미", "밤 12~3시에 10번 복습했어요",
10, true, AchievementStats::nightSolveCount),

PERFECT_MONTH("perfect_month", "개근", "서른 날을 하루도 안 빼먹었어요",
PERFECT_MONTH("perfect_month", "개근", "30일 연속 출석했어요",
30, true, AchievementStats::longestLoginStreak),

FLAWLESS("flawless", "무결점", "열 번을 내리 맞혔어요",
FLAWLESS("flawless", "무결점", "10번 연속으로 맞혔어요",
10, true, AchievementStats::longestCorrectStreak),

ORGANIZER("organizer", "정리의 신", "폴더를 열 개나 만들어 정리했어요",
ORGANIZER("organizer", "정리의 신", "폴더를 10개 만들었어요",
10, true, AchievementStats::folderCount),

REVIEWER("reviewer", "회고왕", "복습하고 쉰 번을 되돌아봤어요",
REVIEWER("reviewer", "회고왕", "복습 회고를 50번 남겼어요",
50, true, AchievementStats::reflectionCount),

COMPANION("companion", "동행", "같이 공부할 사람을 찾았어요",
COMPANION("companion", "동행", "스터디룸에 처음 참여했어요",
1, true, AchievementStats::studyRoomCount),

CHEERLEADER("cheerleader", "응원단장", "백 번을 응원했어요",
CHEERLEADER("cheerleader", "응원단장", "응원을 100번 보냈어요",
100, true, AchievementStats::reactionCount);

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,8 @@ public interface FolderRepository extends JpaRepository<Folder, Long>, FolderRep
* 훈장 '정리의 신' 판정용. <b>루트 폴더는 빼고</b> 센다.
*
* <p>{@code FolderService.initializeDefaultFoldersIfAbsent} 가 가입 시점에 루트 폴더와 기본 하위
* 폴더를 자동으로 만든다. 전부 세면 아무것도 안 한 사람이 2/10 에서 시작해 "폴더를 열 개나 만들어
* 정리했어요" 라는 말과 안 맞는다.
* 폴더를 자동으로 만든다. 전부 세면 아무것도 안 한 사람이 2/10 에서 시작해 "폴더를 10개
* 만들었어요" 라는 말과 안 맞는다.
*
* <p>기본 하위 폴더까지 빼지 않는 이유는 그쪽은 이름으로만 거를 수 있기 때문이다. 사용자가 이름을
* 바꾸는 순간 판정이 달라진다. 루트는 {@code parentFolder IS NULL} 이라는 구조로 걸러져 이름과 무관하다.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
-- 미션 제목의 수를 한글 수사에서 숫자로 바꾼다.
--
-- V33 은 제목을 한글 수사로 통일했는데, 앱 QA 에서 수는 숫자로 적기로 했다(이슈 #341).
-- 설명은 V33 에서 이미 숫자라 제목만 고친다. code 와 목표값은 그대로라 진행도와 보상은 바뀌지 않는다.
--
-- V30, V33 을 고치지 않는 이유는 V33 과 같다. 이미 적용된 환경에서 Flyway 체크섬이 어긋난다.
-- 열 권의 노트 -> 오답노트 10개 (무엇을 열 개 하라는 건지 설명을 봐야 읽혔다)
-- 세 번의 완주 -> 복습 세트 3번 완주 (무엇의 완주인지 분명해진다)

UPDATE mission_definition SET title = '3문제만' WHERE code = 'DAILY_REVIEW_3';
UPDATE mission_definition SET title = '3문제 맞히기' WHERE code = 'DAILY_CORRECT_3';
UPDATE mission_definition SET title = '5일 접속하기' WHERE code = 'WEEKLY_ATTEND_5';
UPDATE mission_definition SET title = '오답노트 10개' WHERE code = 'WEEKLY_NOTE_10';
UPDATE mission_definition SET title = '30문제 복습' WHERE code = 'WEEKLY_REVIEW_30';
UPDATE mission_definition SET title = '복습 세트 3번 완주' WHERE code = 'WEEKLY_SET_3';
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ void returnsAllTwelveInOrder() throws Exception {
"first_step", "archivist", "persistence", "phoenix", "dawn_class", "night_owl",
"perfect_month", "flawless", "organizer", "reviewer", "companion", "cheerleader")))
.andExpect(jsonPath("$.data.achievements[0].nameKo").value("첫 걸음"))
.andExpect(jsonPath("$.data.achievements[0].descriptionKo").value("오답노트를 처음 적었어요"))
.andExpect(jsonPath("$.data.achievements[0].descriptionKo").value("오답노트를 처음 작성했어요"))
.andExpect(jsonPath("$.data.achievements[0].imageUrl").value("assets/Medal/first_step.png"))
.andExpect(jsonPath("$.data.achievements[0].earned").value(false))
.andExpect(jsonPath("$.data.achievements[0].earnedAt").doesNotExist())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ void defaultFoldersDoNotInflateProgress() {
folderService.initializeDefaultFoldersIfAbsent(user.getId());

assertThat(itemOf(user, "organizer").current())
.as("아무것도 안 한 사람이 2/10 에서 시작하면 '폴더를 열 개나 만들어 정리했어요' 와 안 맞는다")
.as("아무것도 안 한 사람이 2/10 에서 시작하면 '폴더를 10개 만들었어요' 와 안 맞는다")
.isLessThanOrEqualTo(1L);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ class MissionSeedMigrationTest extends MissionSystemTestSupport {
private static final String CLAIMED_INDEX_MIGRATION = "db/migration/V31__add_mission_progress_claimed_index.sql";
private static final String REWARD_SNAPSHOT_MIGRATION = "db/migration/V32__add_mission_progress_reward_snapshot.sql";
private static final String WORDING_MIGRATION = "db/migration/V33__refine_mission_definition_wording.sql";
private static final String DIGIT_TITLE_MIGRATION = "db/migration/V47__use_digits_in_mission_titles.sql";

@Autowired
private MissionDefinitionSeeder missionDefinitionSeeder;
Expand Down Expand Up @@ -125,10 +126,12 @@ SELECT COUNT(*)
@DisplayName("문구 수정은 V30 을 고치지 않고 새 마이그레이션의 UPDATE 로 얹는다")
void wordingIsAppliedAsUpdate() {
// V30 을 고치면 이미 적용된 환경에서 Flyway 체크섬이 어긋나 앱이 뜨지 않는다.
String wording = statementsOf(WORDING_MIGRATION);
for (String migration : List.of(WORDING_MIGRATION, DIGIT_TITLE_MIGRATION)) {
String wording = statementsOf(migration);

assertThat(wording).contains("UPDATE MISSION_DEFINITION");
assertThat(wording).doesNotContain("INSERT INTO");
assertThat(wording).as(migration).contains("UPDATE MISSION_DEFINITION");
assertThat(wording).as(migration).doesNotContain("INSERT INTO");
}
}

@Test
Expand All @@ -145,10 +148,13 @@ void appliesRefinedWording() {
assertThat(definitionOf("WEEKLY_REVIEW_30").getDescription()).isEqualTo("오답 30문제 복습하기");
assertThat(definitionOf("WEEKLY_SET_3").getDescription()).isEqualTo("복습 세트 3개 끝내기");

assertThat(definitionOf("DAILY_CORRECT_3").getTitle()).isEqualTo("세 문제 맞히기");
assertThat(definitionOf("DAILY_REVIEW_3").getTitle()).isEqualTo("3문제만");
assertThat(definitionOf("DAILY_CORRECT_3").getTitle()).isEqualTo("3문제 맞히기");
assertThat(definitionOf("DAILY_PRACTICE_SET").getTitle()).isEqualTo("복습 세트 완주");
assertThat(definitionOf("WEEKLY_ATTEND_5").getTitle()).isEqualTo("닷새 접속하기");
assertThat(definitionOf("WEEKLY_REVIEW_30").getTitle()).isEqualTo("서른 문제 복습");
assertThat(definitionOf("WEEKLY_ATTEND_5").getTitle()).isEqualTo("5일 접속하기");
assertThat(definitionOf("WEEKLY_NOTE_10").getTitle()).isEqualTo("오답노트 10개");
assertThat(definitionOf("WEEKLY_REVIEW_30").getTitle()).isEqualTo("30문제 복습");
assertThat(definitionOf("WEEKLY_SET_3").getTitle()).isEqualTo("복습 세트 3번 완주");
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ void getClaimHistory() throws Exception {
.andExpect(jsonPath("$.data.totalClaimedCount").value(1))
.andExpect(jsonPath("$.data.content[0].progressId").value(progressId))
.andExpect(jsonPath("$.data.content[0].code").value(WEEKLY_NOTE_10))
.andExpect(jsonPath("$.data.content[0].title").value("열 권의 노트"))
.andExpect(jsonPath("$.data.content[0].title").value("오답노트 10개"))
.andExpect(jsonPath("$.data.content[0].iconKey").value("note_write"))
.andExpect(jsonPath("$.data.content[0].category").value("WEEKLY"))
.andExpect(jsonPath("$.data.content[0].periodKey").value("2020-W36"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ void carriesMissionDetail() {

assertThat(item.progressId()).isEqualTo(progressId);
assertThat(item.code()).isEqualTo(WEEKLY_NOTE_10);
assertThat(item.title()).isEqualTo("열 권의 노트");
assertThat(item.title()).isEqualTo("오답노트 10개");
assertThat(item.iconKey()).isEqualTo("note_write");
assertThat(item.category().name()).isEqualTo("WEEKLY");
assertThat(item.periodKey()).isEqualTo("2020-W36");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ public class MissionDefinitionSeeder {
*/
private static final List<String> MIGRATION_PATHS = List.of(
"db/migration/V30__seed_mission_definitions.sql",
"db/migration/V33__refine_mission_definition_wording.sql"
"db/migration/V33__refine_mission_definition_wording.sql",
"db/migration/V47__use_digits_in_mission_titles.sql"
);

@PersistenceContext
Expand Down
Loading