Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
208863a
[Feat!] #159 프로필 수정 API 삭제
JangIkhwan Jan 3, 2026
24630a0
[Test] #159 프로필 수정 API 관련 테스트 삭제
JangIkhwan Jan 4, 2026
bcc35d5
[Feat] #159 UserServiceFacade에서 changeProfileImage 메서드 삭제
JangIkhwan Jan 4, 2026
7915494
[Feat] #159 프로필 수정 서비스 삭제
JangIkhwan Jan 4, 2026
b429e26
[Test] #159 프로필 수정 서비스 테스트 삭제
JangIkhwan Jan 4, 2026
6275e00
[Feat!] #159 프로필 조회 API의 응답 수정
JangIkhwan Jan 4, 2026
fa0e3f4
[Feat] #159 getUserProfile 메서드에서 응답 생성문을 수정
JangIkhwan Jan 4, 2026
070b45f
[Test] #159 getUserProfile 수정에 따라 테스트 수정
JangIkhwan Jan 4, 2026
ee01822
[Test] #159 TestInitializer에서 불필요한 메서드를 삭제
JangIkhwan Jan 4, 2026
bd75f6d
[Feat] #159 User 엔티티에서 프로필 이미지 수정하는 changeProfileImage 메서드 삭제
JangIkhwan Jan 4, 2026
f8f332b
[Test] #159 UserRepositoryTest에서 불필요한 테스트 삭제
JangIkhwan Jan 4, 2026
3689b0e
[Feat!] #159 회원정보 등록 API 요청 수정
JangIkhwan Jan 4, 2026
a98befd
[Docs] #159 회원정보 등록 API 명세 수정
JangIkhwan Jan 4, 2026
663f4e2
[Feat!] #159 회원정보 등록 API에서 요청 바디를 multipart가 아니라 json 형태로 받도록 수정
JangIkhwan Jan 4, 2026
cc10edb
[Test] #159 회원정보 등록 API 테스트 수정
JangIkhwan Jan 4, 2026
c0f611a
[Feat] #159 회원정보 등록 서비스 로직에서 프로필 이미지 관련 내용 삭제
JangIkhwan Jan 4, 2026
0ad89bb
[Test] #159 UserServiceTest에서 회원정보 등록 관련 테스트 수정
JangIkhwan Jan 4, 2026
cefb682
[Feat] #148 토큰 발급 서비스 IssueTokenService 구현
JangIkhwan Jan 4, 2026
27d3c91
[refactor] #148 IssueTokenService를 사용해서 토큰을 발급하도록 LoginServiceImpl 수정
JangIkhwan Jan 4, 2026
43dabd9
[Test] #148 LoginServiceTest에서 테스트 수정
JangIkhwan Jan 4, 2026
c316e8f
[refactor] #148 IssueTokenService를 사용해 토큰을 발급하도록 RegisterUserServiceI…
JangIkhwan Jan 4, 2026
152d569
[Feat] #148 회원정보 등록 API에서 리프레시 토큰을 응답하도록 수정
JangIkhwan Jan 4, 2026
254069b
[Test] #148 회원등록 API 테스트에서 리프레시 토큰을 검증하도록 수정
JangIkhwan Jan 4, 2026
7b3f1ce
[Test] #148 RegisterUserService 테스트 수정
JangIkhwan Jan 4, 2026
2066921
[Refactor] #148 RegisterUserService의 대응되는 테스트 클래스의 이름과 디렉토리 위치를 수정
JangIkhwan Jan 4, 2026
e60548a
[Chore] #159 CI에서 로그를 보기 위해서 설정 추가
JangIkhwan Jan 4, 2026
fab1d9e
[Test] #159 UserControllerTest에 테스트용 Redis 설정 적용
JangIkhwan Jan 4, 2026
0fbf3b8
[Chore] #159 gradle test 시에 showLogs 프로퍼티가 있을 때만 애플레케이션 로그가 보이도록 설정
JangIkhwan Jan 4, 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
6 changes: 6 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@ java {
}
}

test {
testLogging {
showStandardStreams = project.hasProperty("showLogs")
}
}

