Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
117c807
feat : 채팅방 리스트 조회 시 마지막 메시지 전송 시간을 사용
RoundTable02 Oct 10, 2025
e67bc40
채팅방 리스트 조회 시 마지막 메시지 전송 시간을 사용 (#101)
RoundTable02 Oct 10, 2025
39538bf
feat : 커플 연결 없이 상담을 지속할 수 있도록 변경
RoundTable02 Oct 10, 2025
71cda4f
상담 지속 조건에서 커플 연동 여부 제거 (#102)
RoundTable02 Oct 10, 2025
6901846
feat : 채팅방 종료 이유 필드 추가
RoundTable02 Oct 11, 2025
c11823f
test : 테스트 엔티티 생성 코드 변경
RoundTable02 Oct 11, 2025
ee31fff
채팅방 종료 이유 필드 추가 (#103)
RoundTable02 Oct 11, 2025
d880e27
feat : 채팅 종료 시 상담 종류를 함께 추출
RoundTable02 Oct 11, 2025
d6ef4e3
feat : ChatRoomEntity 필드 추가
RoundTable02 Oct 11, 2025
2799f34
상담 종료 시 상담 종류를 함께 추출하도록 변경 (#104)
RoundTable02 Oct 11, 2025
444ded9
feat : 커플 디데이 정책 변경
RoundTable02 Oct 12, 2025
1898970
feat : V2 API를 기존 API로 통합
RoundTable02 Oct 12, 2025
6f2e63d
커플 디데이 정책 변경 (#105)
RoundTable02 Oct 12, 2025
3a8e458
feat : qa 서버 배포 스크립트 작성
RoundTable02 Oct 19, 2025
575f034
QA 및 TEST 서버 배포 테스트 (#106)
RoundTable02 Oct 19, 2025
723e57d
fix : change deploy script
RoundTable02 Oct 19, 2025
5725736
feat : 앰플리튜드 연결 구현
RoundTable02 Oct 19, 2025
0d7781d
config : 배포 설정 앰플리튜드 추가
RoundTable02 Oct 19, 2025
300891c
앰플리튜드 초기 설정 개발 (#107)
RoundTable02 Oct 19, 2025
dece01b
[QA] 앰플리튜드 연결 (#108)
RoundTable02 Oct 19, 2025
67074dd
feat: QA 프로필 추가
RoundTable02 Oct 22, 2025
3632210
config: Dockerfile profile 수정
RoundTable02 Oct 22, 2025
923ff4c
feat: 커플 재연결 30일 제한 추가 및 디데이 변경 여부 확인
RoundTable02 Oct 24, 2025
b740901
[MM-161] 커플 및 디데이 관련 기획 변경사항 반영 (#109)
RoundTable02 Oct 24, 2025
d7bfd3f
BREAKING CHANGE: 채팅 구조 전면 변경
RoundTable02 Oct 26, 2025
56087a7
test: 테스트 수정
RoundTable02 Oct 26, 2025
22dd6d8
fix: QA 서버 CORS 오류 해결
RoundTable02 Oct 27, 2025
1248376
Merge branch 'qa' into develop
RoundTable02 Oct 27, 2025
e29bf7f
[MM-159] 채팅 구조 전면 변경 (#110)
RoundTable02 Oct 27, 2025
44b8791
fix: QA 서버 CORS 에러 해결
RoundTable02 Oct 27, 2025
b979a5e
fix: setAllowCredentials 해제
RoundTable02 Oct 27, 2025
1b21629
fix: QA 서버 cors 오류 해결
RoundTable02 Oct 27, 2025
5bb3917
Update SecurityConfig.java
RoundTable02 Oct 27, 2025
5e1f614
test
RoundTable02 Oct 27, 2025
39e7e64
Merge branch 'qa' into develop
RoundTable02 Oct 27, 2025
6520b9d
[QA] 채팅 구조 변경 (#111)
RoundTable02 Oct 27, 2025
434cc55
Update MemberIntegrationTest.java
RoundTable02 Oct 27, 2025
f81dfae
Merge branch 'qa' of https://github.com/Central-MakeUs/malmo-server i…
RoundTable02 Oct 27, 2025
6fde0a0
Update TestSecurityConfig.java
RoundTable02 Oct 28, 2025
99e1a5a
fix: 일시적인 patch
RoundTable02 Oct 28, 2025
1f2aaeb
fix: 사용자 메시지 중복 저장 문제 해결
RoundTable02 Nov 2, 2025
c9e1d7c
fix: qa 내용 반영
RoundTable02 Nov 4, 2025
b9cab38
fix: 채팅 마무리 멘트가 나오지 않는 문제 해결
RoundTable02 Nov 5, 2025
780e7a5
refactor: migration 준비
RoundTable02 Nov 8, 2025
b6b8804
fix: GPT 모델 변경
RoundTable02 Nov 8, 2025
ab50565
fix: email이 존재하지 않는 경우 오류 해결
RoundTable02 Nov 10, 2025
9563fce
fix: 배포 yml 들여쓰기 오류 수정
RoundTable02 Nov 10, 2025
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
63 changes: 27 additions & 36 deletions .github/workflows/deploy-test.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
name: Test and Deploy to AWS EC2

# TODO : 테스트 클라이언트 개발 완료 시 수정
name: Test and Deploy to Test Environment

on:
push:
branches: [ release-test ]
branches: [ qa ]
pull_request:
branches: [ release-test ]
branches: [ qa ]

jobs:
# 1. 테스트 작업 (PR, Push 시 항상 실행)
Expand Down Expand Up @@ -52,10 +50,8 @@ jobs:
deploy:
# 'test' 작업이 성공해야만 실행됩니다.
needs: test
# 'push' 이벤트이고, 커밋 메시지에 특정 키워드가 있을 때만 실행됩니다.
if: |
github.event_name == 'push' &&
(contains(github.event.head_commit.message, 'release-green') || contains(github.event.head_commit.message, 'release-blue'))
# 'push' 이벤트일 때만 실행됩니다.
if: github.event_name == 'push'
runs-on: ubuntu-latest
steps:
- name: Checkout source code
Expand Down Expand Up @@ -84,19 +80,6 @@ jobs:
- name: Build with Gradle
run: ./gradlew bootJar --no-daemon

- name: Set Port and Container Name based on Commit Message
id: set_config
run: |
if [[ "${{ github.event.head_commit.message }}" == *"release-green"* ]]; then
echo "port=8080" >> $GITHUB_OUTPUT
echo "container_name=malmo-test-green" >> $GITHUB_OUTPUT
echo "Green deployment: port=8080, container=malmo-test-green"
elif [[ "${{ github.event.head_commit.message }}" == *"release-blue"* ]]; then
echo "port=8081" >> $GITHUB_OUTPUT
echo "container_name=malmo-test-blue" >> $GITHUB_OUTPUT
echo "Blue deployment: port=8081, container=malmo-test-blue"
fi

- name: Login to Docker Hub
uses: docker/login-action@v3
with:
Expand All @@ -111,12 +94,12 @@ jobs:
docker push $IMAGE_NAME:${{ github.sha }}
docker push $IMAGE_NAME:latest

- name: Deploy to EC2
- name: Deploy to Test EC2
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.EC2_HOST }}
host: ${{ secrets.TEST_EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
key: ${{ secrets.TEST_EC2_PRIVATE_KEY }}
script: |
# Docker Hub 로그인
echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login --username ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
Expand All @@ -128,28 +111,34 @@ jobs:
fi

# 기존 컨테이너 중지 및 삭제
docker stop ${{ steps.set_config.outputs.container_name }} || true
docker rm ${{ steps.set_config.outputs.container_name }} || true
docker stop malmo-test || true
docker rm malmo-test || true

# docker-compose.yml 파일 생성
cat << 'EOF' > docker-compose.test.yml
cat << 'EOF' > docker-compose-test.yml
version: '3.8'

services:
malmo-test:
image: ${{ secrets.DOCKERHUB_USERNAME }}/malmo-test:latest
container_name: ${{ steps.set_config.outputs.container_name }}
container_name: malmo-test
ports:
- "${{ steps.set_config.outputs.port }}:8080"
- "8080:8080"
logging:
driver: awslogs
options:
awslogs-group: malmo-test
awslogs-multiline-pattern: "^(INFO|ERROR)"
awslogs-region: ap-northeast-2
environment:
- TZ=Asia/Seoul
- SPRING_PROFILES_ACTIVE=prod
- SPRING_PROFILES_ACTIVE=qa
- SPRING_DATASOURCE_URL=${{ secrets.TEST_DB_URL }}
- SPRING_DATASOURCE_USERNAME=${{ secrets.DB_USERNAME }}
- SPRING_DATASOURCE_PASSWORD=${{ secrets.DB_PASSWORD }}
- SPRING_DATA_REDIS_HOST=malmo-redis
- REDIS_STREAM_KEY=${{ secrets.TEST_REDIS_STREAM_KEY }}
- REDIS_CONSUMER_GROUP=${{ secrets.TEST_REDIS_CONSUMER_GROUP }}
- REDIS_STREAM_KEY=${{ secrets.REDIS_STREAM_KEY_GREEN }}
- REDIS_CONSUMER_GROUP=${{ secrets.REDIS_CONSUMER_GROUP_GREEN }}
- JWT_SECRET=${{ secrets.JWT_SECRET }}
- KAKAO_REST_API_KEY=${{ secrets.KAKAO_REST_API_KEY }}
- APPLE_REST_API_KEY=${{ secrets.APPLE_REST_API_KEY }}
Expand All @@ -165,6 +154,8 @@ jobs:
- SECURITY_SERVER_URL_PRODUCTION=${{ secrets.SECURITY_SERVER_URL_PRODUCTION }}
- SECURITY_SERVER_URL_DEVELOPMENT=${{ secrets.SECURITY_SERVER_URL_DEVELOPMENT }}
- AES_ENCRYPTION_KEY=${{ secrets.AES_ENCRYPTION_KEY }}
- SENTRY_DSN=${{ secrets.SENTRY_DSN }}
- AMPLITUDE_API_KEY=${{ secrets.AMPLITUDE_API_KEY }}
restart: unless-stopped
networks:
- malmo-net
Expand All @@ -175,8 +166,8 @@ jobs:
EOF

# docker-compose로 애플리케이션 실행
docker-compose -f docker-compose.test.yml pull
docker-compose -f docker-compose.test.yml up -d
docker-compose -f docker-compose-test.yml pull
docker-compose -f docker-compose-test.yml up -d

# 불필요한 Docker 이미지 정리
docker image prune -f
docker image prune -f
7 changes: 7 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,12 @@ jobs:
container_name: ${{ steps.set_config.outputs.container_name }}
ports:
- "${{ steps.set_config.outputs.port }}:8080"
logging:
driver: awslogs
options:
awslogs-group: malmo_logs
awslogs-multiline-pattern: "^(INFO|ERROR)"
awslogs-region: ap-northeast-2
environment:
- TZ=Asia/Seoul
- SPRING_PROFILES_ACTIVE=prod
Expand All @@ -170,6 +176,7 @@ jobs:
- SECURITY_SERVER_URL_DEVELOPMENT=${{ secrets.SECURITY_SERVER_URL_DEVELOPMENT }}
- AES_ENCRYPTION_KEY=${{ secrets.AES_ENCRYPTION_KEY }}
- SENTRY_DSN=${{ secrets.SENTRY_DSN }}
- AMPLITUDE_API_KEY=${{ secrets.AMPLITUDE_API_KEY }}
restart: unless-stopped
networks:
- malmo-net
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,4 @@ out/
/src/main/resources/data.sql
/src/main/resources/data-ver1.sql
/src/main/resources/data-ver2.sql
CLAUDE.md
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,4 @@ USER malmo
EXPOSE 8080

# 애플리케이션 실행
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=prod", "/app/app.jar"]
ENTRYPOINT ["java", "-jar", "/app/app.jar"]
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,6 @@ public void onMessage(MapRecord<String, String, String> record) {
case REQUEST_CHAT_MESSAGE:
future = processChatMessage(payloadNode);
break;
case REQUEST_SUMMARY:
future = processSummary(payloadNode);
break;
case REQUEST_TOTAL_SUMMARY:
future = processTotalSummary(payloadNode);
break;
Expand Down Expand Up @@ -108,15 +105,7 @@ private CompletableFuture<Void> processChatMessage(JsonNode payloadNode) {
.chatRoomId(payloadNode.get("chatRoomId").asLong())
.nowMessage(payloadNode.get("nowMessage").asText())
.promptLevel(payloadNode.get("promptLevel").asInt())
.build()
);
}

private CompletableFuture<Void> processSummary(JsonNode payloadNode) {
return processMessageUseCase.processSummary(
ProcessMessageUseCase.ProcessSummaryCommand.builder()
.chatRoomId(payloadNode.get("chatRoomId").asLong())
.promptLevel(payloadNode.get("promptLevel").asInt())
.detailedLevel(payloadNode.get("detailedLevel").asInt())
.build()
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,19 @@ public class GlobalExceptionHandler {

@ExceptionHandler({MemberNotFoundException.class})
public ResponseEntity<ErrorResponse> handleMemberNotFoundException(MemberNotFoundException e) {
log.warn("[GlobalExceptionHandler: handleMemberNotFoundException 호출]", e);
log.warn("[GlobalExceptionHandler: handleMemberNotFoundException 호출] {}", e.getMessage());
return ErrorResponse.of(ErrorCode.NO_SUCH_MEMBER);
}

@ExceptionHandler({InviteCodeNotFoundException.class})
public ResponseEntity<ErrorResponse> handleCoupleCodeNotFoundException(InviteCodeNotFoundException e) {
log.info("[GlobalExceptionHandler: handleCoupleCodeNotFoundException 호출]", e);
log.info("[GlobalExceptionHandler: handleCoupleCodeNotFoundException 호출] {}", e.getMessage());
return ErrorResponse.of(ErrorCode.NO_SUCH_COUPLE_CODE);
}

@ExceptionHandler({OidcIdTokenException.class})
public ResponseEntity<ErrorResponse> handleOidcIdTokenException(OidcIdTokenException e) {
log.warn("[GlobalExceptionHandler: handleOidcIdTokenException 호출]", e);
log.warn("[GlobalExceptionHandler: handleOidcIdTokenException 호출] {}", e.getMessage());
return ErrorResponse.of(ErrorCode.INVALID_ID_TOKEN);
}

Expand All @@ -47,7 +47,7 @@ public ResponseEntity<ErrorResponse> handleRestApiException(RestApiException e)

@ExceptionHandler({InvalidRefreshTokenException.class})
public ResponseEntity<ErrorResponse> handleInvalidRefreshTokenException(InvalidRefreshTokenException e) {
log.info("[GlobalExceptionHandler: handleInvalidRefreshTokenException 호출]", e);
log.info("[GlobalExceptionHandler: handleInvalidRefreshTokenException 호출] {}", e.getMessage());
return ErrorResponse.of(ErrorCode.INVALID_REFRESH_TOKEN);
}

Expand All @@ -60,37 +60,37 @@ public ResponseEntity<ErrorResponse> handleInviteCodeGenerateFailedException(Inv

@ExceptionHandler({TermsNotFoundException.class})
public ResponseEntity<ErrorResponse> handleTermsNotFoundException(TermsNotFoundException e) {
log.warn("[GlobalExceptionHandler: handleTermsNotFoundException 호출]", e);
log.warn("[GlobalExceptionHandler: handleTermsNotFoundException 호출] {}", e.getMessage());
return ErrorResponse.of(ErrorCode.NO_SUCH_TERMS);
}

@ExceptionHandler({LoveTypeNotFoundException.class})
public ResponseEntity<ErrorResponse> handleLoveTypeNotFoundException(LoveTypeNotFoundException e) {
log.warn("[GlobalExceptionHandler: handleLoveTypeNotFoundException 호출]", e);
log.warn("[GlobalExceptionHandler: handleLoveTypeNotFoundException 호출] {}", e.getMessage());
return ErrorResponse.of(ErrorCode.NO_SUCH_LOVE_TYPE);
}

@ExceptionHandler({LoveTypeQuestionNotFoundException.class})
public ResponseEntity<ErrorResponse> handleLoveTypeQuestionNotFoundException(LoveTypeQuestionNotFoundException e) {
log.warn("[GlobalExceptionHandler: handleLoveTypeQuestionNotFoundException 호출]", e);
log.warn("[GlobalExceptionHandler: handleLoveTypeQuestionNotFoundException 호출] {}", e.getMessage());
return ErrorResponse.of(ErrorCode.NO_SUCH_LOVE_TYPE_QUESTION);
}

@ExceptionHandler({NotCoupleMemberException.class})
public ResponseEntity<ErrorResponse> handleNotCoupleMemberException(NotCoupleMemberException e) {
log.info("[GlobalExceptionHandler: handleNotCoupleMemberException 호출]", e);
log.info("[GlobalExceptionHandler: handleNotCoupleMemberException 호출] {}", e.getMessage());
return ErrorResponse.of(ErrorCode.NOT_COUPLE_MEMBER);
}

@ExceptionHandler({UsedInviteCodeException.class})
public ResponseEntity<ErrorResponse> handleUsedCoupleCodeException(UsedInviteCodeException e) {
log.info("[GlobalExceptionHandler: handleUsedCoupleCodeException 호출]", e);
log.info("[GlobalExceptionHandler: handleUsedCoupleCodeException 호출] {}", e.getMessage());
return ErrorResponse.of(ErrorCode.USED_COUPLE_CODE);
}

@ExceptionHandler({AlreadyCoupledMemberException.class})
public ResponseEntity<ErrorResponse> handleAlreadyCoupledMemberException(AlreadyCoupledMemberException e) {
log.info("[GlobalExceptionHandler: handleAlreadyCoupledMemberException 호출]", e);
log.info("[GlobalExceptionHandler: handleAlreadyCoupledMemberException 호출] {}", e.getMessage());
return ErrorResponse.of(ErrorCode.ALREADY_COUPLED_MEMBER);
}

Expand All @@ -103,37 +103,37 @@ public ResponseEntity<ErrorResponse> handleSseConnectionException(SseConnectionE

@ExceptionHandler({MemberNotTestedException.class})
public ResponseEntity<ErrorResponse> handleMemberNotTestedException(MemberNotTestedException e) {
log.info("[GlobalExceptionHandler: handleMemberNotTestedException 호출]", e);
log.info("[GlobalExceptionHandler: handleMemberNotTestedException 호출] {}", e.getMessage());
return ErrorResponse.of(ErrorCode.MEMBER_NOT_TESTED);
}

@ExceptionHandler({ChatRoomNotFoundException.class})
public ResponseEntity<ErrorResponse> handleChatRoomNotFoundException(ChatRoomNotFoundException e) {
log.warn("[GlobalExceptionHandler: handleChatRoomNotFoundException 호출]", e);
log.warn("[GlobalExceptionHandler: handleChatRoomNotFoundException 호출] {}", e.getMessage());
return ErrorResponse.of(ErrorCode.NO_SUCH_CHAT_ROOM);
}

@ExceptionHandler({NotValidChatRoomException.class})
public ResponseEntity<ErrorResponse> handleNotValidChatRoomException(NotValidChatRoomException e) {
log.warn("[GlobalExceptionHandler: handleNotValidChatRoomException 호출]", e);
log.warn("[GlobalExceptionHandler: handleNotValidChatRoomException 호출] {}", e.getMessage());
return ErrorResponse.of(ErrorCode.NOT_VALID_CHAT_ROOM);
}

@ExceptionHandler({MemberAccessDeniedException.class})
public ResponseEntity<ErrorResponse> handleMemberAccessDeniedException(MemberAccessDeniedException e) {
log.warn("[GlobalExceptionHandler: handleMemberAccessDeniedException 호출]", e);
log.warn("[GlobalExceptionHandler: handleMemberAccessDeniedException 호출] {}", e.getMessage());
return ErrorResponse.of(ErrorCode.MEMBER_ACCESS_DENIED);
}

@ExceptionHandler({NotValidCoupleCodeException.class})
public ResponseEntity<ErrorResponse> handleNotValidCoupleCodeException(NotValidCoupleCodeException e) {
log.info("[GlobalExceptionHandler: handleNotValidCoupleCodeException 호출]", e);
log.info("[GlobalExceptionHandler: handleNotValidCoupleCodeException 호출] {}", e.getMessage());
return ErrorResponse.of(ErrorCode.NOT_VALID_COUPLE_CODE);
}

@ExceptionHandler({CoupleQuestionNotFoundException.class})
public ResponseEntity<ErrorResponse> handleCoupleQuestionNotFoundException(CoupleQuestionNotFoundException e) {
log.warn("[GlobalExceptionHandler: handleCoupleQuestionNotFoundException 호출]", e);
log.warn("[GlobalExceptionHandler: handleCoupleQuestionNotFoundException 호출] {}", e.getMessage());
return ErrorResponse.of(ErrorCode.NO_SUCH_COUPLE_QUESTION);
}

Expand All @@ -146,25 +146,24 @@ public ResponseEntity<ErrorResponse> handleOAuthUnlinkFailureException(OAuthUnli

@ExceptionHandler({TempLoveTypeNotFoundException.class})
public ResponseEntity<ErrorResponse> handleTempLoveTypeNotFoundException(TempLoveTypeNotFoundException e) {
log.warn("[GlobalExceptionHandler: handleTempLoveTypeNotFoundException 호출]", e);
log.warn("[GlobalExceptionHandler: handleTempLoveTypeNotFoundException 호출] {}", e.getMessage());
return ErrorResponse.of(ErrorCode.NO_SUCH_TEMP_LOVE_TYPE);
}




/**
* ---------- 공통 예외 처리 핸들러 ----------
*/
@ExceptionHandler({NoHandlerFoundException.class, TypeMismatchException.class})
public ResponseEntity<ErrorResponse> handleBadRequestException(Exception e) {
log.warn("[CommonExceptionHandler: handleBadRequestException 호출]", e);
log.warn("[CommonExceptionHandler: handleBadRequestException 호출] {}", e.getMessage());
return ErrorResponse.of(ErrorCode.BAD_REQUEST);
}

@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
public ResponseEntity<ErrorResponse> handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {
log.warn("[CommonExceptionHandler: handleHttpRequestMethodNotSupportedException 호출]", e);
log.warn("[CommonExceptionHandler: handleHttpRequestMethodNotSupportedException 호출] {}", e.getMessage());
return ErrorResponse.of(ErrorCode.METHOD_NOT_ALLOWED);
}

Expand All @@ -184,7 +183,7 @@ public ResponseEntity<ErrorResponse> handleRuntimeException(Exception e) {

@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<ErrorResponse> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
log.warn("[CommonExceptionHandler: handleMethodArgumentNotValidException 호출]", e);
log.warn("[CommonExceptionHandler: handleMethodArgumentNotValidException 호출] {}", e.getMessage());
return ErrorResponse.of(ErrorCode.BAD_REQUEST);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -105,26 +105,6 @@ public BaseResponse<SendChatMessageUseCase.SendChatMessageResponse> sendChatMess
return BaseResponse.success(sendChatMessageResponse);
}

@Operation(
summary = "채팅방 단계 변경",
description = "현재 채팅방의 단계를 업그레이드합니다. 다음 단계의 오프닝 멘트를 SSE로 전달됩니다. JWT 토큰이 필요합니다.",
security = @SecurityRequirement(name = "Bearer Authentication")
)
@ApiResponse(
responseCode = "200",
description = "채팅방 단계 변경 성공; 데이터 응답 값은 없음",
content = @Content(schema = @Schema(implementation = SwaggerResponses.BaseSwaggerResponse.class))
)
@ApiCommonResponses.RequireAuth
@PostMapping("/upgrade")
public BaseResponse sendChatMessage(@AuthenticationPrincipal User user) {
sendChatMessageUseCase.upgradeChatRoom(SendChatMessageUseCase.SendChatMessageCommand.builder()
.userId(Long.valueOf(user.getUsername()))
.build());

return BaseResponse.success(null);
}

@Operation(
summary = "채팅방 종료",
description = "현재 채팅방을 종료합니다. JWT 토큰이 필요합니다.",
Expand Down
Loading
Loading