Skip to content

Commit

Permalink
[RELEASE] v1.1.1 (#310)
Browse files Browse the repository at this point in the history
* feat: 알림이 필요없는 에러 핸들링 실시 #265

* refactor: jest maxWorker 제거 #262

* fix: swc 설정 충돌 해결 #262

* refactor: front-CI self hosted 취소 #262

* refactor: 선택된 카테고리를 filter 대신 find 로 대체 #230

* style: 시작 버튼 텍스트 수정 #230

* feat: skeleton 스토리북 구현 #230

* refactor: 스토리북 폴더로 분리 #230

* refactor: 불필요해진 폴백 텍스트 제거 #230

* chore: queryClient 를 새로 생성해 테스트가 독립적으로 동작하도록 수정 #230

* fix: GameSkeleton aria-label 추가 #230

* test: 로딩 UI 테스트 분리 #230

* fix: self-hosted 대신 github actions 서버 사용 #230

* refactor: Timer hooks 디렉토리로 분리 #261

* refactor: 쿼리 발생 개수 저하되도록 만료된 방 마이그레이션 로직 수정 #268

* refactor: deleteAllInBatch -> deleteAll 사용 #268

* refactor: resetRoom 로직에서 roomBalanceBote migrate와 delete 로직 분리 #268

* refactor: 타임아웃되도 선택 API를 호출하도록 구조 리팩토링 #261

* refactor: 미사용 메서드 제거 #268

* test: 게임 화면 UI 테스트를 위해 storybook 작성 #261

* design: timer 구조 변경으로 인한 스타일 수정 #261

* design: 대기 화면 공통 레이아웃 적용 #261

* refactor: 시간 재는 타이머 관련 로직을 API 로직과 분리 #261

* refactor: 투표 시간 측정 타이머에 맞게 voteTimer로 이름 수정 #261

* refactor: 선택 완료 버튼 클릭 이벤트리스너명 vote로 수정 #261

* test: 타이머가 종료되었을 때 선택된 옵션이 있으면 투표 테스트 코드 작성 #261

* refactor: 투표 종료 여부를 Timer 컴포넌트가 가지면서 리렌더링 최적화 #261

* refactor: roundVoteIsFinished 네이밍을 voteIsFinished로 수정 #261

* refactor: Timer를 SelectContainer 하위 디렉토리로 위치 수정 #261

* feat: 게임 시작 전 카운트다운 구현 #270

* test: Countdown 스토리북 구현 #270

* refactor: 벌크 삭제 시 deleteAllInBatch() 사용하도록 변경 #268

* refactor: Countdown dimmed 영역 추가 #270

* design: Countdown 텍스트가 잘 안보인다는 피드백 반영 #270

* design: Countdown 땅콩이 카운트에 따라 점점 커지도록 구현 #270

* test: 게임 대기 화면 스토리북 구현 #270

* feat: 카운트 다운 끝난 후 게임 화면 라우팅 #270

* refactor: 게임 대기 화면 스토리북 폴더 수정 #270

* refactor: 타이머 관련 방어코드 작성 #270

* style: 버튼과 모달 가까이 위치 #270

* refactor: 게임 시작과 관련된 로컬 상태를 방정보 커스텀 훅과 분리 #270

* refactor: 카운트다운에 aria-label 추가 #270

* refactor: 시작 버튼을 isMaster로 관리 #270

* test: 게임 시작 버튼을 클릭하면 카운트 다운을 시작하는 테스트 코드 작성 #270

* test: 카운트 다운이 시작되고 3초 후 게임 화면으로 넘어가는 테스트 코드 작성 #270

* refactor: 카운트다운 관련 로직 커스텀 훅 분리 #270

* refactor: Countdown 폴더 위치 수정 #270

* refactor: useTimer 의존성 배열 수정 #261

* refactor: timer 유틸함수 분리 #261

* refactor: 불필요한 패키지 제거 #262

* refactor: 불필요한 옵션 제거 #262

* refactor: 모호한 함수명 수정 #261

* refactor: sudo로 변경하여 logback 쓰기권한 흭득 #81

* fix: HttpMediaTypeNotSupportedException를 415 Unsupported Media Type으로 처리하도록 수정

* fix: ClientErrorCode를 이전 버전으로 수정 및 새로운 코드 추가

* chore: build는 ubuntu 환경에서 처리하도록 변경 #81

* refactor: 불필요한 리스트 생성 제거 #268

* refactor: 미사용 메서드 제거 #268

* fix: 테스트용 메서드 제거 #268

* fix: 임시 사용 로직 제거 #268

* fix: EntityManger 로직 제거 #268

* fix: 테스트에서 트랜잭션 제거 #268

* refactor: refetchInterval 및 refetchIntervalInBackground 를 통해 게임 화면으로 안넘어간 오류 개선 #261

* refactor: 초대하기 버튼 위치 변경 #274

* fix: 투표를 한 상태여도 타이머가 끝난 후 투표 API 요청을 하는 오류 해결 #261

* test: 타이머가 종료되었을 때 이미 투표를 했다면 또 투표를 하지 않는 테스트 코드 구현 #261

* feat: category mouse cursor pointer 추가 #274

* feat: 매칭 결과로 제목 수정 및 설명 추가 #273

* refactor: Modal을 context로 관리 #272

* test: Modal 리팩토링을 위한 게임 시작 테스트 코드 작성 #272

* refactor: 방장 여부 recoil 값을 넣어 렌더링하는 테스트 유틸 함수 공용화 #272

* refactor: customRenderWithIsMaster 테스트코드 적용 #272

* refactor: 시작 버튼을 isMaster로 관리 #272

* refactor: Modal Context 게임 시작 부분 적용 #272

* refactor: Modal Context 투표 부분 적용 #272

* refactor: Modal UI 역할이 사라져 StartButtonContainer 제거 #272

* refactor: 게임 결과에도 Modal Context 적용 #272

* feat: 카테고리 클릭 시 방 설정 모달 #274

* refactor: RoomSettingHeader에 Modal Context 적용 #272

* refactor: 다른 모달도 적용할 수 있도록 Modal props 설정 #272

* fix: modal에서 toast를 사용하므로 toast를 modal 부모 요소로 수정 #272

* refactor: 다음 라운드 안내 모달 Modal Context 적용 #272

* refactor: 초대하기 모달 Modal Context 적용 #272

* refactor: 방 생성 및 참가 에러 모달 Modal Context 적용 #272

* fix: onConfirm 함수가 동작하지 않는 문제 해결 #272

* refactor: 중복된 모달 하나로 합치기 #272

* fix: Modal storybook 에 Provider 추가 #272

* refactor: webpack 설정 추가 #274

* style: 변수명 수정 #270

* refactor: 이미지 형식 webp로 변환 및 이미지 크기 조절 #278

* refactor: 폰트 preload 적용 #278

* refactor: meta tag 추가 #278

* refactor: favicon 설정 #278

* refactor: font subset 적용하여 리소스 용량 줄이기 #278

* feat: categoryContainer에 방 정보 추가 #274

* refactor: modal close 후 스크롤이 다시 생기는 버그 해결 #274

* feat: resize 시 버튼 위치 변경 #274

* chore: webpack-bundle-analyzer 설정 #278

* chore: js output contenthash 적용 #278

* refactor: 코드 스플리팅 적용 #278

* refactor: RoomBalanceVote 삭제 로직 ExpiredRoomMigrator에서 RoomBalanceVoteService로 이동 #268

* refactor: migrate 로직 메서드 분리 #268

* refactor: 종료된 방 마이그레이션 로직도 RoomMigrator에서 관리 #268

* style: 만료된 방뿐만 아니라 종료된 방도 마이그레이션 하므로 ExpiredRoomMigrator에서 RoomMigrator로 네이밍 변경 #268

* test: 종료된 방 마이그레이션 로직 관련 테스트 코드 수정 #268

* test: 종료된 방 투표 마이그레이션 테스트 작성 #268

* style: 방 투표로 전체 투표 생성하여 저장하는 메서드 네이밍 구체적으로 변경 #268

* refactor: 멤버 투표 마이그레이션하는 로직 네이밍 구체적으로 변경 #268

* test: 만료된 방 정보 마이그레이션 테스트 작성 #268

* refactor: 방 종료 검증 로직 위치 Migrator에서 RoomFacade.resetRoom() 으로 수정 #268

* style: migrator에서 룸의 상태에 대한 정보 제거 #268

* refactor: 서브셋 폰트 preload 적용 #278

* feat: nickname input focus에 따라 button 위치 변경 #274

* feat: SpringActuator 의존성 추가 #279

* chore: prod 환경은 health check만 가능하도록 설정 #279

* feat: random nickname 컴포넌트 외부에서 생성 #274

* chore: CI/CD 스크립트에 분산 prod 환경 (prod-a, prod-b) 설정 적용 #281

* chore: 운영환경 AZ에 따른 스크립트 네이밍 수정 #281

* feat: categoryContainer 테스트 코드 when given 추가 #274

* refactor: isFinalPage 이름을 isMatchingPage로 수정 #273

* refactor: 최대 인원, 최대 닉네임 글자를 테스트 하기 위해 mock data 수정 #273

* refactor: 헤더 컴포넌트에 매칭 결과 화면 헤더 추가 #273

* fix: Modal에서 navigate 사용하지 못하는 오류 해결 #272

* fix: 브라우저 환경과 Provider 구조가 다른 문제 해결 #272

* fix: 매칭 인원이 8명 이상인 경우 화면에 다 보이지 않는 문제 해결 #273

* refactor: 카운트다운을 스크린 리더가 읽도록 aria-live 추가 #270

* design: 카운트다운이 시작버튼 위로 오도록 z-index 설정 #270

* design: 매칭도 바의 길이보다 닉네임이 긴 경우 바 영역 밖으로 나오도록 수정 #273

* refactor: 배열 생성 자체를 막도록 조건문 추가 #270

* design: 매칭 순위가 두 자리인 경우 정렬 어긋남 개선 #273

* feat: resize 이벤트로 모바일 키보드 여부 판단 기능 추가 #274

* test: CategoryContainer 컴포넌트 테스트 추가 #274

* chore: prod 환경 application-prod.yml DB Replication 로직 설정 #287

* feat: Replication DB DataSource Routing 로직 작성 #287

* chore: 변경된 secret property key name 반영 #287

* feat: 매칭 결과가 정해진 크기 이상인 경우 스크롤, 플로팅 버튼으로 위 아래 이동 할 수 있는 기능 #273

* fix: Source DB 라우팅 네이밍 오류 수정 #287

* design: 위/아래 플로팅 버튼 스타일 추가 #273

* fix: url properties 이름 jdbc-url로 변경 #287

* refactor: 스크롤 관련 비즈니스 코드 별도의 커스텀 훅으로 분리 #273

* refactor: 스크롤 상태와 스크롤 제어 로직을 분리 #273

* refactor: 매칭 결과가 있는 경우에만 플로팅 버튼이 뜨도록 수정 #273

* refactor: 라운드 결과의 투표 현황 탭에서 투표 현황을 확인할 수 있도록 수정 #290

* refactor: 라운드 결과 페이지에서 빈 헤더 영역 차지하지 않도록 수정 #290

* refactor: 라운드 결과 레이아웃 수정 및 불필요한 컴포넌트 삭제 #290

* style: master, slave 네이밍 source, replica로 변경 #287

* style: RoutingReplicas <> 추가   #287

* feat: 투표 결과에 대한 동률 여부 및 우세한 선택지를 반환하는 유틸 함수 구현 #290

* feat: 해당 문항의 전체 응답 데이터를 요약해서 보여주는 기능 #290

* fix: 방장이 아닌 사용자가 카운트다운 후 게임 시작 안되는 오류 해결 #293

* feat: 투표 현황에서 나의 닉네임을 강조하여 표시하는 기능 #290

* refactor: 라운드 결과 탭 이름을 투표 결과, 투표 현황으로 수정 #290

* refactor: 탭이 방의 퍼센트와 전체 퍼센트에서 투표 결과 퍼센트와 투표 현황으로 수정됨에 따라 불 필요한 코드 삭제 #290

* fix: 카운트다운 테스트 코드 오류 해결 #293

* feat: 라운드 결과 페이지에 라운드 헤더 추가 #290

* refactor: 탭 안에 토픽이 위치하도록 로직 수정 #290

* design: 라운드 페이지 스타일 수정 #290

* refactor: 라운드 결과 탭 이름을 투표 결과에서 투표 통계로 수정 #290

* refactor: 투표 현황 페이지 삭제 #290

* refactor: 사용하지 않는 스타일 삭제 #290

* refactor: 라운드 결과 탭에서 그룹 관련된 코드 투표 통계로 수정 #290

* refactor: TabContentContainer 스토리북 수정 #290

* refactor: RoundVoteContainer 테스트 코드 수정 #290

* refactor: TabContentContainer 프로퍼티 이름 수정 #290

* refactor: 불 필요한 코드 삭제 #290

* refactor: CategoryContainer test 코드 명시적으로 변경 #274

* refactor: 이미지 포맷 및 크기 최적화 #292

* refactor: 불필요한 코드 제거 #274

* refactor: useKeyboard hook export -> default export로 변경 #274

* refactor: 불필요한 useState 제거 #274

* refactor: CategoryContainer 테스트 코드 오류 수정 #274

* merge: conflict 해결 #272

* refactor: 매칭 결과 높이 주석 추가 #273

* refactor: 초대 버튼 글씨 굵기 변경 #274

* refactor: 불필요한 코드 제거 #274

* refactor: 타입 단언을 통해 스크롤 로직 개선 #273

* design: 매칭 결과 설명 텍스트 진하기 수정 #273

* refactor: 내 닉네임인지 여부 변수명 수정 #290

* refactor: 선택지 두 개가 수치가 동등한지 여부를 나타내는 변수명 수정 #290

* refactor: 100 퍼센트 기준 대신 1 을 비율의 최댓값으로 수정 #292

* refactor: width와 right 대신 transform을 활용하여 reflow 발생 최적화 #292

* refactor: nickname을 표시하는 컴포넌트의 prop에 알맞게 수정 #290

* refactor: 불 필요한 타임 아웃 코드 삭제 #290

* refactor: 선택지의 퍼센트보다 멤버수로 투표 여부를 판단하도록 로직 수정 #290

* refactor: TabContentContainer에서 사용되는 util 파일 이름 수정 #290

* refactor: 투표 현황 페이지 삭제됨에 따라 불필요한 코드 삭제 #290

* refactor: rate와 scale 네이밍 수정 #292

* fix: 화면을 벗어나는 문제로 인해 100이 아닌 98로 계산 #292

* style: DB Routing log 설정 #287

* style: TODO 제거 #287

* style: 다중 개행 제거 #287

* style: RoutingDataSource에서 Slf4j 설정 제거 #287

* chore: prod 환경 자원을 아끼기 위해 be-ci-prod 스크립트 Git Actions 서버 사용하도록 변경 #287

* refactor: DataSourceType Enum으로 관리 #301

* refactor: 패키지 구조 변경 #301

* merge: develop 충돌 해결 #

* refactor: settingIcon webp로 변경 #291

* chore: github actions 스크립트 수정 #278

* fix: image 확장자 에러 해결 #291

* feat: 첫 라운드에 게임 준비 시간 추가 #302

* refactor: png 확장자 이미지를 webp 확장자로 수정 후 적용 #300

* fix: BundleAnalyzerPlugin를 dev 환경에 설정 #305

* feat: 요청 성공 시, Response URI, Body 로깅 기능 구현 #306

* fix: analyzer 플러그인 제거 #305

* feat: 응답정보에 요청에 대한 HttpMethod도 로깅 #306

* refactor: 정해진 영역보다 컨텐츠 길이가 긴 경우에만 스크롤 생기도록 수정 #300

* refactor: 스피너 로딩시 레이아웃 시프트 개선 #300

* refactor: 매칭 결과에서 매칭된 사람이 아무도 없는 경우 레이아웃 시프트 개선 #300

* refactor: 매칭 결과에서 퍼센트 숫자가 오르면서 발생하는 레이아웃 시프트 개선 #300

* fix: Replica1 -> Replica로 설정값 변경 #301

* chore: 변수명 의미 더 잘 전달되게 변경 #287

* style: 개행 추가 #306

* merge: 충돌 삭제되지 않은 파일 삭제

---------

Co-authored-by: novice0840 <[email protected]>
Co-authored-by: rbgksqkr <[email protected]>
Co-authored-by: PgmJun <[email protected]>
Co-authored-by: useon <[email protected]>
Co-authored-by: novice0840 <[email protected]>
Co-authored-by: jhon3242 <[email protected]>
Co-authored-by: Yuseon Kim(썬데이) <[email protected]>
Co-authored-by: Wonjun Choi(타칸) <[email protected]>
  • Loading branch information
9 people authored Sep 27, 2024
1 parent fbff41c commit 4d213a1
Show file tree
Hide file tree
Showing 64 changed files with 483 additions and 140 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/fe-cd-storybook.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ jobs:
API_BASE_URL: ${{ secrets.API_BASE_URL }}

- name: build storybook
run: npm run build-storybook
run: npm run build:storybook

- name: upload storybook
uses: peaceiris/actions-gh-pages@v3
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/fe-ci-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
${{ runner.os }}-node-
- name: Build
run: npm run build-dev
run: npm run build:dev
working-directory: ./frontend

- name: Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import org.springframework.web.context.request.ServletRequestAttributes;

@Slf4j
abstract class RequestLoggingAspect {
abstract class ControllerLoggingAspect {

@Pointcut("execution(* ddangkong.controller..*Controller.*(..))")
public void allController() {
Expand All @@ -27,11 +27,7 @@ public void polling() {
public void allControllerWithoutPolling() {
}

protected void logController(JoinPoint joinPoint) {
logRequest(joinPoint);
}

private void logRequest(JoinPoint joinPoint) {
protected void logControllerRequest(JoinPoint joinPoint) {
HttpServletRequest request = getHttpServletRequest();
String uri = request.getRequestURI();
String httpMethod = request.getMethod();
Expand All @@ -41,6 +37,14 @@ private void logRequest(JoinPoint joinPoint) {
log.info("Request Logging: {} {} body - {} parameters - {}", httpMethod, uri, body, queryParameters);
}

protected void logControllerResponse(JoinPoint joinPoint, Object responseBody) {
HttpServletRequest request = getHttpServletRequest();
String uri = request.getRequestURI();
String httpMethod = request.getMethod();

log.info("Response Logging: SUCCESS {} {} Body: {}", httpMethod, uri, responseBody);
}

private HttpServletRequest getHttpServletRequest() {
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
return requestAttributes.getRequest();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package ddangkong.aop.logging;


import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;

@Aspect
@Component
@Profile({"dev", "local"})
public class DevControllerLoggingAspect extends ControllerLoggingAspect {

@Before("allController()")
public void logControllerRequest(JoinPoint joinPoint) {
super.logControllerRequest(joinPoint);
}

@AfterReturning(pointcut = "allController()", returning = "responseBody")
protected void logControllerResponse(JoinPoint joinPoint, Object responseBody) {
super.logControllerResponse(joinPoint, responseBody);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,10 @@
@Aspect
@Component
@Profile("prod")
public class ProdRequestLoggingAspect extends RequestLoggingAspect {
public class ProdControllerLoggingAspect extends ControllerLoggingAspect {

@Before("allControllerWithoutPolling()")
public void logController(JoinPoint joinPoint) {
super.logController(joinPoint);
public void logControllerRequest(JoinPoint joinPoint) {
super.logControllerRequest(joinPoint);
}
}
54 changes: 54 additions & 0 deletions backend/src/main/java/ddangkong/config/sql/DataSourceConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package ddangkong.config.sql;

import ddangkong.config.sql.type.DataSourceType;
import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.Profile;
import org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy;

@Profile("prod")
@Configuration
public class DataSourceConfig {

@Bean
@ConfigurationProperties(prefix = "spring.datasource.source")
public DataSource sourceDataSource() {
return DataSourceBuilder.create()
.build();
}

@Bean
@ConfigurationProperties(prefix = "spring.datasource.replica")
public DataSource replicaDataSource() {
return DataSourceBuilder.create()
.build();
}

@Bean
public DataSource routingDataSource(
DataSource sourceDataSource,
DataSource replicaDataSource
) {
Map<Object, Object> dataSources = new HashMap<>();
dataSources.put(DataSourceType.SOURCE, sourceDataSource);
dataSources.put(DataSourceType.REPLICA, replicaDataSource);

RoutingDataSource routingDataSource = new RoutingDataSource();
routingDataSource.setDefaultTargetDataSource(dataSources.get(DataSourceType.SOURCE));
routingDataSource.setTargetDataSources(dataSources);

return routingDataSource;
}

@Primary
@Bean
public DataSource dataSource() {
return new LazyConnectionDataSourceProxy(routingDataSource(sourceDataSource(), replicaDataSource()));
}
}
18 changes: 18 additions & 0 deletions backend/src/main/java/ddangkong/config/sql/RoutingDataSource.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package ddangkong.config.sql;

import ddangkong.config.sql.type.DataSourceType;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import org.springframework.transaction.support.TransactionSynchronizationManager;

public class RoutingDataSource extends AbstractRoutingDataSource {

@Override
protected Object determineCurrentLookupKey() {
boolean isReadOnly = TransactionSynchronizationManager.isCurrentTransactionReadOnly();
if (isReadOnly) {
return DataSourceType.REPLICA;
} else {
return DataSourceType.SOURCE;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package ddangkong.config.sql.type;

public enum DataSourceType {
SOURCE,
REPLICA,
;
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@
public class RoomContent {

private static final int DELAY_MSEC = 2_000; // TODO SEC로 변경
private static final int GAME_START_WAITING_MSEC = 3_000; // TODO SEC로 변경
private static final int FIRST_ROUND = 1;
private static final int MSEC = 1_000;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down Expand Up @@ -58,7 +61,11 @@ public void updateVoteDeadline(LocalDateTime now, int timeLimit) {
throw new VoteDeadlineConfiguredException();
}

int afterSec = (timeLimit + DELAY_MSEC) / 1_000;
int afterSec = (timeLimit + DELAY_MSEC) / MSEC;
if (round == FIRST_ROUND) {
afterSec += GAME_START_WAITING_MSEC / MSEC;
}

voteDeadline = now.plusSeconds(afterSec);
}

Expand Down
8 changes: 4 additions & 4 deletions backend/src/main/resources/application-prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ spring:
username: ${secret.datasource.source.username}
password: ${secret.datasource.source.password}
jdbc-url: jdbc:mysql://${secret.datasource.source.host}:${secret.datasource.source.port}/${secret.datasource.database}?serverTimezone=Asia/Seoul&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useSSL=false
replica1:
replica:
driver-class-name: com.mysql.cj.jdbc.Driver
username: ${secret.datasource.replica1.username}
password: ${secret.datasource.replica1.password}
jdbc-url: jdbc:mysql://${secret.datasource.replica1.host}:${secret.datasource.replica1.port}/${secret.datasource.database}?serverTimezone=Asia/Seoul&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useSSL=false
username: ${secret.datasource.replica.username}
password: ${secret.datasource.replica.password}
jdbc-url: jdbc:mysql://${secret.datasource.replica.host}:${secret.datasource.replica.port}/${secret.datasource.database}?serverTimezone=Asia/Seoul&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useSSL=false

sql:
init:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.junit.jupiter.api.Assertions.assertAll;

import ddangkong.domain.balance.content.BalanceContent;
import ddangkong.domain.balance.content.Category;
Expand All @@ -25,7 +26,7 @@ class 투표_마감_시간_설정 {
@Test
void 투표_마감_시간을_설정한다() {
// given
int currentRound = 1;
int currentRound = 2;
int timeLimit = 10_000;
RoomSetting roomSetting = new RoomSetting(5, timeLimit, Category.IF);

Expand Down Expand Up @@ -62,7 +63,7 @@ class 투표_마감_시간_지남_여부 {

private static final Room ROOM = Room.createNewRoom();
private static final BalanceContent BALANCE_CONTENT = new BalanceContent(Category.IF, "치킨 vs 피자");
private static final int ROUND = 1;
private static final int ROUND = 2;

@Test
void 투표_마감_시간보다_이전_시간이면_투표가_마감되지_않은_것이다() {
Expand Down Expand Up @@ -100,4 +101,31 @@ class 투표_마감_시간_지남_여부 {
.isExactlyInstanceOf(MismatchRoundException.class);
}
}

@Nested
class 게임_대기_시간_포함_투표_마감_시간_지남_여부 {

private static final Room ROOM = Room.createNewRoom();
private static final BalanceContent BALANCE_CONTENT = new BalanceContent(Category.IF, "치킨 vs 피자");
private static final int START_ROUND = 1;

@Test
void_라운드는_투표_마감_시간에는_게임_대기_시간을_된다() {
// given
LocalDateTime voteDeadline = LocalDateTime.parse("2024-08-03T20:00:03");
RoomContent roomContent = RoomContent.newRoomContent(ROOM, BALANCE_CONTENT, START_ROUND);
int timeLimit = 3;
LocalDateTime inTime = LocalDateTime.parse("2024-08-03T20:00:08");
LocalDateTime overTime = LocalDateTime.parse("2024-08-03T20:00:09");

// when
roomContent.updateVoteDeadline(voteDeadline, timeLimit);

// then
assertAll(
() -> assertThat(roomContent.isOverVoteDeadline(inTime, START_ROUND)).isFalse(),
() -> assertThat(roomContent.isOverVoteDeadline(overTime, START_ROUND)).isTrue()
);
}
}
}
23 changes: 0 additions & 23 deletions frontend/index.html

This file was deleted.

Loading

0 comments on commit 4d213a1

Please sign in to comment.