-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* feat: 스터디회차에 회차 순서 추가 * feat: 빈 스터디회차를 생성하는 정팩메로 변경 * feat: 출석번호 생성기 인터페이스 및 구현체 추가 * feat: 스터디 팩토리 구현 * refactor: 매직넘버 상수로 추출 * feat: 학기 VO에 정팩메 추가 * feat: V2 전용 상수 추가 * test: 스터디 팩토리 테스트 추가
- Loading branch information
Showing
7 changed files
with
221 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
5 changes: 5 additions & 0 deletions
5
src/main/java/com/gdschongik/gdsc/domain/studyv2/domain/AttendanceNumberGenerator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package com.gdschongik.gdsc.domain.studyv2.domain; | ||
|
||
public interface AttendanceNumberGenerator { | ||
int generate(); | ||
} |
22 changes: 22 additions & 0 deletions
22
src/main/java/com/gdschongik/gdsc/domain/studyv2/domain/RandomAttendanceNumberGenerator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package com.gdschongik.gdsc.domain.studyv2.domain; | ||
|
||
import java.security.SecureRandom; | ||
import lombok.SneakyThrows; | ||
|
||
/** | ||
* 네 자리의 랜덤한 출석번호를 생성합니다. | ||
*/ | ||
public class RandomAttendanceNumberGenerator implements AttendanceNumberGenerator { | ||
|
||
public static final int MIN_ORIGIN = 1000; | ||
public static final int MAX_BOUND = 10000; | ||
|
||
@Override | ||
@SneakyThrows | ||
public int generate() { | ||
return SecureRandom.getInstanceStrong() | ||
.ints(MIN_ORIGIN, MAX_BOUND) | ||
.findFirst() | ||
.orElseThrow(); | ||
} | ||
} |
54 changes: 54 additions & 0 deletions
54
src/main/java/com/gdschongik/gdsc/domain/studyv2/domain/StudyFactory.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
package com.gdschongik.gdsc.domain.studyv2.domain; | ||
|
||
import com.gdschongik.gdsc.domain.common.vo.Period; | ||
import com.gdschongik.gdsc.domain.common.vo.Semester; | ||
import com.gdschongik.gdsc.domain.member.domain.Member; | ||
import com.gdschongik.gdsc.domain.study.domain.StudyType; | ||
import com.gdschongik.gdsc.global.annotation.DomainFactory; | ||
import java.time.DayOfWeek; | ||
import java.time.LocalTime; | ||
import java.util.stream.IntStream; | ||
|
||
@DomainFactory | ||
public class StudyFactory { | ||
|
||
/** | ||
* 스터디 및 스터디회차를 생성합니다. | ||
* 스터디회차의 경우 총 회차 수만큼 생성되며, 생성 순서에 따라 position 값이 지정됩니다. | ||
*/ | ||
public StudyV2 create( | ||
StudyType type, | ||
String title, | ||
String description, | ||
String descriptionNotionLink, | ||
Semester semester, | ||
Integer totalRound, | ||
DayOfWeek dayOfWeek, | ||
LocalTime startTime, | ||
LocalTime endTime, | ||
Period applicationPeriod, | ||
String discordChannelId, | ||
String discordRoleId, | ||
Member mentor, | ||
AttendanceNumberGenerator attendanceNumberGenerator) { | ||
StudyV2 study = StudyV2.create( | ||
type, | ||
title, | ||
description, | ||
descriptionNotionLink, | ||
semester, | ||
totalRound, | ||
dayOfWeek, | ||
startTime, | ||
endTime, | ||
applicationPeriod, | ||
discordChannelId, | ||
discordRoleId, | ||
mentor); | ||
|
||
IntStream.rangeClosed(1, totalRound) | ||
.forEach(round -> StudySessionV2.createEmpty(round, attendanceNumberGenerator.generate(), study)); | ||
|
||
return study; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
109 changes: 109 additions & 0 deletions
109
src/test/java/com/gdschongik/gdsc/domain/studyv2/domain/StudyFactoryTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
package com.gdschongik.gdsc.domain.studyv2.domain; | ||
|
||
import static com.gdschongik.gdsc.global.common.constant.StudyConstant.*; | ||
import static org.assertj.core.api.Assertions.*; | ||
|
||
import com.gdschongik.gdsc.domain.member.domain.Member; | ||
import com.gdschongik.gdsc.domain.study.domain.StudyType; | ||
import com.gdschongik.gdsc.helper.FixtureHelper; | ||
import org.junit.jupiter.api.Test; | ||
|
||
class StudyFactoryTest { | ||
|
||
FixtureHelper fixtureHelper = new FixtureHelper(); | ||
StudyFactory studyFactory = new StudyFactory(); | ||
|
||
static class FixedAttendanceNumberGenerator implements AttendanceNumberGenerator { | ||
@Override | ||
public int generate() { | ||
return 1000; | ||
} | ||
} | ||
|
||
@Test | ||
void 스터디_생성시_설정한_총_회차만큼_스터디회차가_생성된다() { | ||
// given | ||
Member mentor = fixtureHelper.createMentor(1L); | ||
AttendanceNumberGenerator generator = new FixedAttendanceNumberGenerator(); | ||
int totalRound = 8; | ||
|
||
// when | ||
StudyV2 study = studyFactory.create( | ||
StudyType.OFFLINE, | ||
STUDY_TITLE, | ||
STUDY_DESCRIPTION, | ||
STUDY_DESCRIPTION_NOTION_LINK, | ||
STUDY_SEMESTER, | ||
totalRound, | ||
DAY_OF_WEEK, | ||
STUDY_START_TIME, | ||
STUDY_END_TIME, | ||
STUDY_APPLICATION_PERIOD, | ||
STUDY_DISCORD_CHANNEL_ID, | ||
STUDY_DISCORD_ROLE_ID, | ||
mentor, | ||
generator); | ||
|
||
// then | ||
assertThat(study.getStudySessions()).hasSize(8); | ||
} | ||
|
||
@Test | ||
void 스터디_생성시_스터디회차는_순서대로_position이_지정되어_생성된다() { | ||
// given | ||
Member mentor = fixtureHelper.createMentor(1L); | ||
AttendanceNumberGenerator generator = new FixedAttendanceNumberGenerator(); | ||
int totalRound = 8; | ||
|
||
// when | ||
StudyV2 study = studyFactory.create( | ||
StudyType.OFFLINE, | ||
STUDY_TITLE, | ||
STUDY_DESCRIPTION, | ||
STUDY_DESCRIPTION_NOTION_LINK, | ||
STUDY_SEMESTER, | ||
totalRound, | ||
DAY_OF_WEEK, | ||
STUDY_START_TIME, | ||
STUDY_END_TIME, | ||
STUDY_APPLICATION_PERIOD, | ||
STUDY_DISCORD_CHANNEL_ID, | ||
STUDY_DISCORD_ROLE_ID, | ||
mentor, | ||
generator); | ||
|
||
// then | ||
assertThat(study.getStudySessions()) | ||
.extracting(StudySessionV2::getPosition) | ||
.containsExactly(1, 2, 3, 4, 5, 6, 7, 8); | ||
} | ||
|
||
@Test | ||
void 스터디_생성시_각_스터디회차에_출석번호가_생성된다() { | ||
// given | ||
Member mentor = fixtureHelper.createMentor(1L); | ||
AttendanceNumberGenerator generator = new FixedAttendanceNumberGenerator(); | ||
|
||
// when | ||
StudyV2 study = studyFactory.create( | ||
StudyType.OFFLINE, | ||
STUDY_TITLE, | ||
STUDY_DESCRIPTION, | ||
STUDY_DESCRIPTION_NOTION_LINK, | ||
STUDY_SEMESTER, | ||
TOTAL_ROUND, | ||
DAY_OF_WEEK, | ||
STUDY_START_TIME, | ||
STUDY_END_TIME, | ||
STUDY_APPLICATION_PERIOD, | ||
STUDY_DISCORD_CHANNEL_ID, | ||
STUDY_DISCORD_ROLE_ID, | ||
mentor, | ||
generator); | ||
|
||
// then | ||
assertThat(study.getStudySessions()) | ||
.extracting(StudySessionV2::getLessonAttendanceNumber) | ||
.containsOnly(1000); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters