-
Notifications
You must be signed in to change notification settings - Fork 0
dev -> prod #74
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโll occasionally send you account related emails.
Already on GitHub? Sign in to your account
dev -> prod #74
Conversation
feat: ๊ฐ๋ฐ ํ๊ฒฝ ์๋ฒ CICD ์ค์ ์ถ๊ฐ
docs: ์ด์ ํ ํ๋ฆฟ ์ถ๊ฐ
fix: ํ์ํ ํ๋ ์ถ๊ฐ
fix: sr before๋ฅผ not nullable๋ก ๋ณ๊ฒฝ
feat: ์จ๋ณด๋ฉ ์ ์ ์ ์ ์์ ํฐ์ด๋ฅผ ์ ํํ๋ API ๊ตฌํ
โฆ-api feat: ์นด์นด์ค ์์ ๋ก๊ทธ์ธ ๋ฐ ์ฌ์ฉ์ ์จ๋ณด๋ฉ ์์คํ ๊ตฌํ
feat: ์ ์ญ ์์ธ์ฒ๋ฆฌ ๋ฐ ๊ณตํต ApiResult ๊ตฌํ
feat: add new api with additional field for response
feat: ๋์ ๊ธฐ๋ก ์กฐํ API
feat: add gym level field to route mission
fix: ์ธ์ฆ ์์ธ์ฒ๋ฆฌ ๋ฐฉ์ ๋ณ๊ฒฝ
โฆ-for-user feat: ์ ์ ๊ธฐ๋ณธ ํ๋กํ์ด๋ฏธ์ง ๋๋ค ์์ฑ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This appears to be a significant development-to-production deployment that introduces a comprehensive climbing gym platform application. The PR involves the creation of an entirely new Spring Boot application with OAuth2 authentication, climbing gym management, user sessions, route missions, and recommendation systems.
- Complete application infrastructure with authentication, Discord notifications, and file upload capabilities
- Core business entities including users, gyms, levels, route missions, and user sessions
- RESTful API endpoints for gym management, user onboarding, and mission recommendations
Reviewed Changes
Copilot reviewed 167 out of 170 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| src/main/resources/logback.xml | Configures logging for different environments with Discord webhook integration |
| src/main/resources/application.yaml | Application configuration including database, OAuth2, JWT, and external service settings |
| src/main/java/com/climbup/climbup/user/entity/User.java | User entity with gym and level selection functionality |
| src/main/java/com/climbup/climbup/gym/entity/ClimbingGym.java | Climbing gym entity with brand association |
| src/main/java/com/climbup/climbup/route/entity/RouteMission.java | Route mission entity for climbing challenges |
| Multiple service/controller files | Business logic and API endpoints for user management, gym operations, and recommendations |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
| <layout class="ch.qos.logback.classic.PatternLayout"> | ||
| <pattern>%d{HH:mm:ss} [%thread] [%-5level] %logger{36} - %msg%n```%ex{full}```</pattern> | ||
| </layout> | ||
| <username>์ด์ํ๊ฒฝ ๋ก๊ทธ ์๋ด</username> |
Copilot
AI
Aug 20, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Username has a typo - missing '๋ฆผ' character. Should be '์ด์ํ๊ฒฝ ๋ก๊ทธ ์๋ฆผ๋ด' instead of '์ด์ํ๊ฒฝ ๋ก๊ทธ ์๋ด'.
| <username>์ด์ํ๊ฒฝ ๋ก๊ทธ ์๋ด</username> | |
| <username>์ด์ํ๊ฒฝ ๋ก๊ทธ ์๋ฆผ๋ด</username> |
| public void selectGymLevel(GymLevel gymLevel) { | ||
| if (gymLevel == null) { | ||
| throw new GymLevelNotFoundException(); | ||
| } |
Copilot
AI
Aug 20, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The selectGymLevel method throws GymLevelNotFoundException when gymLevel is null, but line 73 in OnboardingServiceImpl passes null to this method intentionally to reset the level. This will cause an exception.
| } | |
| // Allow null to reset the gym level |
| public void selectGym(ClimbingGym gym) { | ||
| if (gym == null) { | ||
| throw new GymNotFoundException(); | ||
| } |
Copilot
AI
Aug 20, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The selectGym method throws GymNotFoundException when gym is null, but this method is called from selectGym which should allow setting gym to a valid value. The null check seems incorrect here.
| } |
| private Integer score; | ||
|
|
||
| @ManyToOne(fetch = FetchType.LAZY) | ||
| @JoinColumn(name = "gym_level_id", nullable = false) |
Copilot
AI
Aug 20, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The gymLevel field is marked as nullable = false, but it's not being set in the RouteMissionServiceImpl.createRouteMission method, which will cause database constraint violations.
| @JoinColumn(name = "gym_level_id", nullable = false) | |
| @JoinColumn(name = "gym_level_id", nullable = false) | |
| @NonNull |
| } | ||
|
|
||
| @GetMapping("/error") | ||
| public String testError() { |
Copilot
AI
Aug 20, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The testError method returns a String instead of ResponseEntity<ApiResult> which is inconsistent with the other endpoints in this controller.
| public String testError() { | |
| public ResponseEntity<ApiResult<String>> testError() { |
| level: | ||
| root: INFO | ||
| com.climbup.climbup: DEBUG | ||
| org.springframework.security: DEBUG |
Copilot
AI
Aug 20, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Debug logging is enabled for security components (org.springframework.security: DEBUG) which could expose sensitive authentication information in production logs.
| org.springframework.security: DEBUG | |
| org.springframework.security: WARN |
๐ PR ์ ๋ชฉ
๐ ์์ ๋ด์ฉ
โ ์ฒดํฌ๋ฆฌ์คํธ
๐จ ์ฃผ์์ฌํญ