Develop#55
Conversation
There was a problem hiding this comment.
Pull Request Overview
Adds full support for Naver social login across backend, frontend, documentation, and infrastructure. Includes:
- Backend: new Naver login flow (
UserService,UserController), enum update inUser.kt, DB migrations and triggers for membership. - Frontend: React login component updates (
Login.tsx), routing change, chat UI tweaks (ChatMessage.tsx,Chatting.tsx), and tailwind output. - Docs & Infra: API docs fix for character upload, Nginx proxy rules, updated project README.
Reviewed Changes
Copilot reviewed 13 out of 13 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| springboot/.../service/UserService.kt | Implemented Naver login, token error handling, user registration |
| springboot/.../model/User.kt | Added NAVER to LoginType enum |
| springboot/.../controller/UserController.kt | Added Naver login & callback endpoints |
| springboot/src/docs/CharacterController.md | Corrected HTTP method for image upload |
| readme.md | Expanded architecture diagram and roadmap |
| nginx/react-frontpage/src/Component/Login/Login.tsx | Added Naver social login handlers and redirect logic |
| nginx/react-frontpage/src/Component/Chatting/Components/ChatMessage.tsx | Refactored Markdown styling and avatar display |
| nginx/react-frontpage/src/Component/Chatting/Chatting.tsx | Increased max-width container from 3xl to 5xl |
| nginx/react-frontpage/src/App.tsx | Added Naver redirect route |
| nginx/nginx.conf | Added proxy rules for Naver login endpoints |
| mysql/migrations/V1.1.4__init.sql | Expanded login_type enum to include NAVER |
| mysql/migrations/V1.1.5__init.sql | Triggers to auto-set/social membership levels |
Comments suppressed due to low confidence (1)
nginx/react-frontpage/src/Component/Login/Login.tsx:136
- The variable
usedCodesis referenced but not declared or imported in this file, which will cause a runtime error. Define or importusedCodesbefore use.
if (usedCodes.has(code)) {
| } | ||
|
|
||
| # 네이버 OAuth 콜백 처리 (필요시) | ||
| location /server/user/social/naver/redirect { |
There was a problem hiding this comment.
The proxy location for /server/user/social/naver/redirect forwards the full path including /server, but the Spring controller maps /social/naver/redirect. Add a rewrite or adjust proxy_pass URI so the backend sees the correct path.
| location /server/user/social/naver/redirect { | |
| location /server/user/social/naver/redirect { | |
| rewrite ^/server/user/social/naver/redirect /social/naver/redirect break; |
| @@ -1,2 +1,2 @@ | |||
| *,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: } | |||
There was a problem hiding this comment.
[nitpick] This is a generated CSS file with minified content. Consider excluding it from version control or moving it to a build artifact to reduce repo size and improve maintainability.
| p: ({ node, ...props }) => <p className={`${user === "나" ? "text-[1.05rem] max-sm:text-[0.8rem]" : "text-gray-100 text-[1rem] max-sm:text-[0.9rem] leading-relaxed mb-3"}`} {...props} />, | ||
| h1: ({ node, ...props }) => <h1 className={`${user === "나" ? "text-[1.5rem] max-sm:text-[1.05rem] font-bold my-2" : "text-gray-100 text-[1.4rem] max-sm:text-[1.2rem] font-bold my-3"}`} {...props} />, | ||
| h2: ({ node, ...props }) => <h2 className={`${user === "나" ? "text-[1.3rem] max-sm:text-[1rem] font-bold my-2" : "text-gray-100 text-[1.2rem] max-sm:text-[1.1rem] font-bold my-3"}`} {...props} />, | ||
| h3: ({ node, ...props }) => <h3 className={`${user === "나" ? "text-[1.1rem] max-sm:text-[0.95rem] font-bold my-1" : "text-gray-100 text-[1.1rem] max-sm:text-[1rem] font-bold my-2"}`} {...props} />, | ||
| h4: ({ node, ...props }) => <h4 className={`${user === "나" ? "text-[1rem] max-sm:text-[0.9rem] font-bold my-1" : "text-gray-100 text-[1rem] max-sm:text-[0.95rem] font-bold my-2"}`} {...props} />, | ||
| ul: ({ node, ...props }) => <ul className={`pl-5 list-disc my-2 ${user === "나" ? "max-sm:text-[0.8rem]" : "text-gray-100 max-sm:text-[0.9rem]"}`} {...props} />, | ||
| ol: ({ node, ...props }) => <ol className={`pl-5 list-decimal my-2 ${user === "나" ? "max-sm:text-[0.8rem]" : "text-gray-100 max-sm:text-[0.9rem]"}`} {...props} />, | ||
| li: ({ node, ...props }) => <li className={`my-1 max-sm:my-[0.15rem] ${user !== "나" ? "text-gray-100" : ""}`} {...props} />, | ||
| blockquote: ({ node, ...props }) => <blockquote className={`border-l-4 pl-3 italic my-2 ${user === "나" ? "border-gray-400 max-sm:text-[0.8rem]" : "border-blue-400 text-gray-200 max-sm:text-[0.9rem]"}`} {...props} />, |
There was a problem hiding this comment.
[nitpick] The large JSX style logic for Markdown components could be refactored into separate styled subcomponents to improve readability and reduce inline complexity.
| p: ({ node, ...props }) => <p className={`${user === "나" ? "text-[1.05rem] max-sm:text-[0.8rem]" : "text-gray-100 text-[1rem] max-sm:text-[0.9rem] leading-relaxed mb-3"}`} {...props} />, | |
| h1: ({ node, ...props }) => <h1 className={`${user === "나" ? "text-[1.5rem] max-sm:text-[1.05rem] font-bold my-2" : "text-gray-100 text-[1.4rem] max-sm:text-[1.2rem] font-bold my-3"}`} {...props} />, | |
| h2: ({ node, ...props }) => <h2 className={`${user === "나" ? "text-[1.3rem] max-sm:text-[1rem] font-bold my-2" : "text-gray-100 text-[1.2rem] max-sm:text-[1.1rem] font-bold my-3"}`} {...props} />, | |
| h3: ({ node, ...props }) => <h3 className={`${user === "나" ? "text-[1.1rem] max-sm:text-[0.95rem] font-bold my-1" : "text-gray-100 text-[1.1rem] max-sm:text-[1rem] font-bold my-2"}`} {...props} />, | |
| h4: ({ node, ...props }) => <h4 className={`${user === "나" ? "text-[1rem] max-sm:text-[0.9rem] font-bold my-1" : "text-gray-100 text-[1rem] max-sm:text-[0.95rem] font-bold my-2"}`} {...props} />, | |
| ul: ({ node, ...props }) => <ul className={`pl-5 list-disc my-2 ${user === "나" ? "max-sm:text-[0.8rem]" : "text-gray-100 max-sm:text-[0.9rem]"}`} {...props} />, | |
| ol: ({ node, ...props }) => <ol className={`pl-5 list-decimal my-2 ${user === "나" ? "max-sm:text-[0.8rem]" : "text-gray-100 max-sm:text-[0.9rem]"}`} {...props} />, | |
| li: ({ node, ...props }) => <li className={`my-1 max-sm:my-[0.15rem] ${user !== "나" ? "text-gray-100" : ""}`} {...props} />, | |
| blockquote: ({ node, ...props }) => <blockquote className={`border-l-4 pl-3 italic my-2 ${user === "나" ? "border-gray-400 max-sm:text-[0.8rem]" : "border-blue-400 text-gray-200 max-sm:text-[0.9rem]"}`} {...props} />, | |
| p: StyledParagraph, | |
| h1: StyledHeading1, | |
| h2: StyledHeading2, | |
| h3: StyledHeading3, | |
| h4: StyledHeading4, | |
| ul: StyledUnorderedList, | |
| ol: StyledOrderedList, | |
| li: StyledListItem, | |
| blockquote: StyledBlockquote, |
No description provided.