Skip to content
16 changes: 14 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@ repositories {
mavenCentral()
}

dependencyManagement {
imports {
mavenBom "io.awspring.cloud:spring-cloud-aws-dependencies:3.4.0"
}
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
Expand Down Expand Up @@ -52,8 +58,10 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-redis'

//S3의존성 추가
implementation("software.amazon.awssdk:bom:2.21.0")
implementation("software.amazon.awssdk:s3:2.21.0")
// implementation("software.amazon.awssdk:bom:2.21.0")
// implementation("software.amazon.awssdk:s3:2.21.0")

implementation 'io.awspring.cloud:spring-cloud-aws-starter-s3'

// Feign 추가
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign:4.3.0'
Expand Down Expand Up @@ -81,6 +89,10 @@ dependencies {
implementation 'org.ahocorasick:ahocorasick:0.6.3'
}





// Querydsl 빌드 옵션 설정
def generated = 'src/main/generated'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
public record GetAcquisitionResponse(
Long acquisitionId,
String cardFrontImageUrl,
String certificationType,
int index,
String name,
List<String> tags,
Expand All @@ -25,6 +26,7 @@ public static GetAcquisitionResponse from(Acquisition acquisition) {
return GetAcquisitionResponse.builder()
.acquisitionId(acquisition.getId())
.cardFrontImageUrl(acquisition.getCardType().getCardFrontImageUrl())
.certificationType(acquisition.getCertification().getCertificationType().getKoreanName())
.index(acquisition.getCardType().getIndex())
.name(acquisition.getCertification().getName())
.acquisitionDate(acquisition.getAcquisitionDate())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public class ActivityController {

@PostMapping
@Operation(summary = "대내외활동 추가 API", description = "대내외 활동을 추가합니다")
public ResponseEntity<SuccessResponse> createActivity(
public ResponseEntity<SuccessResponse<Void>> createActivity(
@AuthenticationPrincipal Long userId,
@Valid @RequestBody CreateActivityRequest request) {
activityService.createActivity(userId, request);
Expand All @@ -46,7 +46,7 @@ public ResponseEntity<SuccessResponse<GetActivityListResponse>> getAllActivities

@DeleteMapping("/{activity-id}")
@Operation(summary = "대내외 활동 삭제 API", description = "대내외 활동을 삭제합니다")
public ResponseEntity<SuccessResponse> deleteActivity(
public ResponseEntity<SuccessResponse<Void>> deleteActivity(
@AuthenticationPrincipal Long userId,
@Parameter(description = "activity Id", example = "1")
@PathVariable(name = "activity-id") Long activityId
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,20 @@

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;

import java.time.LocalDate;

public record CreateActivityRequest(

@Schema(description = "활동 시작일", example = "2024.05.24", type = "string")
@NotNull(message = "활동 시작일은 필수 입력값입니다.")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy.MM.dd", timezone = "Asia/Seoul")
LocalDate startAt,

@Schema(description = "활동 종료일", example = "2024.05.28", type = "string")
@NotNull(message = "활동 종료일은 필수 입력값입니다")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy.MM.dd", timezone = "Asia/Seoul")
LocalDate endAt,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ public ResponseEntity<SuccessResponse<AuthResponse>> processSignIn(@Valid @Reque
@Operation(summary = "회원 가입", description = "회원 가입을 진행합니다.")
public ResponseEntity<SuccessResponse<SignUpResponse>> processSignup(
@RequestHeader("Authorization") @NotEmpty(message = "임시 토큰이 누락되었습니다.") String authorization,
@Valid @RequestBody SignupRequest request
@RequestBody SignupRequest request
) {
return ResponseEntity.ok(SuccessResponse.of(SuccessCode.SUCCESS_CREATE, authService.register(authorization, request)));
}
Comment on lines 70 to 75
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

@Valid 어노테이션 누락으로 요청 본문 유효성 검사가 비활성화됨

SignupRequest에서 @Valid 어노테이션이 제거되어 DTO 내 Bean Validation 제약 조건(@NotNull, @NotBlank 등)이 적용되지 않습니다. 동일 컨트롤러의 다른 엔드포인트(라인 44, 58)는 @Valid @RequestBody 패턴을 사용하고 있어 의도치 않은 변경으로 보입니다.

🔧 수정 제안
     public ResponseEntity<SuccessResponse<SignUpResponse>> processSignup(
             @RequestHeader("Authorization") @NotEmpty(message = "임시 토큰이 누락되었습니다.") String authorization,
-            @RequestBody SignupRequest request
+            @Valid @RequestBody SignupRequest request
     ) {
🤖 Prompt for AI Agents
In
@src/main/java/org/sopt/certi_server/domain/user/controller/AuthController.java
around lines 70 - 75, The processSignup method is missing the @Valid annotation
on its SignupRequest parameter so Bean Validation constraints in SignupRequest
are not applied; update the method signature in AuthController.processSignup to
annotate the request parameter with @Valid (i.e., use @Valid @RequestBody
SignupRequest request) and add the corresponding javax.validation.Valid import
if missing so request-level validation behaves consistently with the other
endpoints.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.Size;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.sopt.certi_server.domain.user.dto.request.*;
Expand Down Expand Up @@ -61,7 +60,7 @@ public ResponseEntity<SuccessResponse<PersonalInformationResponse>> getPersonalI
@Operation(summary = "개인정보 수정 API", description = "개인정보를 수정합니다.")
public ResponseEntity<SuccessResponse<Void>> putPersonalInformation(
@AuthenticationPrincipal Long userId,
@RequestBody UpdateUserRequest request
@Valid @RequestBody UpdateUserRequest request
){
userService.updateUserInformation(userId, request);
return ResponseEntity.ok(SuccessResponse.of(SuccessCode.SUCCESS_UPDATE));
Expand Down Expand Up @@ -122,4 +121,30 @@ public ResponseEntity<SuccessResponse<GetTrackResponse>> getUserTrack(
){
return ResponseEntity.ok(SuccessResponse.of(SuccessCode.SUCCESS_FETCH, userService.getTrack(userId)));
}

@GetMapping(value = "/presigned-url")
@Operation(summary = "presigned URL 반환 API", description = "Presigned URL을 반환합니다. 해당 URL을 통해 이미지를 업로드 할 수 있습니다.")
public ResponseEntity<SuccessResponse<GetPreSignedURLResponse>> getPreSignedURL(
@AuthenticationPrincipal Long userId
){
return ResponseEntity.ok(SuccessResponse.of(SuccessCode.SUCCESS_FETCH, userService.getPreSignedURL(userId)));
}
Comment on lines +125 to +131
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Presigned URL API가 “업/다운로드 모두” 요구사항을 충족하는지 확인 필요해요.
현재 컨트롤러 설명/흐름상 업로드 용도로만 보입니다. 다운로드 presigned도 요구사항이면 별도 엔드포인트/쿼리 파라미터 등으로 구분이 필요합니다.

🤖 Prompt for AI Agents
In
@src/main/java/org/sopt/certi_server/domain/user/controller/UserController.java
around lines 124 - 130, The getPreSignedURL controller currently implies
upload-only behavior; update the API to explicitly distinguish upload vs
download by adding a request parameter or separate endpoints and wiring it
through to the service. Modify the method signature for getPreSignedURL to
accept a @RequestParam like "operation" (or "mode") and map values (e.g.,
"upload" | "download") to call the appropriate service method (e.g.,
userService.getPreSignedURL(userId, operation) or separate
userService.getUploadPreSignedURL / getDownloadPreSignedURL), and update the
Operation summary/description to document both modes and expected behavior for
each response variant (GetPreSignedURLResponse for upload/download). Ensure
validation of the param and return the same SuccessResponse wrapping the correct
service result.



@GetMapping(value = "/marketing-agreement")
@Operation(summary = "광고성 수신 정보 동의 조회 API", description = "광고성 수신 정보 동의 정보를 조회합니다.")
public ResponseEntity<SuccessResponse<MarketingResponse>> getMarketingAgreeInformation(
@AuthenticationPrincipal Long userId
){
return ResponseEntity.ok(SuccessResponse.of(SuccessCode.SUCCESS_FETCH, userService.getMarketingAgree(userId)));
}

@PatchMapping(value = "/marketing-agreement")
@Operation(summary = "광고성 수신 정보 동의 토글 API", description = "광고성 수신 정보 동의를 토글식으로 변경합니다.")
public ResponseEntity<SuccessResponse<Void>> patchMarketingAgree(
@AuthenticationPrincipal Long userId
){
userService.toggleMarketingAgree(userId);
return ResponseEntity.ok(SuccessResponse.of(SuccessCode.SUCCESS_UPDATE));
}
Comment on lines +142 to +149
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion | 🟠 Major

마케팅 동의 “토글”은 재시도에 취약(비멱등)해서 운영 리스크가 있어요.
네트워크 재시도/중복 요청이 나면 의도와 반대로 다시 토글될 수 있어서, PATCH/PUT로 “원하는 상태(boolean)”를 받는 형태가 보통 더 안전합니다.

제안(개념) 변경 예시
-    @PatchMapping(value = "/marketing-agreement")
-    public ResponseEntity<SuccessResponse<Void>> patchMarketingAgree(@AuthenticationPrincipal Long userId){
-        userService.toggleMarketingAgree(userId);
-        return ResponseEntity.ok(SuccessResponse.of(SuccessCode.SUCCESS_UPDATE));
-    }
+    @PutMapping(value = "/marketing-agreement")
+    public ResponseEntity<SuccessResponse<Void>> putMarketingAgree(
+            @AuthenticationPrincipal Long userId,
+            @RequestBody MarketingAgreementRequest request
+    ){
+        userService.setMarketingAgree(userId, request.agree());
+        return ResponseEntity.ok(SuccessResponse.of(SuccessCode.SUCCESS_UPDATE));
+    }
🤖 Prompt for AI Agents
In
@src/main/java/org/sopt/certi_server/domain/user/controller/UserController.java
around lines 141 - 148, The endpoint patchMarketingAgree currently toggles state
via userService.toggleMarketingAgree(userId), which is non-idempotent and
vulnerable to retries; change the API to accept the desired boolean state (e.g.,
a request body or request param like "marketingAgree": true/false) and update
the controller to call an idempotent service method (e.g.,
userService.setMarketingAgree(userId, marketingAgree)) instead of
toggleMarketingAgree; adjust the method signature to accept the boolean (and
validate it) and update the service to persist the explicit state so repeated
requests are safe.

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package org.sopt.certi_server.domain.user.dto.request;

public record PatchUserProfileImageRequest(
String publicURL
) {
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.sopt.certi_server.domain.user.dto.request;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.Valid;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotEmpty;
Expand All @@ -18,9 +19,13 @@ public record UpdateUserRequest(
@NotEmpty(message = "닉네임은 공백이 될 수 없습니다.")
@NoProfanity
String nickName,

@Schema(description = "생년월일", example = "1998.05.24", type = "string")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy.MM.dd", timezone = "Asia/Seoul")
@Past(message = "생년월일은 과거 날짜여야 합니다.")
LocalDate birthDate
LocalDate birthDate,

String publicURL
) {

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
@Builder
public record GetMyPageInfoResponse(
String nickname,
String profileImageURL,
String email,
GetJobResponse jobResponse,
int upCount,
Expand All @@ -19,6 +20,7 @@ public static GetMyPageInfoResponse from(
){
return GetMyPageInfoResponse.builder()
.nickname(user.getNickname())
.profileImageURL(user.getProfileImageUrl())
.email(user.getEmail())
.jobResponse(jobResponse)
.upCount(upCount)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package org.sopt.certi_server.domain.user.dto.response;

public record GetPreSignedURLResponse(
String preSignedURL,
String publicURL
) {
public static GetPreSignedURLResponse of(
String preSignedURL,
String publicURL
){
return new GetPreSignedURLResponse(
preSignedURL,
publicURL
);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,27 @@
import org.sopt.certi_server.domain.major.entity.MajorImpl;
import org.sopt.certi_server.domain.user.entity.User;

import java.time.LocalDate;

@Builder
public record GetUserResponse(
String nickname,
String name,
String university,
String major,
String profileImage,
LocalDate birthDate,
int percentage
) {
public static GetUserResponse from(User user, MajorImpl majorImpl, int percentage) {
return GetUserResponse.builder()
.nickname(user.getNickname())
.name(user.getName())
.university(user.getUniversity().getName())
.major(majorImpl.getName())
.profileImage(user.getProfileImageUrl())
.percentage(percentage)
.birthDate(user.getBirthDate())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.sopt.certi_server.domain.user.dto.response;

public record MarketingResponse(
boolean isAdAgreed
) {
public static MarketingResponse of(boolean isAdAgreed){
return new MarketingResponse(isAdAgreed);
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public static OAuthUserInformation from(
information.id(),
SocialType.KAKAO,
information.kakaoAccount().email(),
information.kakaoAccount().profile().name(),
information.kakaoAccount().profile().nickname(),
information.kakaoAccount().profile().profileImageUrl()
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ public record PersonalInformationResponse(
String nickName,
String name,
String email,
LocalDate birthDate
LocalDate birthDate,
String profileImageURL
) {

public static PersonalInformationResponse from(User user){
Expand All @@ -19,6 +20,7 @@ public static PersonalInformationResponse from(User user){
.nickName(user.getNickname())
.email(user.getEmail())
.birthDate(user.getBirthDate())
.profileImageURL(user.getProfileImageUrl())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public static UserInformation from(
) {
return new UserInformation(
information.kakaoAccount().email(),
information.kakaoAccount().profile().name(),
information.kakaoAccount().profile().nickname(),
information.kakaoAccount().profile().profileImageUrl()
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public record KakaoAccount(

@JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class)
public record KakaoProfile(
String name,
String nickname,
String profileImageUrl
) {

Expand Down
17 changes: 15 additions & 2 deletions src/main/java/org/sopt/certi_server/domain/user/entity/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,9 @@ public class User extends BaseTimeEntity {
@Column(name = "birth_date")
private LocalDate birthDate;

@Column(name = "marketing_agree")
private Boolean marketingAgree;

Comment on lines +64 to +66
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

marketingAgree 널 가능 상태로 두면 토글/조회 흐름에서 런타임 오류 위험이 큽니다.
Boolean로 추가되어 DB/엔티티 기본값이 null일 수 있습니다. 아래 updateMarketingAgree()null에서 NPE가 날 수 있어요(동일 이슈의 근본 원인). nullable=false + 기본값(false)(또는 할당 시 null-coalescing)로 정리하는 걸 권장합니다.

🤖 Prompt for AI Agents
In @src/main/java/org/sopt/certi_server/domain/user/entity/User.java around
lines 64 - 66, The marketingAgree field is nullable (private Boolean
marketingAgree) which can cause NPEs in flows like updateMarketingAgree(); make
it non-nullable and default to false by annotating/setting it as nullable=false
and providing a default/fallback value (e.g., initialize marketingAgree = false
or enforce non-null in the JPA column mapping), and update
updateMarketingAgree() to rely on the non-null primitive/Boolean with safe
assignment so reads/toggles cannot encounter null.


public User(String nickname, String email, String profileImageUrl) {
this.nickname = nickname;
Expand All @@ -70,7 +73,7 @@ public User(String nickname, String email, String profileImageUrl) {

@Builder
public User(Long id, University university, String track, String grade, MajorImpl major, String nickname, String name, String email,
String profileImageUrl, SocialType socialType, Long socialId) {
String profileImageUrl, SocialType socialType, Long socialId, Boolean marketingAgree) {
this.id = id;
this.university = university;
this.track = TrackType.from(track);
Expand All @@ -82,13 +85,15 @@ public User(Long id, University university, String track, String grade, MajorImp
this.profileImageUrl = profileImageUrl;
this.socialType = socialType;
this.socialId = socialId;
this.marketingAgree = marketingAgree;
}

public void changeUser(String name, String nickname, String email, LocalDate birthDate){
public void changeUser(String name, String nickname, String email, LocalDate birthDate, String profileImageUrl){
this.name = name;
this.nickname = nickname;
this.email = email;
this.birthDate = birthDate;
this.profileImageUrl = profileImageUrl;
}
Comment on lines +91 to 97
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

rg -n --type=java -C3 '\.changeUser\s*\('

Repository: cerdeuk/CERTI-BE

Length of output: 780


🏁 Script executed:

cat -n src/main/java/org/sopt/certi_server/domain/user/service/UserService.java | sed -n '140,170p'

Repository: cerdeuk/CERTI-BE

Length of output: 1289


🏁 Script executed:

fd -t f 'UpdateUserRequest' --type f | head -5

Repository: cerdeuk/CERTI-BE

Length of output: 229


🏁 Script executed:

cat -n src/main/java/org/sopt/certi_server/domain/user/dto/request/UpdateUserRequest.java

Repository: cerdeuk/CERTI-BE

Length of output: 1095


🏁 Script executed:

rg -n --type=java 'updateUserInformation' | head -20

Repository: cerdeuk/CERTI-BE

Length of output: 525


🏁 Script executed:

cat -n src/main/java/org/sopt/certi_server/domain/user/controller/UserController.java | sed -n '55,75p'

Repository: cerdeuk/CERTI-BE

Length of output: 1145


changeUser() 메서드에서 null인 profileImageUrl이 기존 이미지를 삭제합니다.

UpdateUserRequestpublicURL@NotNull 검증이 없어 클라이언트가 null을 전송하면, UserService.updateUserInformation()changeUser() 호출 시 기존 이미지가 null로 덮어씌워집니다. 서비스나 엔티티 단계에서 null-check를 추가하거나, DTO 레벨에서 publicURL을 필수값으로 정의하기를 권장합니다.

🤖 Prompt for AI Agents
In @src/main/java/org/sopt/certi_server/domain/user/entity/User.java around
lines 91 - 97, The changeUser(...) method currently overwrites the existing
profileImageUrl with a null value when the client omits publicURL; to fix,
prevent null from clobbering the stored image by adding a null-check either in
the entity or service: in User.changeUser(...) only assign this.profileImageUrl
= profileImageUrl if profileImageUrl != null, or alternatively validate
UpdateUserRequest.publicURL as @NotNull and enforce in
UserService.updateUserInformation(...) before calling changeUser(...); update
tests accordingly.


public void changeUniversity(University university) {
Expand All @@ -98,4 +103,12 @@ public void changeUniversity(University university) {
public void changeMajor(MajorImpl mi) {
this.major = mi;
}

public void updateMarketingAgree() {
this.marketingAgree = !this.marketingAgree;
}
Comment on lines +107 to +109
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

updateMarketingAgree()marketingAgree == null이면 NPE로 터집니다. (필수 수정)

제안 수정안(널 안전 토글)
@@
     public void updateMarketingAgree() {
-        this.marketingAgree = !this.marketingAgree;
+        this.marketingAgree = !Boolean.TRUE.equals(this.marketingAgree);
     }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
public void updateMarketingAgree() {
this.marketingAgree = !this.marketingAgree;
}
public void updateMarketingAgree() {
this.marketingAgree = !Boolean.TRUE.equals(this.marketingAgree);
}
🤖 Prompt for AI Agents
In @src/main/java/org/sopt/certi_server/domain/user/entity/User.java around
lines 107 - 109, In User.updateMarketingAgree the field marketingAgree can be
null causing an NPE when negating; make the toggle null-safe by checking
this.marketingAgree for null and initializing it to a defined boolean (e.g.,
true or false) before flipping, e.g., if marketingAgree is null set it to true
(or false per domain rule) otherwise set it to !marketingAgree; update the
method in the User class to perform this null check and assignment so calling
updateMarketingAgree never throws an NPE.


public void updateProfileImage(String publicKey) {
this.profileImageUrl = publicKey;
}
Comment on lines +111 to +113
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Search for updateProfileImage and profileImageUrl usage patterns
rg -n --type=java -C3 '\bupdateProfileImage\b|\bprofileImageUrl\b|getProfileImageUrl\s*\(' src/

Repository: cerdeuk/CERTI-BE

Length of output: 12510


🏁 Script executed:

#!/bin/bash
# Find the PatchUserProfileImageRequest DTO
rg -n --type=java 'class PatchUserProfileImageRequest|record PatchUserProfileImageRequest' -A 10 src/

Repository: cerdeuk/CERTI-BE

Length of output: 518


메서드 파라미터명을 profileImageUrl로 변경하세요.

updateProfileImage(String publicKey) 메서드가 실제로는 request.publicURL()을 받아서 profileImageUrl 필드에 저장하는데, 파라미터명이 publicKey로 되어 있어 의미가 불일치합니다. 같은 클래스의 changeUser(String profileImageUrl) 메서드처럼 파라미터명을 profileImageUrl로 통일하면 코드의 일관성과 가독성이 향상됩니다.

🤖 Prompt for AI Agents
In @src/main/java/org/sopt/certi_server/domain/user/entity/User.java around
lines 111 - 113, The parameter name in User.updateProfileImage(String publicKey)
is misleading; rename the parameter to profileImageUrl to match its usage
(assigning to this.profileImageUrl) and to be consistent with changeUser(String
profileImageUrl); update the method signature and any callers to use the new
parameter name.

}
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public OAuthUserInformation getUserInfo(String code) {
public OAuthUserInformation getUserInfoByAccessToken(String accessToken) {
try {
KakaoUserInformationResponse information = kakaoApiFeignClient.getInformation("Bearer " + accessToken);
log.info(information.kakaoAccount().profile().name());
log.info(information.kakaoAccount().profile().nickname());
log.info(information.kakaoAccount().email());
return OAuthUserInformation.from(information);
} catch (Exception e) {
Expand Down
Loading