Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
739 commits
Select commit Hold shift + click to select a range
4154935
style: SpeakingError 코드 포맷팅
DDINGJOO Jan 20, 2026
1bf6de1
style: SpeakingErrorType 코드 포맷팅
DDINGJOO Jan 20, 2026
ee0e8f8
style: OPIcException 코드 포맷팅
DDINGJOO Jan 20, 2026
438c0c0
style: OPIcAnswer 코드 포맷팅
DDINGJOO Jan 20, 2026
558a205
style: OPIcQuestion 코드 포맷팅
DDINGJOO Jan 20, 2026
d44360c
style: OPIcSession 코드 포맷팅
DDINGJOO Jan 20, 2026
d67b463
style: OPIcRepository 코드 포맷팅
DDINGJOO Jan 20, 2026
7b0d9e2
style: FeedbackService 코드 포맷팅
DDINGJOO Jan 20, 2026
d06ca16
style: TranscribeProxyService 코드 포맷팅
DDINGJOO Jan 20, 2026
2ce8f1a
style: VocabularyConfig 코드 포맷팅
DDINGJOO Jan 20, 2026
002e708
style: DailyStudyCommandService 코드 포맷팅
DDINGJOO Jan 20, 2026
57a0408
style: TestCommandService 코드 포맷팅
DDINGJOO Jan 20, 2026
8af9280
style: TestService 코드 포맷팅
DDINGJOO Jan 20, 2026
a425f7a
style: CommonErrorCodeSpec 코드 포맷팅
DDINGJOO Jan 20, 2026
bf87d00
style: JsonUtilSpec 코드 포맷팅
DDINGJOO Jan 20, 2026
c1dea55
style: BadgeTypeSpec 코드 포맷팅
DDINGJOO Jan 20, 2026
95a662c
style: ChattingErrorCodeSpec 코드 포맷팅
DDINGJOO Jan 20, 2026
4f55e65
style: GrammarLevelSpec 코드 포맷팅
DDINGJOO Jan 20, 2026
5c6aff1
style: GrammarErrorCodeSpec 코드 포맷팅
DDINGJOO Jan 20, 2026
c116134
style: VocabularyErrorCodeSpec 코드 포맷팅
DDINGJOO Jan 20, 2026
f7e80bd
merge: main 브랜치 병합 충돌 해결
DDINGJOO Jan 20, 2026
22e0c2d
Merge pull request #412 from Language-Study-Prooject/lint
DDINGJOO Jan 20, 2026
ad155d3
feature : OPIc 세션관리 + 답변 처리 파이프라인 구현 (#413)
hye-inA Jan 20, 2026
b30ea0a
feat: GAME_START, ROUND_END 메시지에 serverTime 추가
DDINGJOO Jan 20, 2026
90d1272
Merge pull request #434 from Language-Study-Prooject/feature/418/419/…
DDINGJOO Jan 20, 2026
6474f76
feat: WebSocketMessageHelper 유틸리티 클래스 추가
DDINGJOO Jan 20, 2026
1107a59
feat: 모든 WebSocket 메시지에 domain 필드 추가
DDINGJOO Jan 20, 2026
f1236b0
Merge pull request #435 from Language-Study-Prooject/feature/418/420/…
DDINGJOO Jan 20, 2026
9c61115
feat: GameSession 모델 클래스 생성
DDINGJOO Jan 20, 2026
bf25a6e
feat: GameSessionRepository 구현
DDINGJOO Jan 20, 2026
13f254e
refactor: ChatRoom에서 게임 필드 분리
DDINGJOO Jan 20, 2026
5195ca6
refactor: GameSession 기반으로 전체 게임 로직 리팩토링
DDINGJOO Jan 20, 2026
f75cf4d
Merge pull request #436 from Language-Study-Prooject/feature/418/421/…
DDINGJOO Jan 20, 2026
2fc718c
feat: GameSessionHandler Lambda 및 게임 세션 API 구현
DDINGJOO Jan 20, 2026
421cb60
Merge pull request #437 from Language-Study-Prooject/feature/418/422/…
DDINGJOO Jan 20, 2026
ed29c55
feat: 게임 시작 7분 후 자동 종료 기능 구현
DDINGJOO Jan 20, 2026
d0eb4b4
Merge pull request #438 from Language-Study-Prooject/feature/417/game…
DDINGJOO Jan 20, 2026
4f49838
fix : 메모리 증가 및 Lambda 응답 제한 시간 Cognito 트리거 제한시간과 동일하게 수정 (#439)
hye-inA Jan 20, 2026
05e8627
feat: 캐치마인드 게임 방 분리 기능 구현 (#455)
DDINGJOO Jan 20, 2026
0f29fb9
feat: 참가자 닉네임 및 방장 변경 WebSocket 알림 구현 (#456)
DDINGJOO Jan 20, 2026
469cefd
fix: ChatRoomFunction에 UserTable DynamoDB 권한 추가
DDINGJOO Jan 21, 2026
229be3a
fix: GameSettings에 @DynamoDbBean 어노테이션 추가
DDINGJOO Jan 21, 2026
0748cf5
fix: ChatRoomFunction에 WEBSOCKET_ENDPOINT 환경변수 및 권한 추가
DDINGJOO Jan 21, 2026
3f8c114
fix: WebSocket Lambda 함수들에 WEBSOCKET_ENDPOINT 환경변수 추가
DDINGJOO Jan 21, 2026
fbe58a3
fix: Grammar WebSocket Lambda 환경 변수 및 권한 추가
DDINGJOO Jan 21, 2026
e953152
feat: GSI1SK 확장성 있는 재설계 및 DB 레벨 필터링
DDINGJOO Jan 21, 2026
c34d183
fix: increase stats query limit to 100 days
DDINGJOO Jan 21, 2026
7db99c8
feat: improve game round and connection management logic
DDINGJOO Jan 21, 2026
7cdb9b3
refactor: 코드 정리 및 미사용 클래스 제거 (#459)
DDINGJOO Jan 21, 2026
90c0135
refactor(all): DI 패턴 및 전략 패턴 적용 (#461)
DDINGJOO Jan 21, 2026
ab28efd
refactor: relocate and restructure seed data files
DDINGJOO Jan 21, 2026
3a95101
chore: seed 데이터 폴더 구조 정리
DDINGJOO Jan 21, 2026
e87cff6
feat: add CI/CD pipeline configuration for CodePipeline
DDINGJOO Jan 22, 2026
4e3785d
fix: add SNS topic policy and DependsOn for notification rule
DDINGJOO Jan 22, 2026
126f89a
fix: correct paths in buildspec.yml for CodeBuild
DDINGJOO Jan 22, 2026
8fa4eb6
fix: remove hardcoded JAVA_HOME, use runtime default
DDINGJOO Jan 22, 2026
00dfc65
fix: add gradle wrapper for CI/CD build
DDINGJOO Jan 22, 2026
3f5a880
fix: use single line sam package command with hardcoded bucket
DDINGJOO Jan 22, 2026
b26f47c
fix: use existing stack name group2-englishstudy-chatting
DDINGJOO Jan 22, 2026
033c98e
fix: add missing WEBSOCKET_ENDPOINT env var to WebSocket connect func…
DDINGJOO Jan 22, 2026
14a67da
merge: develop 브랜치 최신화
DDINGJOO Jan 22, 2026
9b3f286
docs: update FRONTEND-API-GUIDE with new RoomType/RoomStatus structure
DDINGJOO Jan 22, 2026
8296952
feat : WebSocket Connect, Disconnect 핸들러 & SpeakingConnecion 모델 구현
hye-inA Jan 22, 2026
fc6f9e6
feat : WebSocket 메시지 처리 handler, service 구현
hye-inA Jan 22, 2026
f39bdf9
feat : WebSocket 연결 정보 Repository 구현
hye-inA Jan 22, 2026
674f87c
fix: update WebSocketDisconnectHandler to use GameSession model
DDINGJOO Jan 22, 2026
540f92d
perf: optimize CI/CD build time
DDINGJOO Jan 22, 2026
96dcbc2
feat: add custom CodeBuild Docker image with pre-installed tools
DDINGJOO Jan 22, 2026
02dab52
feature : AI 영어 회화 연습 기능 (#468)
hye-inA Jan 22, 2026
c7c49d2
Merge remote-tracking branch 'origin/prod' into prod
DDINGJOO Jan 22, 2026
4ffd919
fix: remove typo in SpeakingConnectionRepository
DDINGJOO Jan 22, 2026
ccaa034
fix : 오타 수정
hye-inA Jan 22, 2026
e87606c
Merge branch 'prod' of https://github.com/Language-Study-Prooject/BE_…
hye-inA Jan 22, 2026
c201a07
chore: trigger build test with custom Docker image
DDINGJOO Jan 22, 2026
4bacba2
chore: remove unnecessary newlines and whitespace across WebSocket ha…
DDINGJOO Jan 22, 2026
dc0348a
chore: remove unnecessary newlines and whitespace across WebSocket ha…
DDINGJOO Jan 22, 2026
4a40621
Release: 캐치마인드 게임 분리, AI 회화 연습, CI/CD 파이프라인 (#469)
DDINGJOO Jan 22, 2026
6810f41
refactor : websocket -> rest api 전환
hye-inA Jan 22, 2026
76045eb
feat : speaking handler REST로 교체
hye-inA Jan 22, 2026
2c7094a
feat : speaking 관련 dto 생성
hye-inA Jan 22, 2026
5ad8fd6
refacotor : 기존 service 코드 로직 재사용 및 repository 리펙토링
hye-inA Jan 22, 2026
c1ca2c0
fix: add CORS headers to API Gateway error responses (#479)
DDINGJOO Jan 22, 2026
e26e2ce
feat(news): 뉴스 도메인 기반 구조 구축 (#385)
DDINGJOO Jan 22, 2026
dae2045
Merge pull request #481 from Language-Study-Prooject/feature/385/news…
DDINGJOO Jan 22, 2026
ba5e665
feat(news): 뉴스 수집 파이프라인 구현 (#386)
DDINGJOO Jan 22, 2026
05e099b
Merge pull request #482 from Language-Study-Prooject/feature/386/news…
DDINGJOO Jan 22, 2026
231e82f
refactor(news): NewsAPI 제거, RSS만 사용
DDINGJOO Jan 22, 2026
8e0d2df
Merge pull request #483 from Language-Study-Prooject/feature/386/news…
DDINGJOO Jan 22, 2026
2c7b2d8
feat(news): AI 뉴스 분석 시스템 구현 (#387)
DDINGJOO Jan 22, 2026
6a76f5a
Merge pull request #485 from Language-Study-Prooject/feature/387/news…
DDINGJOO Jan 22, 2026
2801acf
feat(news): 뉴스 학습 API 구현 (#388)
DDINGJOO Jan 22, 2026
70fecbe
Merge pull request #486 from Language-Study-Prooject/feature/388/news…
DDINGJOO Jan 22, 2026
c70c703
feat(news): 뉴스 학습 부가 기능 구현 (#389)
DDINGJOO Jan 22, 2026
d993204
Merge pull request #487 from Language-Study-Prooject/feature/389/news…
DDINGJOO Jan 22, 2026
ddbdc1b
feat(news): 복합 퀴즈 시스템 구현 (#471)
DDINGJOO Jan 22, 2026
a559501
Merge pull request #488 from Language-Study-Prooject/feature/471/news…
DDINGJOO Jan 22, 2026
fff1ab5
feat(news): 단어 수집 & Vocabulary 연동 구현 (#472)
DDINGJOO Jan 22, 2026
474108f
Merge pull request #489 from Language-Study-Prooject/feature/472/news…
DDINGJOO Jan 22, 2026
3f947e2
feat: add multi-environment deployment support (dev/test/prod)
DDINGJOO Jan 22, 2026
af48d60
Merge branch 'prod' of https://github.com/Language-Study-Prooject/BE_…
hye-inA Jan 22, 2026
618d4d8
fix: update buildspec.yml to deploy prod environment with parameter o…
DDINGJOO Jan 22, 2026
481a549
feat(news): 뉴스 도메인 기반 구조 구축 (#385)
DDINGJOO Jan 22, 2026
0346084
feat(news): 뉴스 수집 파이프라인 구현 (#386)
DDINGJOO Jan 22, 2026
4f42c61
refactor(news): NewsAPI 제거, RSS만 사용
DDINGJOO Jan 22, 2026
682c07a
feat(news): AI 뉴스 분석 시스템 구현 (#387)
DDINGJOO Jan 22, 2026
626efcd
feat(news): 뉴스 학습 API 구현 (#388)
DDINGJOO Jan 22, 2026
db6dd87
feat(news): 뉴스 학습 부가 기능 구현 (#389)
DDINGJOO Jan 22, 2026
63d748d
feat(news): 복합 퀴즈 시스템 구현 (#471)
DDINGJOO Jan 22, 2026
399f188
feat(news): 단어 수집 & Vocabulary 연동 구현 (#472)
DDINGJOO Jan 22, 2026
488a287
feat: add multi-environment deployment support (dev/test/prod)
DDINGJOO Jan 22, 2026
cee91b6
fix: update buildspec.yml to deploy prod environment with parameter o…
DDINGJOO Jan 22, 2026
f4ab156
feat : prod branch merge
hye-inA Jan 22, 2026
8d3c101
refactor : AI 말하기 Websocket 구현 -> REST API 구현으로 리팩토링 (#490)
hye-inA Jan 22, 2026
ad4b59e
fix: revert buildspec.yml to build-only for CloudFormation deploy stage
DDINGJOO Jan 22, 2026
682c083
merge: sync test with prod
DDINGJOO Jan 22, 2026
bd2b70d
fix: revert buildspec.yml to build-only for CloudFormation deploy stage
DDINGJOO Jan 22, 2026
79e3480
fix: update all API Gateway StageName to use Environment parameter
DDINGJOO Jan 22, 2026
3b925d5
Merge branch 'prod' into test
DDINGJOO Jan 22, 2026
5158788
fix: correct VocabularyTable and ContentBucket references in NewsFunc…
DDINGJOO Jan 22, 2026
9f3a672
fix: correct VocabularyTable and ContentBucket references in NewsFunc…
DDINGJOO Jan 22, 2026
cdb3cd9
Merge branch 'prod' into test
DDINGJOO Jan 22, 2026
7e6756b
fix: add stack name prefix to GameScheduleGroup and daily-stats sched…
DDINGJOO Jan 22, 2026
cf6c7ec
fix: add stack name prefix to GameScheduleGroup and daily-stats sched…
DDINGJOO Jan 22, 2026
6930140
feat: add support for existing Cognito User Pool reuse across environ…
DDINGJOO Jan 22, 2026
53f4931
Merge branch 'prod' into test
DDINGJOO Jan 22, 2026
9804d39
fix: add conditional Cognito ARN reference in API Gateway Authorizer
DDINGJOO Jan 22, 2026
7892e1a
Merge branch 'prod' into test
DDINGJOO Jan 22, 2026
13e0827
fix: remove Cognito resources completely, use existing Cognito only
DDINGJOO Jan 22, 2026
4d0db0a
fix: remove Cognito resources completely, use existing Cognito only
DDINGJOO Jan 22, 2026
2a93a8b
Merge branch 'prod' into test
DDINGJOO Jan 22, 2026
6c4cc89
feat : speaking rest API 람다 함수 추가
hye-inA Jan 22, 2026
4d91cc8
feat: add S3 bucket resource and fix environment-specific endpoints
DDINGJOO Jan 22, 2026
51b977e
Merge branch 'prod' into test
DDINGJOO Jan 22, 2026
0256690
fix: add stack name prefix to news-collection schedule name
DDINGJOO Jan 22, 2026
c084f22
fix: add X-Requested-With and Accept headers to CORS config
DDINGJOO Jan 22, 2026
e7e4b85
fix: use environment variable for S3 bucket URLs
DDINGJOO Jan 22, 2026
efcf597
Merge branch 'develop' into feature/speaking-ai-service
hye-inA Jan 22, 2026
5eda0db
fix: disable authorizer for CORS preflight requests
DDINGJOO Jan 22, 2026
143c0ff
feat : speaking REST API 람다 함수 추가 (#491)
hye-inA Jan 22, 2026
1e776a5
Merge branch 'prod' of https://github.com/Language-Study-Prooject/BE_…
hye-inA Jan 22, 2026
78045ee
Merge branch 'prod' into feature/speaking-ai-service
hye-inA Jan 22, 2026
158dcee
refactor : speaking service 재사용
hye-inA Jan 22, 2026
cb88a63
Merge branch 'feature/speaking-ai-service' of https://github.com/Lang…
hye-inA Jan 22, 2026
2cc5db0
refactor : AI 영어 회화 연습 코드 리팩토링
hye-inA Jan 22, 2026
42e9d2e
feature : test 벡엔드 서버에 AI 말하기 연습 기능 배포 (#492)
hye-inA Jan 22, 2026
726efb7
feat : handleChat 메서드 JsonNull 체크 푸가
hye-inA Jan 22, 2026
e57b1f6
feature : handleChat 메서드 JsonNull 체크 추가 (#493)
hye-inA Jan 22, 2026
f82e649
feat(news): 뉴스 학습 배지 시스템 구현 (#473)
DDINGJOO Jan 23, 2026
27bd3ab
Merge pull request #494 from Language-Study-Prooject/feature/473/news…
DDINGJOO Jan 23, 2026
a6662e0
fix: add PATCH method to CORS AllowMethods
DDINGJOO Jan 23, 2026
de32fed
merge: resolve conflicts with test branch
DDINGJOO Jan 23, 2026
2cfa89b
Merge pull request #495 from Language-Study-Prooject/develop
DDINGJOO Jan 23, 2026
ac6e311
test: BadgeType 개수 테스트 수정 (15 -> 29)
DDINGJOO Jan 23, 2026
2efcfa8
Merge branch 'develop' into test
DDINGJOO Jan 23, 2026
e0c7651
fix: CORS PATCH 메서드 추가
DDINGJOO Jan 23, 2026
4229984
docs: 뉴스 기능 프론트엔드 연동 가이드 작성
DDINGJOO Jan 23, 2026
0b1fb4c
fix: NewsCollectionFunction에 Bedrock, Comprehend 권한 추가
DDINGJOO Jan 23, 2026
ee6bab9
fix: add null check for collectWord request body
DDINGJOO Jan 23, 2026
565cdcd
feat: enhance stats API and bookmark response for frontend
DDINGJOO Jan 23, 2026
1a8e4f0
feat: add category classification to news AI analysis
DDINGJOO Jan 23, 2026
92f526e
fix: add /stats/dashboard endpoint to template.yaml
DDINGJOO Jan 23, 2026
ce71f18
fix: filter by ARTICLE# prefix in findById to avoid returning UserNew…
DDINGJOO Jan 23, 2026
09afe65
docs: add News API troubleshooting guide
DDINGJOO Jan 23, 2026
aad76c8
feat: add Cognito authorizer to News API and enhance keyword extraction
DDINGJOO Jan 23, 2026
c1a958e
Merge branch 'test' into prod
DDINGJOO Jan 23, 2026
fd42d9b
Revert "Merge branch 'test' into prod"
DDINGJOO Jan 23, 2026
9a3fe6f
feat: enhance bookmark and reading status tracking for News API
DDINGJOO Jan 23, 2026
8aed923
refactor : session_id가 null 체크 추가
hye-inA Jan 23, 2026
07f1526
feat : test 브랜치 동기화
hye-inA Jan 23, 2026
a67d15f
fix : sessionId NullPointerException 에러 수정 (#496)
hye-inA Jan 23, 2026
d3029a2
feat: enhance bookmark and reading status tracking for News API
DDINGJOO Jan 23, 2026
d855f58
Merge branch 'test' of https://github.com/Language-Study-Prooject/BE_…
hye-inA Jan 23, 2026
63669c7
feat: add category filtering to UserWord API with enhanced query logic
DDINGJOO Jan 23, 2026
36cee08
feat: add default value for ExistingCognitoClientId in template.yaml
DDINGJOO Jan 23, 2026
e164c63
Merge prod into test: resolve conflicts keeping test features
DDINGJOO Jan 23, 2026
81188b0
Merge branch 'test' of https://github.com/Language-Study-Prooject/BE_…
hye-inA Jan 23, 2026
2c72aaa
fix: SpeakingHandler getStringOrNull 컴파일 에러 수정
DDINGJOO Jan 23, 2026
0e22611
fix: SpeakingHandler getStringOrNull 컴파일 에러 수정
DDINGJOO Jan 23, 2026
0563433
fix: SpeakingHandler getStringOrNull 컴파일 에러 수정
DDINGJOO Jan 23, 2026
686b9ab
Merge branch 'test' of https://github.com/Language-Study-Prooject/BE_…
hye-inA Jan 23, 2026
f8644dd
fix: Bedrock 키워드(meaningKo 포함)를 article에 저장하도록 수정
DDINGJOO Jan 23, 2026
badf720
fix: Bedrock 키워드(meaningKo 포함)를 article에 저장하도록 수정
DDINGJOO Jan 23, 2026
5f2bc1b
fix: Bedrock 키워드(meaningKo 포함)를 article에 저장하도록 수정
DDINGJOO Jan 23, 2026
fa533d3
fix: Bedrock 키워드(meaningKo 포함)를 article에 저장하도록 수정
DDINGJOO Jan 23, 2026
75acb9a
feat: add dashboard stats API and enhance news stats tracking
DDINGJOO Jan 23, 2026
2634fe4
Merge prod into test: sync dashboard stats and news features
DDINGJOO Jan 23, 2026
f2b12a0
Merge prod into test: sync dashboard stats and news features
DDINGJOO Jan 23, 2026
dbaf3a3
Merge prod into develop: sync all latest features
DDINGJOO Jan 23, 2026
11c9eed
feat: add dashboard stats API and enhance news stats tracking
DDINGJOO Jan 23, 2026
0ca9df0
feat: add dashboard stats API and enhance news stats tracking
DDINGJOO Jan 23, 2026
b5d62e8
refactor: format code with consistent indentation and spacing
DDINGJOO Jan 23, 2026
6a04d01
fix: filter by ARTICLE# prefix in findById to avoid returning bookmar…
DDINGJOO Jan 23, 2026
ce27f43
Merge prod: fix findById ARTICLE# filter
DDINGJOO Jan 23, 2026
fd2726b
Merge prod: fix findById ARTICLE# filter
DDINGJOO Jan 23, 2026
4f49d49
Merge branch 'test' of https://github.com/Language-Study-Prooject/BE_…
hye-inA Jan 23, 2026
2c5ec01
Merge pull request #510 from Language-Study-Prooject/feature/499/noti…
DDINGJOO Jan 23, 2026
239f47f
Merge pull request #511 from Language-Study-Prooject/develop
DDINGJOO Jan 23, 2026
9aadd02
Merge pull request #511 from Language-Study-Prooject/develop
DDINGJOO Jan 23, 2026
ef864a9
feat : test 브랜치 동기화
hye-inA Jan 23, 2026
126104c
feature : Speaking Table & Function template.yaml 파일에 추가 (#513)
hye-inA Jan 23, 2026
9c2d671
feature : Speaking Table & Function template.yaml 파일에 추가 (#513)
hye-inA Jan 23, 2026
e5ff39a
feature : 말하기 연습 기능 polly 서비스 권한 추가 (#514)
hye-inA Jan 23, 2026
4cae51e
feature : 말하기 연습 기능 polly 서비스 권한 추가 (#514)
hye-inA Jan 23, 2026
8208da4
Merge branch 'test' of https://github.com/Language-Study-Prooject/BE_…
hye-inA Jan 23, 2026
c01be8a
feature : transcribe API KEY 추가 (#516)
hye-inA Jan 23, 2026
7986bd1
feature : transcribe API KEY 추가 (#516)
hye-inA Jan 23, 2026
1de4def
feat: 채팅 슬래시 명령어 시스템 고도화
DDINGJOO Jan 24, 2026
a375535
Merge pull request #521 from Language-Study-Prooject/feature/517-chat…
DDINGJOO Jan 24, 2026
377155c
Merge pull request #522 from Language-Study-Prooject/develop
DDINGJOO Jan 24, 2026
19f25d1
Merge pull request #522 from Language-Study-Prooject/develop
DDINGJOO Jan 24, 2026
248c6ba
feature : Test 브랜치 코드 Prod 브랜치 병합 (#529)
hye-inA Jan 24, 2026
aac551a
feat: implement word chain (끝말잇기) game with dictionary API integration
DDINGJOO Jan 24, 2026
04e09b0
Merge pull request #530 from Language-Study-Prooject/feature/523-word…
DDINGJOO Jan 24, 2026
5a90f04
Merge pull request #531 from Language-Study-Prooject/develop
DDINGJOO Jan 24, 2026
60dcce7
Merge pull request #531 from Language-Study-Prooject/develop
DDINGJOO Jan 24, 2026
161b305
fix: update ChattingErrorCodeSpec to include new error codes
DDINGJOO Jan 24, 2026
777bdb4
Merge pull request #532 from Language-Study-Prooject/develop
DDINGJOO Jan 24, 2026
cf63386
Merge pull request #532 from Language-Study-Prooject/develop
DDINGJOO Jan 24, 2026
18406b4
fix: add UserTable read permission to WebSocket Lambda
DDINGJOO Jan 24, 2026
2565c81
Merge pull request #533 from Language-Study-Prooject/develop
DDINGJOO Jan 24, 2026
dbe6be5
Merge pull request #533 from Language-Study-Prooject/develop
DDINGJOO Jan 24, 2026
c351b37
fix: add Bedrock permission to NewsCollectionFunction
DDINGJOO Jan 24, 2026
49e6c94
fix: fallback to yesterday's news when today's news is empty
DDINGJOO Jan 24, 2026
ce58474
feat : develop 브랜치 동기화
hye-inA Jan 24, 2026
f4a3b4e
Merge branch 'test' of https://github.com/Language-Study-Prooject/BE_…
hye-inA Jan 24, 2026
083f451
feat : develop 브랜치 동기화
hye-inA Jan 24, 2026
2ecdf5a
feat : 채팅 도메인 닉네임 조회용 메서드 추가
hye-inA Jan 24, 2026
2ed6c0b
feature : 채팅 메뉴에서 닉네임 조회 테스트 배포 (#535)
hye-inA Jan 24, 2026
e68df41
Merge pull request #536 from Language-Study-Prooject/fix/unify-cognit…
DDINGJOO Jan 25, 2026
bee4b0e
Merge pull request #538 from Language-Study-Prooject/develop
DDINGJOO Jan 25, 2026
f51c040
Merge pull request #539 from Language-Study-Prooject/develop
DDINGJOO Jan 25, 2026
0a87543
fix: revert buildspec to build+package only, let Deploy stage handle …
DDINGJOO Jan 25, 2026
0d25309
Merge test into prod - resolve conflict with test version
DDINGJOO Jan 25, 2026
cfc4175
fix: force Authorizer recreation to update Cognito User Pool
DDINGJOO Jan 25, 2026
81ab3cb
fix: rename Authorizer to CognitoAuthV2 to force recreation with corr…
DDINGJOO Jan 25, 2026
c03c3c9
fix: use GSI1 index for WordChainSession roomId queries
DDINGJOO Jan 25, 2026
1b73359
feat : develop 브랜치 동기화
hye-inA Jan 25, 2026
b2ad5d8
feat : prod 브랜치 동기화
hye-inA Jan 25, 2026
257fabe
feat : test 브랜치 동기화
hye-inA Jan 25, 2026
479f107
feat : develop 브랜치 최신화 내용 병합
hye-inA Jan 25, 2026
f957fb9
Merge pull request #541 from Language-Study-Prooject/test
DDINGJOO Jan 25, 2026
00a2398
feat : Cognito Authorizer(토큰)에서 닉네임을 추출 & DB 저장 로직 구현
hye-inA Jan 25, 2026
039448e
feat : main 브랜치 동기화
hye-inA Jan 25, 2026
529a180
Merge branch 'prod' of https://github.com/Language-Study-Prooject/BE_…
hye-inA Jan 25, 2026
feb53e7
feat : prod 브랜치 동기화
hye-inA Jan 25, 2026
0607fc1
feat : test 브랜치 동기화
hye-inA Jan 25, 2026
359b1f8
feat : main 브랜치 동기화
hye-inA Jan 25, 2026
ff8a20f
Merge branch 'develop' into feature/48/62/131/user-profile-api
hye-inA Jan 25, 2026
546f958
feat : 채팅 메세지 저장시 nickname 추가
hye-inA Jan 26, 2026
aa79c1f
feat :로드캐스트 메시지에 nickname 추가
hye-inA Jan 26, 2026
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
26 changes: 8 additions & 18 deletions ServerlessFunction/buildspec-prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ env:
SAM_CLI_TELEMETRY: 0
GRADLE_OPTS: "-Dorg.gradle.daemon=false -Dorg.gradle.parallel=true -Dorg.gradle.caching=true"
ENVIRONMENT: prod
STACK_NAME: group2-englishstudy-prod

phases:
install:
Expand All @@ -28,26 +27,17 @@ phases:
- echo "Building SAM application for $ENVIRONMENT..."
- cd $CODEBUILD_SRC_DIR/ServerlessFunction
- sam build --parallel --cached
- echo "Build completed"
- echo "Packaging SAM application..."
- sam package --s3-bucket group2-englishstudy-pipeline-artifacts --s3-prefix sam-packages/$ENVIRONMENT --output-template-file packaged-template.yaml

post_build:
commands:
- echo "Deploying to $ENVIRONMENT environment..."
- cd $CODEBUILD_SRC_DIR/ServerlessFunction
- |
sam deploy \
--stack-name $STACK_NAME \
--s3-bucket group2-englishstudy-pipeline-artifacts \
--s3-prefix sam-deploy/prod \
--region ap-northeast-2 \
--capabilities CAPABILITY_IAM CAPABILITY_AUTO_EXPAND \
--no-confirm-changeset \
--no-fail-on-empty-changeset \
--parameter-overrides \
Environment=$ENVIRONMENT \
ExistingCognitoUserPoolId=ap-northeast-2_ezDwzFCzR \
ExistingCognitoClientId=4ns077jcr1pkue2vvisr6qdpu5
- echo "Deployment completed on $(date)"
- echo "Build completed on $(date)"

artifacts:
files:
- packaged-template.yaml
base-directory: ServerlessFunction

cache:
paths:
Expand Down
23 changes: 8 additions & 15 deletions ServerlessFunction/buildspec-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ env:
SAM_CLI_TELEMETRY: 0
GRADLE_OPTS: "-Dorg.gradle.daemon=false -Dorg.gradle.parallel=true -Dorg.gradle.caching=true"
ENVIRONMENT: test
STACK_NAME: group2-englishstudy-test

phases:
install:
Expand All @@ -28,23 +27,17 @@ phases:
- echo "Building SAM application for $ENVIRONMENT..."
- cd $CODEBUILD_SRC_DIR/ServerlessFunction
- sam build --parallel --cached
- echo "Build completed"
- echo "Packaging SAM application..."
- sam package --s3-bucket group2-englishstudy-pipeline-artifacts --s3-prefix sam-packages/$ENVIRONMENT --output-template-file packaged-template.yaml

post_build:
commands:
- echo "Deploying to $ENVIRONMENT environment..."
- cd $CODEBUILD_SRC_DIR/ServerlessFunction
- |
sam deploy \
--stack-name $STACK_NAME \
--resolve-s3 \
--s3-prefix $STACK_NAME \
--region ap-northeast-2 \
--capabilities CAPABILITY_IAM CAPABILITY_AUTO_EXPAND \
--no-confirm-changeset \
--no-fail-on-empty-changeset \
--parameter-overrides Environment=$ENVIRONMENT ExistingCognitoUserPoolId=ap-northeast-2_ezDwzFCzR ExistingCognitoClientId=4ns077jcr1pkue2vvisr6qdpu5
- echo "Deployment completed on $(date)"
- echo "Build completed on $(date)"

artifacts:
files:
- packaged-template.yaml
base-directory: ServerlessFunction

cache:
paths:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
import com.mzc.secondproject.serverless.domain.chatting.model.ChatMessage;
import com.mzc.secondproject.serverless.domain.chatting.repository.ChatRoomRepository;
import com.mzc.secondproject.serverless.domain.chatting.service.ChatMessageService;
import com.mzc.secondproject.serverless.domain.user.model.User;
import com.mzc.secondproject.serverless.domain.user.service.UserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -29,21 +31,23 @@ public class ChatMessageHandler implements RequestHandler<APIGatewayProxyRequest

private final ChatMessageService chatMessageService;
private final ChatRoomRepository chatRoomRepository;
private final UserService userService;
private final HandlerRouter router;

/**
* 기본 생성자 (Lambda에서 사용)
*/
public ChatMessageHandler() {
this(new ChatMessageService(), new ChatRoomRepository());
this(new ChatMessageService(), new ChatRoomRepository(), new UserService());
}

/**
* 의존성 주입 생성자 (테스트 용이성)
*/
public ChatMessageHandler(ChatMessageService chatMessageService, ChatRoomRepository chatRoomRepository) {
public ChatMessageHandler(ChatMessageService chatMessageService, ChatRoomRepository chatRoomRepository, UserService userService) {
this.chatMessageService = chatMessageService;
this.chatRoomRepository = chatRoomRepository;
this.userService = userService;
this.router = initRouter();
}

Expand All @@ -69,6 +73,19 @@ private APIGatewayProxyResponseEvent sendMessage(APIGatewayProxyRequestEvent req
String messageType = dto.getMessageType() != null ? dto.getMessageType() : "TEXT";
String messageId = UUID.randomUUID().toString();
String now = Instant.now().toString();

String nickname = "Unknown";
try {
User user = userService.getUserProfile(userId);
if (user != null && user.getNickname() != null) {
nickname = user.getNickname();
} else {
nickname = "User-" + userId.substring(0, 5);
}
} catch (Exception e) {
logger.warn("닉네임 조회 실패: {}", e.getMessage());
nickname = "User-" + userId.substring(0, 5);
}

ChatMessage message = ChatMessage.builder()
.pk("ROOM#" + roomId)
Expand All @@ -80,6 +97,7 @@ private APIGatewayProxyResponseEvent sendMessage(APIGatewayProxyRequestEvent req
.messageId(messageId)
.roomId(roomId)
.userId(userId)
.nickname(nickname)
.content(dto.getContent())
.messageType(messageType)
.createdAt(now)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,42 @@ public Map<String, Object> handleRequest(Map<String, Object> event, Context cont
RoomToken token = optToken.get();
String userId = token.getUserId();
String roomId = token.getRoomId();

String nickname = "Unknown";

// Cognito Authorizer에서 닉네임 추출
try {
if (event.containsKey("requestContext")) {
Map<String, Object> reqCtx = (Map<String, Object>) event.get("requestContext");

if (reqCtx.containsKey("authorizer")) {
Map<String, Object> auth = (Map<String, Object>) reqCtx.get("authorizer");

Map<String, Object> claims = auth;
if (auth.containsKey("claims")) {
claims = (Map<String, Object>) auth.get("claims");
} else if (auth.containsKey("principalId")) {
claims = auth;
}

if (claims != null) {
if (claims.get("nickname") != null) {
nickname = (String) claims.get("nickname");
} else if (claims.get("custom:nickname") != null) {
nickname = (String) claims.get("custom:nickname");
} else if (claims.get("name") != null) {
nickname = (String) claims.get("name");
}
}
}
}
// 닉네임 못찾았으면 UserId 앞부분 표시
if ("Unknown".equals(nickname) && userId != null && userId.length() > 5) {
nickname = "User-" + userId.substring(0, 5);
}
} catch (Exception ex) {
logger.warn("닉네임 표시 실패: {}", ex.getMessage());
}

// 같은 방에서 기존 연결 삭제 (새로고침 시 중복 연결 방지)
connectionRepository.deleteUserConnectionsInRoom(userId, roomId);

Expand All @@ -72,6 +107,7 @@ public Map<String, Object> handleRequest(Map<String, Object> event, Context cont
.gsi2sk("CONN#" + connectionId)
.connectionId(connectionId)
.userId(userId)
.nickname(nickname)
.roomId(roomId)
.connectedAt(now)
.ttl(ttl)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@ private Map<String, Object> handleRegularMessage(String connectionId, MessagePay
broadcastMessage.put("messageId", savedMessage.getMessageId());
broadcastMessage.put("roomId", savedMessage.getRoomId());
broadcastMessage.put("userId", savedMessage.getUserId());
broadcastMessage.put("nickname", savedMessage.getNickname());
broadcastMessage.put("content", savedMessage.getContent());
broadcastMessage.put("messageType", savedMessage.getMessageType());
broadcastMessage.put("createdAt", savedMessage.getCreatedAt());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public class Connection {

private String connectionId;
private String userId;
private String nickname;
private String roomId;
private String connectedAt;
private Long ttl; // 10분 후 자동 삭제
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.mzc.secondproject.serverless.domain.chatting.model.WordChainSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbIndex;
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable;
import software.amazon.awssdk.enhanced.dynamodb.Key;
import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
Expand All @@ -19,16 +20,20 @@ public class WordChainSessionRepository {

private static final Logger logger = LoggerFactory.getLogger(WordChainSessionRepository.class);
private static final String TABLE_NAME = EnvConfig.getRequired("CHAT_TABLE_NAME");
private static final String GSI1_INDEX_NAME = "GSI1";

private final DynamoDbTable<WordChainSession> table;
private final DynamoDbIndex<WordChainSession> gsi1Index;

public WordChainSessionRepository() {
this.table = AwsClients.dynamoDbEnhanced()
.table(TABLE_NAME, TableSchema.fromBean(WordChainSession.class));
this.gsi1Index = table.index(GSI1_INDEX_NAME);
}

public WordChainSessionRepository(DynamoDbTable<WordChainSession> table) {
this.table = table;
this.gsi1Index = table.index(GSI1_INDEX_NAME);
}

/**
Expand All @@ -52,16 +57,16 @@ public Optional<WordChainSession> findById(String sessionId) {
}

/**
* 방의 활성 세션 조회
* 방의 활성 세션 조회 (GSI1 인덱스 사용)
*/
public Optional<WordChainSession> findActiveByRoomId(String roomId) {
return table.query(QueryConditional.sortBeginsWith(
return gsi1Index.query(QueryConditional.sortBeginsWith(
Key.builder()
.partitionValue("ROOM#" + roomId)
.sortValue("WORDCHAIN#")
.build()))
.items()
.stream()
.flatMap(page -> page.items().stream())
.filter(WordChainSession::isActive)
.findFirst();
}
Expand Down
Loading