configurations {
compileOnly {
extendsFrom annotationProcessor
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.kuit.findyou.domain.auth.service;

import com.kuit.findyou.domain.user.model.Role;

public interface IssueTokenService {
String issueAccessToken(Long userId, Role role);
String issueRefreshToken(Long userId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.kuit.findyou.domain.auth.service;

import com.kuit.findyou.domain.auth.repository.RedisRefreshTokenRepository;
import com.kuit.findyou.domain.user.model.Role;
import com.kuit.findyou.global.jwt.util.JwtUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@RequiredArgsConstructor
@Service
public class IssueTokenServiceImpl implements IssueTokenService {
private final JwtUtil jwtUtil;
private final RedisRefreshTokenRepository redisRefreshTokenRepository;

@Override
public String issueAccessToken(Long userId, Role role) {
return jwtUtil.createAccessJwt(userId, role);
}

@Override
public String issueRefreshToken(Long userId) {
String refreshToken = jwtUtil.createRefreshJwt(userId);
redisRefreshTokenRepository.save(userId, refreshToken);
return refreshToken;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,11 @@
import com.kuit.findyou.domain.auth.dto.response.GuestLoginResponse;
import com.kuit.findyou.domain.auth.dto.request.KakaoLoginRequest;
import com.kuit.findyou.domain.auth.dto.response.KakaoLoginResponse;
import com.kuit.findyou.domain.auth.repository.RedisRefreshTokenRepository;
import com.kuit.findyou.domain.user.constant.DefaultProfileImage;
import com.kuit.findyou.domain.user.model.Role;
import com.kuit.findyou.domain.user.model.User;
import com.kuit.findyou.domain.user.repository.UserRepository;
import com.kuit.findyou.global.common.exception.CustomException;
import com.kuit.findyou.global.jwt.util.JwtUtil;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
Expand All @@ -23,18 +21,17 @@
@Service
public class LoginServiceImpl implements LoginService {
private final UserRepository userRepository;
private final RedisRefreshTokenRepository redisRefreshTokenRepository;
private final JwtUtil jwtUtil;
private final IssueTokenService issueTokenService;

public KakaoLoginResponse kakaoLogin(KakaoLoginRequest request) {
log.info("[kakaoLogin] kakaoId = {}", request.kakaoId());

return userRepository.findByKakaoId(request.kakaoId())
.map(loginUser -> {
String accessToken = jwtUtil.createAccessJwt(loginUser.getId(), loginUser.getRole());
String refreshToken = jwtUtil.createRefreshJwt(loginUser.getId());
redisRefreshTokenRepository.save(loginUser.getId(), refreshToken);
.map(user -> {
String accessToken = issueTokenService.issueAccessToken(user.getId(), user.getRole());
String refreshToken = issueTokenService.issueRefreshToken(user.getId());
log.info("[kakaoLogin] 카카오 로그인 성공");
return KakaoLoginResponse.fromUserAndTokens(loginUser, accessToken, refreshToken);
return KakaoLoginResponse.fromUserAndTokens(user, accessToken, refreshToken);
})
.orElseGet(() -> {
log.info("[kakaoLogin] 일치하는 유저가 없어서 카카오 로그인 실패");
Expand Down Expand Up @@ -67,9 +64,8 @@ public GuestLoginResponse guestLogin(GuestLoginRequest request) {
}

// 토큰 생성
String accessToken = jwtUtil.createAccessJwt(user.getId(), user.getRole());
String refreshToken = jwtUtil.createRefreshJwt(user.getId());
redisRefreshTokenRepository.save(user.getId(), refreshToken);
String accessToken = issueTokenService.issueAccessToken(user.getId(), user.getRole());
String refreshToken = issueTokenService.issueRefreshToken(user.getId());
log.info("[guestLogin] 게스트 로그인 성공");
return new GuestLoginResponse(user.getId(), accessToken, refreshToken);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
import lombok.extern.slf4j.Slf4j;

import static com.kuit.findyou.global.common.swagger.SwaggerResponseDescription.*;
import static org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE;

@Slf4j
@RestController
Expand Down Expand Up @@ -65,15 +64,12 @@ public BaseResponse<CardResponseDTO> retrieveViewedAnimals (
@Operation(
summary = "회원정보 등록 API",
description = """
회원 정보를 등록합니다. 회원 등록에 성공하면 유저 정보(식별자와 닉네임)와 엑세스 토큰을 얻을 수 있습니다. \n
**[중요] profileImageFile과 defaultProfileImageName 중 하나만 선택해야 합니다.** \n
- profileImageFile을 업로드하면 defaultProfileImageName은 무시됩니다. \n
- 둘 다 null이면 에러가 발생합니다.
회원 정보를 등록합니다. 회원 등록에 성공하면 유저 정보(식별자와 닉네임)와 엑세스 토큰을 얻을 수 있습니다.
"""
)
@CustomExceptionDescription(REGISTER_USER)
@PostMapping(consumes = MULTIPART_FORM_DATA_VALUE)
public BaseResponse<RegisterUserResponse> registerUser(@ModelAttribute RegisterUserRequest request){
@PostMapping
public BaseResponse<RegisterUserResponse> registerUser(@RequestBody RegisterUserRequest request){
log.info("[registerUser] kakaoId = {}", request.kakaoId());
return new BaseResponse<>(userServiceFacade.registerUser(request));
}
Expand Down Expand Up @@ -142,21 +138,6 @@ public BaseResponse<Void> deleteInterestAnimal(@Parameter(hidden = true) @LoginU
return BaseResponse.ok(null);
}

@Operation(
summary = "프로필 이미지 변경 API",
description = "프로필 이미지 변경을 수행합니다. 기본이미지는 enum값 이름으로 저장, 사용자 업로드 이미지는 cdn url로 저장됩니다."
)
@CustomExceptionDescription(CHANGE_PROFILE_IMAGE)
@PreAuthorize("hasRole('ROLE_USER')")
@PatchMapping(value = "/me/profile-image", consumes = MULTIPART_FORM_DATA_VALUE)
public BaseResponse<Void> changeProfileImage(
@LoginUserId Long userId,
@Valid @ModelAttribute ChangeProfileImageRequest req
) {
userServiceFacade.changeProfileImage(userId, req);
return BaseResponse.ok(null);
}

@Operation(
summary = "신고 내역 조회 API",
description = """
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,6 @@
""" )
@Builder
public record RegisterUserRequest(
@Schema(description = """
사용자 지정 프로필 이미지 파일 (기본 프로필을 사용하지 않을 경우 업로드)
""",
type = "string",
format = "binary",
nullable = true)
MultipartFile profileImageFile,
@Schema(description = """
기본 프로필 이미지 이름 (profileImageFile이 없을 경우 선택)
""",
example = "default",
nullable = true)
String defaultProfileImageName,
@Schema(description = "회원 닉네임",
example = "찾아유",
required = true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
@Schema(description = "마이페이지 프로필 조회 API 응답 DTO ")
public record GetUserProfileResponse(
@Schema(description = "닉네임", example = "유저1")
String nickname,
@Schema(description = "프로필 이미지", example = "image.png")
String profileImage
String nickname
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@ public record RegisterUserResponse(
example = "찾아유")
String nickname,
@Schema(description = "엑세스 토큰",
example = "accessToken")
String accessToken
example = "aaaa.bbbb.ccc")
String accessToken,
@Schema(description = "리프레시 토큰",
example = "aaaa.bbbb.ccc")
String refreshToken
) {
}
6 changes: 1 addition & 5 deletions src/main/java/com/kuit/findyou/domain/user/model/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@
import com.kuit.findyou.global.common.model.BaseEntity;
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.SQLRestriction;

import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -100,15 +98,14 @@ public void addInterestReport(InterestReport interestReport) {
public void addSubscribe(Subscribe subscribe) { subscribes.add(subscribe); }
public void setFcmToken(FcmToken fcmToken) {this.fcmToken = fcmToken;}

public void upgradeToMember(Long kakaoId, String nickname, String profileImageUrl){
public void upgradeToMember(Long kakaoId, String nickname){
// 비회원이어야 회원이 될 수 있음
if(this.role != Role.GUEST){
throw new CustomException(ALREADY_REGISTERED_USER);
}

this.kakaoId = kakaoId;
this.name = nickname;
this.profileImageUrl = profileImageUrl;
this.role = Role.USER;
}

Expand All @@ -119,5 +116,4 @@ public boolean isGuest(){
public void changeNickname(String newNickname) {
this.name = newNickname;
}
public void changeProfileImage(String newImage) {this.profileImageUrl = newImage;}
}

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,11 @@
import com.kuit.findyou.domain.report.dto.response.CardResponseDTO;
import com.kuit.findyou.domain.user.dto.response.CheckGuestResponse;
import com.kuit.findyou.domain.user.dto.response.GetUserProfileResponse;
import com.kuit.findyou.domain.user.dto.request.ChangeProfileImageRequest;
import com.kuit.findyou.domain.user.dto.request.CheckDuplicateNicknameRequest;
import com.kuit.findyou.domain.user.dto.request.RegisterUserRequest;
import com.kuit.findyou.domain.user.dto.response.CheckDuplicateNicknameResponse;
import com.kuit.findyou.domain.user.dto.response.RegisterUserResponse;
import com.kuit.findyou.domain.user.service.change_nickname.ChangeNicknameService;
import com.kuit.findyou.domain.user.service.change_profileImage.ChangeProfileImageService;
import com.kuit.findyou.domain.user.service.delete.DeleteUserService;
import com.kuit.findyou.domain.user.service.interest_report.InterestReportService;
import com.kuit.findyou.domain.user.service.query.QueryUserService;
Expand All @@ -28,7 +26,6 @@ public class UserServiceFacade {
private final QueryUserService queryUserService;
private final ChangeNicknameService changeNicknameService;
private final DeleteUserService deleteUserService;
private final ChangeProfileImageService changeProfileImageService;
private final UserReportService userReportService;

public CardResponseDTO retrieveViewedAnimals(Long lastId, Long userId) {
Expand Down Expand Up @@ -63,8 +60,6 @@ public void deleteUser(Long userId) {
deleteUserService.deleteUser(userId);
}

public void changeProfileImage(Long userId, ChangeProfileImageRequest request){ changeProfileImageService.changeProfileImage(userId, request); }

public CardResponseDTO retrieveUserReports(Long userId, Long lastId){
return userReportService.retrieveUserReports(userId, lastId, 20);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public CheckDuplicateNicknameResponse checkDuplicateNickname(CheckDuplicateNickn
@Override
public GetUserProfileResponse getUserProfile(Long userId) {
User user = userRepository.getReferenceById(userId);
return new GetUserProfileResponse(user.getName(), user.getProfileImageUrl());
return new GetUserProfileResponse(user.getName());
}

@Override
Expand Down
Loading