diff --git a/src/main/java/org/fontory/fontorybe/FonToryBeApplication.java b/src/main/java/org/fontory/fontorybe/FonToryBeApplication.java index 33b4b0b..01c1686 100644 --- a/src/main/java/org/fontory/fontorybe/FonToryBeApplication.java +++ b/src/main/java/org/fontory/fontorybe/FonToryBeApplication.java @@ -10,12 +10,14 @@ import org.springframework.context.annotation.Bean; import org.springframework.core.env.Environment; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +import org.springframework.retry.annotation.EnableRetry; import org.springframework.scheduling.annotation.EnableAsync; import lombok.extern.slf4j.Slf4j; @Slf4j @EnableAsync +@EnableRetry @EnableJpaAuditing @SpringBootApplication @EnableConfigurationProperties({JwtProperties.class, MemberDefaults.class}) diff --git a/src/main/java/org/fontory/fontorybe/common/application/DevTokenInitializer.java b/src/main/java/org/fontory/fontorybe/common/application/DevTokenInitializer.java index aa0f0a6..7de323e 100644 --- a/src/main/java/org/fontory/fontorybe/common/application/DevTokenInitializer.java +++ b/src/main/java/org/fontory/fontorybe/common/application/DevTokenInitializer.java @@ -99,7 +99,6 @@ public void initTokens() { .birth(LocalDate.now()) .nickname("Tester") .status(MemberStatus.ONBOARDING) - .profileImageKey(memberDefaults.getProfileImageKey()) .build(); return memberRepository.save(m); }); diff --git a/src/main/java/org/fontory/fontorybe/file/adapter/outbound/s3/AmazonS3BucketService.java b/src/main/java/org/fontory/fontorybe/file/adapter/outbound/s3/AmazonS3BucketService.java index a18b806..21e446e 100644 --- a/src/main/java/org/fontory/fontorybe/file/adapter/outbound/s3/AmazonS3BucketService.java +++ b/src/main/java/org/fontory/fontorybe/file/adapter/outbound/s3/AmazonS3BucketService.java @@ -27,40 +27,15 @@ public class AmazonS3BucketService implements CloudStorageService { private final S3Client s3; private final S3Config s3Config; private final ClockHolder clockHolder; - private String profileImageBucketName; private String fontPaperBucketName; - private String profileImagePrefix; private String fontPaperPrefix; @PostConstruct void init() { - profileImageBucketName = s3Config.getBucketName(FileType.PROFILE_IMAGE); fontPaperBucketName = s3Config.getBucketName(FileType.FONT_PAPER); - profileImagePrefix = s3Config.getPrefix(FileType.PROFILE_IMAGE); fontPaperPrefix = s3Config.getPrefix(FileType.FONT_PAPER); } - @Override - public FileMetadata uploadProfileImage(FileCreate request, String key) { - log.info("Uploading profile image: fileName={}, contentType={}, size={} bytes, fileKey={}", - request.getFileName(), request.getFile().getContentType(), request.getFile().getSize(), key); - - AmazonS3PutRequest amazonS3PutRequest = AmazonS3PutRequest.from( - request, - key, - profileImageBucketName, - profileImagePrefix, - clockHolder.getCurrentTimeStamp()); - - log.info("Profile image uploaded successfully: fileKey={}, bucket={}", key, profileImageBucketName); - return uploadFile(amazonS3PutRequest).toModel(); - } - - @Override - public String getProfileImageUrl(String key) { - return getFileUrl(FileType.PROFILE_IMAGE, key); - } - @Override public String getFontPaperUrl(String key) { return getFileUrl(FileType.FONT_PAPER, key); diff --git a/src/main/java/org/fontory/fontorybe/file/adapter/outbound/s3/ProfileImageUpdateListener.java b/src/main/java/org/fontory/fontorybe/file/adapter/outbound/s3/ProfileImageUpdateListener.java deleted file mode 100644 index 17b58cc..0000000 --- a/src/main/java/org/fontory/fontorybe/file/adapter/outbound/s3/ProfileImageUpdateListener.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.fontory.fontorybe.file.adapter.outbound.s3; - -import jakarta.annotation.PostConstruct; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.fontory.fontorybe.config.S3Config; -import org.fontory.fontorybe.file.adapter.outbound.s3.dto.ProfileImageUpdatedEvent; -import org.fontory.fontorybe.file.domain.FileType; -import org.springframework.stereotype.Component; -import org.springframework.transaction.event.TransactionPhase; -import org.springframework.transaction.event.TransactionalEventListener; -import software.amazon.awssdk.services.s3.S3Client; -import software.amazon.awssdk.services.s3.model.CopyObjectRequest; -import software.amazon.awssdk.services.s3.model.DeleteObjectRequest; - -@Slf4j -@Component -@RequiredArgsConstructor -public class ProfileImageUpdateListener { - private final S3Client s3; - private final S3Config s3Config; - private String profileImageBucketName; - private String profileImagePrefix; - - @PostConstruct - void init() { - profileImageBucketName = s3Config.getBucketName(FileType.PROFILE_IMAGE); - profileImagePrefix = s3Config.getPrefix(FileType.PROFILE_IMAGE); - } - - @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) - public void afterCommit(ProfileImageUpdatedEvent event) { - try { - s3.copyObject(CopyObjectRequest.builder() - .sourceBucket(profileImageBucketName) - .sourceKey(profileImagePrefix + "/" + event.getTempKey()) - .destinationBucket(profileImageBucketName) - .destinationKey(profileImagePrefix + "/" + event.getFixedKey()) - .build()); - - s3.deleteObject(DeleteObjectRequest.builder() - .bucket(profileImageBucketName) - .key(profileImagePrefix + "/" + event.getTempKey()) - .build()); - } catch (Exception e) { - log.error("Error while copying/deleting profile image to s3: tempKey={}, fixedKey={}", - event.getTempKey(), event.getFixedKey(), e); - throw e; - } - } - - @TransactionalEventListener(phase = TransactionPhase.AFTER_ROLLBACK) - public void afterRollback(ProfileImageUpdatedEvent event) { - try { - s3.deleteObject(DeleteObjectRequest.builder() - .bucket(profileImageBucketName) - .key(profileImagePrefix + "/" + event.getTempKey()) - .build()); - } catch (Exception e) { - log.warn("Rollback profile image failed", e); - } - } -} diff --git a/src/main/java/org/fontory/fontorybe/file/adapter/outbound/s3/dto/ProfileImageUpdatedEvent.java b/src/main/java/org/fontory/fontorybe/file/adapter/outbound/s3/dto/ProfileImageUpdatedEvent.java deleted file mode 100644 index 9515bba..0000000 --- a/src/main/java/org/fontory/fontorybe/file/adapter/outbound/s3/dto/ProfileImageUpdatedEvent.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.fontory.fontorybe.file.adapter.outbound.s3.dto; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -@Getter -@RequiredArgsConstructor -public class ProfileImageUpdatedEvent { - private final String tempKey; - private final String fixedKey; -} diff --git a/src/main/java/org/fontory/fontorybe/file/application/FileServiceImpl.java b/src/main/java/org/fontory/fontorybe/file/application/FileServiceImpl.java index 7c66391..36e0a59 100644 --- a/src/main/java/org/fontory/fontorybe/file/application/FileServiceImpl.java +++ b/src/main/java/org/fontory/fontorybe/file/application/FileServiceImpl.java @@ -4,7 +4,6 @@ import java.util.UUID; import org.fontory.fontorybe.file.adapter.inbound.FileRequestMapper; -import org.fontory.fontorybe.file.adapter.outbound.s3.dto.ProfileImageUpdatedEvent; import org.fontory.fontorybe.file.application.port.CloudStorageService; import org.fontory.fontorybe.file.application.port.FileRepository; import org.fontory.fontorybe.file.application.port.FileService; @@ -13,7 +12,6 @@ import org.fontory.fontorybe.file.domain.FileUploadResult; import org.fontory.fontorybe.file.domain.exception.FileNotFoundException; import org.fontory.fontorybe.member.controller.port.MemberLookupService; -import org.fontory.fontorybe.member.controller.port.MemberUpdateService; import org.fontory.fontorybe.member.domain.Member; import org.fontory.fontorybe.member.domain.MemberDefaults; import org.springframework.context.ApplicationEventPublisher; @@ -35,7 +33,6 @@ public class FileServiceImpl implements FileService { private final FileRequestMapper fileRequestMapper; private final CloudStorageService cloudStorageService; private final MemberLookupService memberLookupService; - private final MemberUpdateService memberUpdateService; private final ApplicationEventPublisher eventPublisher; @Override @@ -46,35 +43,6 @@ public FileMetadata getOrThrowById(Long id) { .orElseThrow(() -> new FileNotFoundException(id)); } - @Override - @Transactional - public FileUploadResult uploadProfileImage(MultipartFile file, Long memberId) { - log.info("Processing profile image upload: fileName={}, memberId={}", file.getOriginalFilename(), memberId); - - Member requestMember = memberLookupService.getOrThrowById(memberId); - FileCreate profileImageFileCreate = fileRequestMapper.toProfileImageFileCreate(file, requestMember); - boolean isInitial = memberDefaults.getProfileImageKey().equals(requestMember.getProfileImageKey()); - String fixedKey = isInitial - ? UUID.randomUUID().toString() - : requestMember.getProfileImageKey(); - - String tempKey = UUID.randomUUID().toString(); - - log.info("Uploading profile image to cloud storage: memberId={}, tempKey={}", memberId, tempKey); - FileMetadata metadata = cloudStorageService.uploadProfileImage(profileImageFileCreate, tempKey); - metadata.updateKey(fixedKey); - FileMetadata savedMetaData = fileRepository.save(metadata); - Member updated = memberUpdateService.setProfileImageKey(requestMember, fixedKey); - - log.info("Updating member profile image key: memberId={}, memberProfileImageKey={}", updated.getId(), updated.getProfileImageKey()); - log.info("Publishing image update event: tempKey={}, fixedKey={}", tempKey, fixedKey); - eventPublisher.publishEvent(new ProfileImageUpdatedEvent(tempKey, fixedKey)); - String fileUrl = cloudStorageService.getProfileImageUrl(fixedKey); - FileUploadResult result = FileUploadResult.from(savedMetaData, fileUrl); - log.info("Profile image upload completed successfully: memberId={}, fileUrl={}", memberId, fileUrl); - return result; - } - @Override @Transactional public FileUploadResult uploadFontTemplateImage(MultipartFile file, Long memberId) { diff --git a/src/main/java/org/fontory/fontorybe/file/application/port/CloudStorageService.java b/src/main/java/org/fontory/fontorybe/file/application/port/CloudStorageService.java index e143ec6..19b98d2 100644 --- a/src/main/java/org/fontory/fontorybe/file/application/port/CloudStorageService.java +++ b/src/main/java/org/fontory/fontorybe/file/application/port/CloudStorageService.java @@ -4,9 +4,7 @@ import org.fontory.fontorybe.file.domain.FileMetadata; public interface CloudStorageService { - FileMetadata uploadProfileImage(FileCreate fileCreate, String key); FileMetadata uploadFontTemplateImage(FileCreate request); - String getProfileImageUrl(String key); String getFontPaperUrl(String key); String getWoff2Url(String key); String getTtfUrl(String key); diff --git a/src/main/java/org/fontory/fontorybe/file/application/port/FileService.java b/src/main/java/org/fontory/fontorybe/file/application/port/FileService.java index 604b00c..47ca951 100644 --- a/src/main/java/org/fontory/fontorybe/file/application/port/FileService.java +++ b/src/main/java/org/fontory/fontorybe/file/application/port/FileService.java @@ -5,8 +5,6 @@ import org.springframework.web.multipart.MultipartFile; public interface FileService { - - FileUploadResult uploadProfileImage(MultipartFile file, Long memberId); FileMetadata getOrThrowById(Long id); FileUploadResult uploadFontTemplateImage(MultipartFile file, Long memberId); } diff --git a/src/main/java/org/fontory/fontorybe/file/infrastructure/ProfileImageDlqRepository.java b/src/main/java/org/fontory/fontorybe/file/infrastructure/ProfileImageDlqRepository.java new file mode 100644 index 0000000..5ae966b --- /dev/null +++ b/src/main/java/org/fontory/fontorybe/file/infrastructure/ProfileImageDlqRepository.java @@ -0,0 +1,7 @@ +package org.fontory.fontorybe.file.infrastructure; + +import org.fontory.fontorybe.file.infrastructure.entity.ProfileImageDlq; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ProfileImageDlqRepository extends JpaRepository { +} diff --git a/src/main/java/org/fontory/fontorybe/file/infrastructure/entity/ProfileImageDlq.java b/src/main/java/org/fontory/fontorybe/file/infrastructure/entity/ProfileImageDlq.java new file mode 100644 index 0000000..33ff794 --- /dev/null +++ b/src/main/java/org/fontory/fontorybe/file/infrastructure/entity/ProfileImageDlq.java @@ -0,0 +1,22 @@ +package org.fontory.fontorybe.file.infrastructure.entity; + +import jakarta.persistence.*; +import lombok.*; + +import java.time.LocalDateTime; + +@Entity +@Getter +@Table(name = "dlq") +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Builder +public class ProfileImageDlq{ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private Long memberId; + private String tempKey; + private String fixKey; + private LocalDateTime time; +} diff --git a/src/main/java/org/fontory/fontorybe/member/controller/MemberController.java b/src/main/java/org/fontory/fontorybe/member/controller/MemberController.java index 08e7a44..daf2fc2 100644 --- a/src/main/java/org/fontory/fontorybe/member/controller/MemberController.java +++ b/src/main/java/org/fontory/fontorybe/member/controller/MemberController.java @@ -36,10 +36,8 @@ public ResponseEntity getInfoMember( log.info("Request received: Get member info ID: {} by member ID: {}", id, requestMemberId); Member targetMember = memberLookupService.getOrThrowById(id); - String fileUrl = cloudStorageService.getProfileImageUrl(targetMember.getProfileImageKey()); - log.info("ProfileImageUrl generated : {}", fileUrl); - ProfileResponse profileResponse = ProfileResponse.from(targetMember, fileUrl); + ProfileResponse profileResponse = ProfileResponse.from(targetMember); log.info("Response sent: ProfileResponse : {}", profileResponse); return ResponseEntity diff --git a/src/main/java/org/fontory/fontorybe/member/controller/ProfileController.java b/src/main/java/org/fontory/fontorybe/member/controller/ProfileController.java index e8f1376..4d55230 100644 --- a/src/main/java/org/fontory/fontorybe/member/controller/ProfileController.java +++ b/src/main/java/org/fontory/fontorybe/member/controller/ProfileController.java @@ -64,10 +64,8 @@ public ResponseEntity getMyProfile( log.info("Request received: getMyInfo - member is onboarding"); throw new MemberNotFoundException(); } - String fileUrl = cloudStorageService.getProfileImageUrl(lookupMember.getProfileImageKey()); - log.info("ProfileImageUrl generated : {}", fileUrl); - MyProfileResponse myProfileResponse = MyProfileResponse.from(lookupMember, fileUrl); + MyProfileResponse myProfileResponse = MyProfileResponse.from(lookupMember); log.info("Response sent: MyProfileDto : {}", myProfileResponse); return ResponseEntity @@ -79,29 +77,19 @@ public ResponseEntity getMyProfile( @Operation( summary = "내정보 수정" ) - @PatchMapping(consumes = MULTIPART_FORM_DATA_VALUE) + @PatchMapping public ResponseEntity updateMember( @Login UserPrincipal userPrincipal, - @RequestPart @Valid MemberUpdateRequest req, - @SingleFileUpload @RequestPart(value = "file", required = false) List files + @RequestBody @Valid MemberUpdateRequest req ) { Long requestMemberId = userPrincipal.getId(); log.info("Request received: update member ID: {} with request: {}", requestMemberId, req); - if (files != null && !files.isEmpty()) { - MultipartFile file = extractSingleMultipartFile(files); - logFileDetails(file, "Member profile image upload"); - FileUploadResult fileUploadResult = fileService.uploadProfileImage(file, requestMemberId); - log.info("fileUploadResult: {}", fileUploadResult); - } else { - log.info("No profile image upload found"); - } - Member updatedMember = memberUpdateService.update(requestMemberId, req); log.info("Updated : Member ID: {} Updated successfully with nickname: {}", updatedMember.getId(), updatedMember.getNickname()); - MyProfileResponse myProfileResponse = MyProfileResponse.from(updatedMember, cloudStorageService.getProfileImageUrl(updatedMember.getProfileImageKey())); + MyProfileResponse myProfileResponse = MyProfileResponse.from(updatedMember); log.info("Response sent: MyProfileDto : {}", myProfileResponse); return ResponseEntity diff --git a/src/main/java/org/fontory/fontorybe/member/controller/RegistrationController.java b/src/main/java/org/fontory/fontorybe/member/controller/RegistrationController.java index 28cd31d..a6a2ac4 100644 --- a/src/main/java/org/fontory/fontorybe/member/controller/RegistrationController.java +++ b/src/main/java/org/fontory/fontorybe/member/controller/RegistrationController.java @@ -59,41 +59,22 @@ public ResponseEntity checkDuplicate( @Operation( summary = "회원가입" ) - @PostMapping(consumes = MULTIPART_FORM_DATA_VALUE) + @PostMapping public ResponseEntity register( @Login UserPrincipal user, - @RequestPart @Valid InitMemberInfoRequest req, - @SingleFileUpload @RequestPart(value = "file", required = false) List files + @RequestBody @Valid InitMemberInfoRequest req ) { Long requestMemberId = user.getId(); log.info("Request received: Create member ID: {} with request: {}", requestMemberId, req); - Member updatedMember; - if (files != null && !files.isEmpty()) { - MultipartFile file = extractSingleMultipartFile(files); - logFileDetails(file, "Member profile image upload"); - FileUploadResult fileUploadResult = fileService.uploadProfileImage(file, requestMemberId); - updatedMember = memberOnboardService.initNewMemberInfo(requestMemberId, req, fileUploadResult); - } else { - log.info("No profile image upload found"); - updatedMember = memberOnboardService.initNewMemberInfo(requestMemberId, req); - } + Member updatedMember = memberOnboardService.initNewMemberInfo(requestMemberId, req); log.info("Response sent: Member ID: {} Created successfully with nickname: {}", updatedMember.getId(), updatedMember.getNickname()); return ResponseEntity .status(HttpStatus.CREATED) - .body(MemberCreateResponse.from(updatedMember, cloudStorageService.getProfileImageUrl(updatedMember.getProfileImageKey()))); - } - - private void logFileDetails(MultipartFile file, String context) { - log.debug("{} - File details: name='{}', original name='{}', size={} bytes, contentType='{}'", - context, - file.getName(), - file.getOriginalFilename(), - file.getSize(), - file.getContentType()); + .body(MemberCreateResponse.from(updatedMember)); } } diff --git a/src/main/java/org/fontory/fontorybe/member/controller/dto/MemberCreateResponse.java b/src/main/java/org/fontory/fontorybe/member/controller/dto/MemberCreateResponse.java index ef241c9..1f22fce 100644 --- a/src/main/java/org/fontory/fontorybe/member/controller/dto/MemberCreateResponse.java +++ b/src/main/java/org/fontory/fontorybe/member/controller/dto/MemberCreateResponse.java @@ -13,15 +13,13 @@ public class MemberCreateResponse { private final String nickname; private final Gender gender; - private final String profileImageUrl; private final LocalDate birth; private final LocalDateTime createdAt; - public static MemberCreateResponse from(Member member, String url) { + public static MemberCreateResponse from(Member member) { return MemberCreateResponse.builder() .nickname(member.getNickname()) .gender(member.getGender()) - .profileImageUrl(url) .birth(member.getBirth()) .createdAt(member.getCreatedAt()) .build(); diff --git a/src/main/java/org/fontory/fontorybe/member/controller/dto/MemberUpdateResponse.java b/src/main/java/org/fontory/fontorybe/member/controller/dto/MemberUpdateResponse.java deleted file mode 100644 index 157b57d..0000000 --- a/src/main/java/org/fontory/fontorybe/member/controller/dto/MemberUpdateResponse.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.fontory.fontorybe.member.controller.dto; - -import lombok.Builder; -import lombok.Getter; -import org.fontory.fontorybe.member.domain.Member; - -import java.time.LocalDateTime; - -@Getter -@Builder -public class MemberUpdateResponse { - private String nickname; - private String profileImage; - private LocalDateTime updatedAt; - - public static MemberUpdateResponse from(Member member) { - return MemberUpdateResponse.builder() - .nickname(member.getNickname()) - .profileImage(member.getProfileImageKey()) - .updatedAt(member.getUpdatedAt()) - .build(); - } -} diff --git a/src/main/java/org/fontory/fontorybe/member/controller/dto/MyProfileResponse.java b/src/main/java/org/fontory/fontorybe/member/controller/dto/MyProfileResponse.java index 7c93aab..12f8b82 100644 --- a/src/main/java/org/fontory/fontorybe/member/controller/dto/MyProfileResponse.java +++ b/src/main/java/org/fontory/fontorybe/member/controller/dto/MyProfileResponse.java @@ -12,19 +12,15 @@ @Builder @ToString public class MyProfileResponse { - private Long memberId; private String nickname; private Gender gender; private LocalDate birth; - private String profileImageUrl; - public static MyProfileResponse from(Member member, String url) { + public static MyProfileResponse from(Member member) { return MyProfileResponse.builder() - .memberId(member.getId()) .nickname(member.getNickname()) .birth(member.getBirth()) .gender(member.getGender()) - .profileImageUrl(url) .build(); } } diff --git a/src/main/java/org/fontory/fontorybe/member/controller/dto/ProfileResponse.java b/src/main/java/org/fontory/fontorybe/member/controller/dto/ProfileResponse.java index 96b0336..596f044 100644 --- a/src/main/java/org/fontory/fontorybe/member/controller/dto/ProfileResponse.java +++ b/src/main/java/org/fontory/fontorybe/member/controller/dto/ProfileResponse.java @@ -11,13 +11,11 @@ public class ProfileResponse { private Long memberId; private String nickname; - private String profileImageUrl; - public static ProfileResponse from(Member member, String url) { + public static ProfileResponse from(Member member) { return ProfileResponse.builder() .memberId(member.getId()) .nickname(member.getNickname()) - .profileImageUrl(url) .build(); } } diff --git a/src/main/java/org/fontory/fontorybe/member/controller/port/MemberUpdateService.java b/src/main/java/org/fontory/fontorybe/member/controller/port/MemberUpdateService.java index 0ca979c..21423e0 100644 --- a/src/main/java/org/fontory/fontorybe/member/controller/port/MemberUpdateService.java +++ b/src/main/java/org/fontory/fontorybe/member/controller/port/MemberUpdateService.java @@ -5,6 +5,5 @@ public interface MemberUpdateService { Member update(Long requestMemberId, MemberUpdateRequest memberUpdateRequest); - Member setProfileImageKey(Member requetMember, String profileImageKey); Member disable(Long requestMemberId); } diff --git a/src/main/java/org/fontory/fontorybe/member/domain/Member.java b/src/main/java/org/fontory/fontorybe/member/domain/Member.java index e84790e..b7e852f 100644 --- a/src/main/java/org/fontory/fontorybe/member/domain/Member.java +++ b/src/main/java/org/fontory/fontorybe/member/domain/Member.java @@ -23,8 +23,6 @@ public class Member { private LocalDate birth; - private String profileImageKey; - private LocalDateTime createdAt; private LocalDateTime updatedAt; @@ -40,7 +38,6 @@ public static Member fromDefaults(MemberDefaults memberDefaults, String nickname .nickname(nickname) .gender(memberDefaults.getGender()) .birth(memberDefaults.getBirth()) - .profileImageKey(memberDefaults.getProfileImageKey()) .provideId(provide.getId()) .status(MemberStatus.ONBOARDING) .build(); @@ -52,7 +49,6 @@ public Member initNewMemberInfo(InitMemberInfoRequest initNewMemberInfo, String .nickname(initNewMemberInfo.getNickname()) .gender(initNewMemberInfo.getGender()) .birth(initNewMemberInfo.getBirth()) - .profileImageKey(profileImageKey) .createdAt(this.createdAt) .provideId(this.provideId) .deletedAt(this.deletedAt) @@ -67,7 +63,6 @@ public Member initNewMemberInfo(InitMemberInfoRequest initNewMemberInfo) { .nickname(initNewMemberInfo.getNickname()) .gender(initNewMemberInfo.getGender()) .birth(initNewMemberInfo.getBirth()) - .profileImageKey(this.profileImageKey) .createdAt(this.createdAt) .provideId(this.provideId) .deletedAt(this.deletedAt) @@ -90,27 +85,10 @@ public Member update(MemberUpdateRequest memberUpdateRequest) { .deletedAt(this.deletedAt) .provideId(this.provideId) .status(this.status) - .profileImageKey(this.profileImageKey) .build(); } public void disable() { this.status = MemberStatus.DEACTIVATE; this.deletedAt = LocalDateTime.now(); } - - public Member setProfileImageKey(String profileImageKey) { - return Member.builder() - .profileImageKey(profileImageKey) - - .id(this.id) - .nickname(this.nickname) - .gender(this.gender) - .birth(this.birth) - .createdAt(this.createdAt) - .provideId(this.provideId) - .deletedAt(this.deletedAt) - .provideId(this.provideId) - .status(this.status) - .build(); - } } diff --git a/src/main/java/org/fontory/fontorybe/member/infrastructure/entity/MemberEntity.java b/src/main/java/org/fontory/fontorybe/member/infrastructure/entity/MemberEntity.java index d62e7d5..56b7f55 100644 --- a/src/main/java/org/fontory/fontorybe/member/infrastructure/entity/MemberEntity.java +++ b/src/main/java/org/fontory/fontorybe/member/infrastructure/entity/MemberEntity.java @@ -36,8 +36,6 @@ public class MemberEntity extends BaseEntity { private LocalDate birth; - private String profileImageKey; - private Long provideId; @Enumerated(EnumType.STRING) @@ -51,7 +49,6 @@ public Member toModel() { .nickname(nickname) .gender(gender) .birth(birth) - .profileImageKey(profileImageKey) .provideId(provideId) .status(status) .createdAt(getCreatedAt()) @@ -66,7 +63,6 @@ public static MemberEntity from(Member member) { .nickname(member.getNickname()) .gender(member.getGender()) .birth(member.getBirth()) - .profileImageKey(member.getProfileImageKey()) .provideId(member.getProvideId()) .status(member.getStatus()) .createdAt(member.getCreatedAt()) diff --git a/src/main/java/org/fontory/fontorybe/member/service/MemberUpdateServiceImpl.java b/src/main/java/org/fontory/fontorybe/member/service/MemberUpdateServiceImpl.java index e40b866..21afb92 100644 --- a/src/main/java/org/fontory/fontorybe/member/service/MemberUpdateServiceImpl.java +++ b/src/main/java/org/fontory/fontorybe/member/service/MemberUpdateServiceImpl.java @@ -42,13 +42,6 @@ public Member update(Long requestMemberId, MemberUpdateRequest memberUpdateReque return memberRepository.save(targetMember.update(memberUpdateRequest)); } - @Override - @Transactional - public Member setProfileImageKey(Member requetMember, String profileImageKey) { - Member member = requetMember.setProfileImageKey(profileImageKey); - return memberRepository.save(member); - } - @Override @Transactional public Member disable(Long requestMemberId) { diff --git a/src/test/java/org/fontory/fontorybe/integration/file/FileServiceIntegrationTest.java b/src/test/java/org/fontory/fontorybe/integration/file/FileServiceIntegrationTest.java index d2a7cc1..394a7b1 100644 --- a/src/test/java/org/fontory/fontorybe/integration/file/FileServiceIntegrationTest.java +++ b/src/test/java/org/fontory/fontorybe/integration/file/FileServiceIntegrationTest.java @@ -57,23 +57,6 @@ void setup() { given(s3Client.deleteObject(any(DeleteObjectRequest.class))) .willReturn(DeleteObjectResponse.builder().build()); - // Stub cloud storage upload for profile image - given(cloudStorageService.uploadProfileImage(any(FileCreate.class), anyString())) - .willAnswer(invocation -> { - FileCreate fc = invocation.getArgument(0); - String key = invocation.getArgument(1); - return FileMetadata.builder() - .fileName(fc.getFileName()) - .fileType(fc.getFileType()) - .extension(fc.getExtension()) - .key(key) - .uploaderId(fc.getUploaderId()) - .size(fc.getFile().getSize()) - .uploadedAt(LocalDateTime.now()) - .createdAt(LocalDateTime.now()) - .updatedAt(LocalDateTime.now()) - .build(); - }); // Stub cloud storage upload for font template given(cloudStorageService.uploadFontTemplateImage(any(FileCreate.class))) .willAnswer(invocation -> { @@ -91,10 +74,8 @@ void setup() { .updatedAt(LocalDateTime.now()) .build(); }); - // Stub getting file URL - given(cloudStorageService.getProfileImageUrl(anyString())) - .willReturn(mockedFileUrl); + // Stub getting file URL given(cloudStorageService.getFontPaperUrl(anyString())) .willReturn(mockedFileUrl); } @@ -116,30 +97,6 @@ void getNonExistentFileMetadataTest() { .isInstanceOf(FileNotFoundException.class); } - @Test - @DisplayName("uploadProfileImage - uploads successfully and updates member") - void uploadProfileImageTest() { - MockMultipartFile mockFile = createMockImageFile("profileTest.jpg", "image/jpeg"); - - FileUploadResult result = fileService.uploadProfileImage(mockFile, existMemberId); - - assertThat(result).isNotNull(); - assertThat(result.getFileUrl()).isEqualTo(mockedFileUrl); - assertThat(result.getFileName()).isEqualTo(existMemberId + ".jpg"); - assertThat(result.getSize()).isEqualTo(mockFile.getSize()); - - Member member = memberLookupService.getOrThrowById(existMemberId); - assertThat(member.getProfileImageKey()).isNotNull(); - } - - @Test - @DisplayName("uploadProfileImage - non-existent member throws") - void uploadProfileImageNonExistentMemberTest() { - MockMultipartFile mockFile = createMockImageFile("profileTest.jpg", "image/jpeg"); - assertThatThrownBy(() -> fileService.uploadProfileImage(mockFile, nonExistentId)) - .isInstanceOf(MemberNotFoundException.class); - } - @Test @DisplayName("uploadFontTemplateImage - uploads successfully") void uploadFontTemplateImageTest() { diff --git a/src/test/java/org/fontory/fontorybe/integration/member/controller/MemberControllerIntegrationTest.java b/src/test/java/org/fontory/fontorybe/integration/member/controller/MemberControllerIntegrationTest.java index df709a5..8fcf209 100644 --- a/src/test/java/org/fontory/fontorybe/integration/member/controller/MemberControllerIntegrationTest.java +++ b/src/test/java/org/fontory/fontorybe/integration/member/controller/MemberControllerIntegrationTest.java @@ -47,9 +47,6 @@ void setUp() { UserPrincipal userPrincipal = new UserPrincipal(TEST_MEMBER_ID); validAccessToken = jwtTokenProvider.generateAccessToken(userPrincipal); testMember = memberLookupService.getOrThrowById(TEST_MEMBER_ID); - - given(cloudStorageService.getProfileImageUrl(testMember.getProfileImageKey())) - .willReturn(TEST_FILE_URL); } @Test @@ -60,8 +57,7 @@ void getInfoMemberSuccess() throws Exception { .andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$.memberId").value(TEST_MEMBER_ID.intValue())) - .andExpect(jsonPath("$.nickname").value(TEST_MEMBER_NICKNAME)) - .andExpect(jsonPath("$.profileImageUrl").value(TEST_FILE_URL)); + .andExpect(jsonPath("$.nickname").value(TEST_MEMBER_NICKNAME)); } @Test diff --git a/src/test/java/org/fontory/fontorybe/integration/member/controller/ProfileControllerIntegrationTest.java b/src/test/java/org/fontory/fontorybe/integration/member/controller/ProfileControllerIntegrationTest.java index 78b3945..4aaaa49 100644 --- a/src/test/java/org/fontory/fontorybe/integration/member/controller/ProfileControllerIntegrationTest.java +++ b/src/test/java/org/fontory/fontorybe/integration/member/controller/ProfileControllerIntegrationTest.java @@ -62,8 +62,6 @@ void setUp() { .fileUploadTime(TEST_FILE_UPLOAD_TIME) .size(TEST_FILE_SIZE) .build(); - - given(fileService.uploadProfileImage(any(), any())).willReturn(mockFileUploadResult); } @Test @@ -81,31 +79,13 @@ void checkDuplicateFalseTest() throws Exception { void updateMemberSuccessTest() throws Exception { MemberUpdateRequest memberUpdateRequest = new MemberUpdateRequest(UPDATE_MEMBER_NICKNAME); String jsonRequest = objectMapper.writeValueAsString(memberUpdateRequest); - MockMultipartFile jsonPart = new MockMultipartFile( - "req", - null, - "application/json", - jsonRequest.getBytes(StandardCharsets.UTF_8) - ); - MockMultipartFile filePart = new MockMultipartFile( - "file", - UPDDATE_FILE_NAME, - "image/jpeg", - "fileBytes".getBytes(StandardCharsets.UTF_8) - ); - - MockMultipartHttpServletRequestBuilder builder = multipart("/member/me"); - builder.with(request -> { request.setMethod("PATCH"); return request; }); - - mockMvc.perform(builder - .file(jsonPart) - .file(filePart) + + mockMvc.perform(patch("/member/me") .cookie(new Cookie("accessToken", validAccessToken)) - .contentType(MediaType.MULTIPART_FORM_DATA)) + .contentType(MediaType.APPLICATION_JSON) + .content(jsonRequest)) .andExpect(status().isOk()) - .andExpect(jsonPath("$.memberId", is(TEST_MEMBER_ID.intValue()))) .andExpect(jsonPath("$.nickname", is(UPDATE_MEMBER_NICKNAME))) - .andExpect(jsonPath("$.profileImageUrl", containsString(testMember.getProfileImageKey()))) .andExpect(jsonPath("$.gender", is(testMember.getGender().name()))) .andExpect(jsonPath("$.birth", is(testMember.getBirth().toString()))); } diff --git a/src/test/java/org/fontory/fontorybe/integration/member/controller/RegistrationControllerIntegrationTest.java b/src/test/java/org/fontory/fontorybe/integration/member/controller/RegistrationControllerIntegrationTest.java index da4f5a8..e1cce3f 100644 --- a/src/test/java/org/fontory/fontorybe/integration/member/controller/RegistrationControllerIntegrationTest.java +++ b/src/test/java/org/fontory/fontorybe/integration/member/controller/RegistrationControllerIntegrationTest.java @@ -31,8 +31,7 @@ import static org.fontory.fontorybe.TestConstants.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.multipart; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -58,12 +57,6 @@ void setUp() { UserPrincipal userPrincipal = new UserPrincipal(TEST_MEMBER_ID); validAccessToken = jwtTokenProvider.generateAccessToken(userPrincipal); - FileUploadResult mockFileUploadResult = FileUploadResult.builder() - .fileName(TEST_FILE_NAME) - .fileUrl(TEST_FILE_URL) - .fileUploadTime(TEST_FILE_UPLOAD_TIME) - .size(TEST_FILE_SIZE) - .build(); FileMetadata fileMetadata = FileMetadata.builder() .id(TEST_FILE_ID) .fileName(TEST_FILE_NAME) @@ -79,7 +72,6 @@ void setUp() { notInitializedAccessToken = jwtTokenProvider.generateAccessToken(UserPrincipal.from(notInitedMember)); given(fileService.getOrThrowById(any())).willReturn(fileMetadata); - given(fileService.uploadProfileImage(any(), any())).willReturn(mockFileUploadResult); } @Test @@ -107,25 +99,11 @@ void checkDuplicateTrueTest() throws Exception { void addMemberSuccessTest() throws Exception { InitMemberInfoRequest initMemberInfoRequest = new InitMemberInfoRequest(NEW_MEMBER_NICKNAME, NEW_MEMBER_GENDER, NEW_MEMBER_BIRTH); String jsonRequest = objectMapper.writeValueAsString(initMemberInfoRequest); - MockMultipartFile jsonPart = new MockMultipartFile( - "req", - null, - "application/json", - jsonRequest.getBytes(StandardCharsets.UTF_8) - ); - MockMultipartFile filePart = new MockMultipartFile( - "file", - TEST_FILE_NAME, - "image/jpeg", - "fileBytes".getBytes(StandardCharsets.UTF_8) - ); - - - mockMvc.perform(multipart("/register") - .file(jsonPart) - .file(filePart) + + mockMvc.perform(post("/register") .cookie(new Cookie("accessToken", notInitializedAccessToken)) - .contentType(MediaType.MULTIPART_FORM_DATA)) + .contentType(MediaType.APPLICATION_JSON) + .content(jsonRequest)) .andExpect(status().isCreated()); } } diff --git a/src/test/java/org/fontory/fontorybe/integration/member/service/MemberUpdateServiceIntegrationTest.java b/src/test/java/org/fontory/fontorybe/integration/member/service/MemberUpdateServiceIntegrationTest.java index c4b5b30..6c58ed6 100644 --- a/src/test/java/org/fontory/fontorybe/integration/member/service/MemberUpdateServiceIntegrationTest.java +++ b/src/test/java/org/fontory/fontorybe/integration/member/service/MemberUpdateServiceIntegrationTest.java @@ -72,7 +72,6 @@ void setUp() { .build(); given(fileService.getOrThrowById(any())).willReturn(profileImageFileMetadata); - given(fileService.uploadProfileImage(any(), any())).willReturn(profileImageFileUploadResult); } @Test @@ -85,7 +84,6 @@ void getOrThrowByIdTest() { () -> assertThat(foundMember.getNickname()).isEqualTo(TEST_MEMBER_NICKNAME), () -> assertThat(foundMember.getGender()).isEqualTo(TEST_MEMBER_GENDER), () -> assertThat(foundMember.getProvideId()).isEqualTo(TEST_PROVIDE_ID), - () -> assertThat(foundMember.getProfileImageKey()).isEqualTo(TEST_MEMBER_PROFILE_KEY), () -> assertThat(foundMember.getCreatedAt()).isNotNull(), () -> assertThat(foundMember.getUpdatedAt()).isNotNull(), () -> assertThat(foundMember.getDeletedAt()).isNull() @@ -114,7 +112,6 @@ void createTest() { () -> assertThat(createdMember.getNickname()).isEqualTo(NEW_MEMBER_NICKNAME), () -> assertThat(createdMember.getGender()).isEqualTo(NEW_MEMBER_GENDER), () -> assertThat(createdMember.getBirth()).isEqualTo(NEW_MEMBER_BIRTH), - () -> assertThat(createdMember.getProfileImageKey()).isEqualTo(NEW_MEMBER_PROFILE_KEY), () -> assertThat(createdMember.getCreatedAt()).isNotNull(), () -> assertThat(createdMember.getUpdatedAt()).isNotNull() ); @@ -154,7 +151,6 @@ void updateTest() { () -> assertThat(updatedMember.getCreatedAt()).isEqualTo(member.getCreatedAt()), () -> assertThat(updatedMember.getProvideId()).isEqualTo(member.getProvideId()), () -> assertThat(updatedMember.getNickname()).isEqualTo(UPDATE_MEMBER_NICKNAME), - () -> assertThat(updatedMember.getProfileImageKey()).isEqualTo(member.getProfileImageKey()), () -> assertThat(updatedMember.getUpdatedAt()).isAfter(member.getUpdatedAt()) ); } @@ -230,14 +226,6 @@ void disableAlreadyDisabledTest() { private Member create(InitMemberInfoRequest initNewMemberInfoRequest, Provide provide) { Member defaultMember = memberCreationService.createDefaultMember(provide); - MockMultipartFile file = new MockMultipartFile( - TEST_FILE_NAME, // RequestPart 이름 - TEST_FILE_NAME, // 원본 파일명 - "image/png", // Content-Type - "dummy-image-data".getBytes() // 파일 내용 - ); - FileUploadResult fileUploadResult = fileService.uploadProfileImage(file, defaultMember.getId()); - System.out.println("fileUploadResult = " + fileUploadResult); - return memberOnboardService.initNewMemberInfo(defaultMember.getId(), initNewMemberInfoRequest, fileUploadResult); + return memberOnboardService.initNewMemberInfo(defaultMember.getId(), initNewMemberInfoRequest); } } \ No newline at end of file diff --git a/src/test/java/org/fontory/fontorybe/unit/file/FileServiceTest.java b/src/test/java/org/fontory/fontorybe/unit/file/FileServiceTest.java index 58daa13..e6b84ad 100644 --- a/src/test/java/org/fontory/fontorybe/unit/file/FileServiceTest.java +++ b/src/test/java/org/fontory/fontorybe/unit/file/FileServiceTest.java @@ -83,7 +83,7 @@ void getOrThrowByIdTest() { MultipartFile mockFile = createValidImageFile(profileImageFilename, "image/jpeg"); // Upload a file to get its ID - FileUploadResult uploadResult = fileService.uploadProfileImage(mockFile, existMemberId); + FileUploadResult uploadResult = fileService.uploadFontTemplateImage(mockFile, existMemberId); FileMetadata savedMetadata = testContainer.fileRepository.findById(uploadResult.getId()).get(); Long fileId = savedMetadata.getId(); @@ -95,7 +95,7 @@ void getOrThrowByIdTest() { () -> assertThat(retrievedMetadata).isNotNull(), () -> assertThat(retrievedMetadata.getId()).isEqualTo(fileId), () -> assertThat(retrievedMetadata.getFileName()).isEqualTo(existMemberId + ".jpg"), - () -> assertThat(retrievedMetadata.getFileType()).isEqualTo(FileType.PROFILE_IMAGE), + () -> assertThat(retrievedMetadata.getFileType()).isEqualTo(FileType.FONT_PAPER), () -> assertThat(retrievedMetadata.getUploaderId()).isEqualTo(existMemberId), () -> assertThat(retrievedMetadata.getSize()).isEqualTo(fileContent.length), () -> assertThat(retrievedMetadata.getUploadedAt()).isNotNull(), @@ -116,41 +116,6 @@ void getOrThrowByIdNonExistentTest() { ).isExactlyInstanceOf(FileNotFoundException.class); } - @Test - @DisplayName("uploadProfileImage - should upload profile image successfully") - void uploadProfileImageTest() { - // given - MultipartFile mockFile = createValidImageFile(profileImageFilename, "image/jpeg"); - - // when - FileUploadResult result = fileService.uploadProfileImage(mockFile, existMemberId); - - // then - assertAll( - () -> assertThat(result).isNotNull(), - () -> assertThat(result.getFileName()).isEqualTo(existMemberId + ".jpg"), - () -> assertThat(result.getFileUrl()).isNotNull(), - () -> assertThat(result.getFileUploadTime()).isNotNull(), - () -> assertThat(result.getSize()).isEqualTo(fileContent.length) - ); - - // 멤버의 프로필 이미지가 업데이트되었는지 확인 - Member updatedMember = memberLookupService.getOrThrowById(existMemberId); - assertThat(updatedMember.getProfileImageKey()).isNotNull(); - } - - @Test - @DisplayName("uploadProfileImage - should throw exception when member doesn't exist") - void uploadProfileImageNonExistentMemberTest() { - // given - MultipartFile mockFile = createValidImageFile(profileImageFilename, "image/jpeg"); - - // when & then - assertThatThrownBy( - () -> fileService.uploadProfileImage(mockFile, nonExistentId) - ).isExactlyInstanceOf(MemberNotFoundException.class); - } - @Test @DisplayName("uploadFontTemplateImage - should upload font template image successfully") void uploadFontTemplateImageTest() { @@ -186,10 +151,10 @@ void uploadFontTemplateImageNonExistentMemberTest() { @DisplayName("upload and retrieve file metadata should work together") void uploadAndRetrieveTest() { // given - MockMultipartFile mockFile = createValidImageFile("profile.jpg", "image/jpeg"); + MockMultipartFile mockFile = createValidImageFile("fontPaper.jpg", "image/jpeg"); // when - upload file - FileUploadResult uploadResult = fileService.uploadProfileImage(mockFile, existMemberId); + FileUploadResult uploadResult = fileService.uploadFontTemplateImage(mockFile, existMemberId); // Find the file ID from repository FileMetadata savedMetadata = testContainer.fileRepository.findById(uploadResult.getId()).get(); @@ -203,7 +168,7 @@ void uploadAndRetrieveTest() { () -> assertThat(retrievedMetadata).isNotNull(), () -> assertThat(retrievedMetadata.getId()).isEqualTo(fileId), () -> assertThat(retrievedMetadata.getFileName()).isEqualTo(existMemberId + ".jpg"), - () -> assertThat(retrievedMetadata.getFileType()).isEqualTo(FileType.PROFILE_IMAGE), + () -> assertThat(retrievedMetadata.getFileType()).isEqualTo(FileType.FONT_PAPER), () -> assertThat(uploadResult.getFileUrl()).contains(retrievedMetadata.getKey()) ); } @@ -212,24 +177,20 @@ void uploadAndRetrieveTest() { @DisplayName("uploading different types of images should update FileMetadata correctly") void uploadDifferentImagesTest() { // given - MockMultipartFile profileFile = createValidImageFile("profile.jpg", "image/jpeg"); - MockMultipartFile templateFile = createValidImageFile("template.png", "image/png"); + MockMultipartFile jpgFile = createValidImageFile("profile.jpg", "image/jpeg"); + MockMultipartFile pngFile = createValidImageFile("template.png", "image/png"); // when - upload profile image - FileUploadResult profileResult = fileService.uploadProfileImage(profileFile, existMemberId); + FileUploadResult jpgResult = fileService.uploadFontTemplateImage(jpgFile, existMemberId); // when - upload template image - FileUploadResult templateResult = fileService.uploadFontTemplateImage(templateFile, existMemberId); + FileUploadResult pngResult = fileService.uploadFontTemplateImage(pngFile, existMemberId); // then assertAll( - () -> assertThat(profileResult.getFileName()).contains("jpg"), - () -> assertThat(templateResult.getFileName()).contains("png"), - () -> assertThat(((FakeFileRepository)testContainer.fileRepository).findAll()).hasSize(3) + () -> assertThat(jpgResult.getFileName()).contains("jpg"), + () -> assertThat(pngResult.getFileName()).contains("png"), + () -> assertThat(((FakeFileRepository)testContainer.fileRepository).findAll()).hasSize(2) ); - - // Member should have profile image updated - Member updatedMember = memberLookupService.getOrThrowById(existMemberId); - assertThat(updatedMember.getProfileImageKey()).isNotNull(); } } \ No newline at end of file diff --git a/src/test/java/org/fontory/fontorybe/unit/member/controller/MemberControllerTest.java b/src/test/java/org/fontory/fontorybe/unit/member/controller/MemberControllerTest.java index 41a2653..8da1d3f 100644 --- a/src/test/java/org/fontory/fontorybe/unit/member/controller/MemberControllerTest.java +++ b/src/test/java/org/fontory/fontorybe/unit/member/controller/MemberControllerTest.java @@ -69,7 +69,6 @@ void getInfoMemberSuccessTest() { assertAll( () -> assertThat(body.getMemberId()).isEqualTo(testMember.getId()), - () -> assertThat(body.getProfileImageUrl()).isEqualTo(cloudStorageService.getProfileImageUrl(testMember.getProfileImageKey())), () -> assertThat(body.getNickname()).isEqualTo(testMember.getNickname()) ); } diff --git a/src/test/java/org/fontory/fontorybe/unit/member/controller/ProfileControllerTest.java b/src/test/java/org/fontory/fontorybe/unit/member/controller/ProfileControllerTest.java index ba3706b..74f50e1 100644 --- a/src/test/java/org/fontory/fontorybe/unit/member/controller/ProfileControllerTest.java +++ b/src/test/java/org/fontory/fontorybe/unit/member/controller/ProfileControllerTest.java @@ -114,15 +114,14 @@ void testUpdateMember() { ); //when - ResponseEntity response = profileController.updateMember(testMemberUserPrincipal, memberUpdateRequest, mockFiles); + ResponseEntity response = profileController.updateMember(testMemberUserPrincipal, memberUpdateRequest); MyProfileResponse body = response.getBody(); //then assertAll( () -> assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK), () -> assertThat(body).isNotNull(), - () -> assertThat(body.getNickname()).isEqualTo(UPDATE_MEMBER_NICKNAME), - () -> assertThat(body.getProfileImageUrl()).isEqualTo(cloudStorageService.getProfileImageUrl(testMember.getProfileImageKey())) + () -> assertThat(body.getNickname()).isEqualTo(UPDATE_MEMBER_NICKNAME) ); } @@ -134,7 +133,7 @@ void updateMemberNonExistentTest() { MemberUpdateRequest memberUpdateRequest = new MemberUpdateRequest(TestConstants.UPDATE_MEMBER_NICKNAME); // when & then - assertThatThrownBy(() -> profileController.updateMember(nonExistentUserPrincipal, memberUpdateRequest, mockFiles)) + assertThatThrownBy(() -> profileController.updateMember(nonExistentUserPrincipal, memberUpdateRequest)) .isInstanceOf(MemberNotFoundException.class); } } diff --git a/src/test/java/org/fontory/fontorybe/unit/member/controller/RegistrationControllerTest.java b/src/test/java/org/fontory/fontorybe/unit/member/controller/RegistrationControllerTest.java index dc17926..c29a4e4 100644 --- a/src/test/java/org/fontory/fontorybe/unit/member/controller/RegistrationControllerTest.java +++ b/src/test/java/org/fontory/fontorybe/unit/member/controller/RegistrationControllerTest.java @@ -73,17 +73,10 @@ void testCheckDuplicateFalse() { @DisplayName("addMember returns created member response") void testAddMember() { //given - MockMultipartFile file = new MockMultipartFile( - "file", // RequestPart 이름 - "test.png", // 원본 파일명 - "image/png", // Content-Type - "dummy-image-data".getBytes() // 파일 내용 - ); - List files = Collections.singletonList(file); Member notInitedMember = testContainer.createNotInitedMember(); //when - ResponseEntity response = registrationController.register(UserPrincipal.from(notInitedMember), newInitMemberInfoRequest, files); + ResponseEntity response = registrationController.register(UserPrincipal.from(notInitedMember), newInitMemberInfoRequest); MemberCreateResponse body = response.getBody(); //then diff --git a/src/test/java/org/fontory/fontorybe/unit/member/service/MemberUpdateServiceTest.java b/src/test/java/org/fontory/fontorybe/unit/member/service/MemberUpdateServiceTest.java index a2a7e0f..af1efd2 100644 --- a/src/test/java/org/fontory/fontorybe/unit/member/service/MemberUpdateServiceTest.java +++ b/src/test/java/org/fontory/fontorybe/unit/member/service/MemberUpdateServiceTest.java @@ -71,7 +71,6 @@ void getOrThrownByIdTest() { () -> assertThat(foundMember.getNickname()).isEqualTo(TEST_MEMBER_NICKNAME), () -> assertThat(foundMember.getGender()).isEqualTo(TEST_MEMBER_GENDER), () -> assertThat(foundMember.getProvideId()).isEqualTo(testMemberProvideId), - () -> assertThat(foundMember.getProfileImageKey()).isNotEqualTo(DEFAULT_PROFILE_KEY), () -> assertThat(foundMember.getCreatedAt()).isNotNull(), () -> assertThat(foundMember.getUpdatedAt()).isNotNull(), () -> assertThat(foundMember.getDeletedAt()).isNull() @@ -101,7 +100,6 @@ void makeDefaultMember() { () -> assertThat(defaultMember.getNickname()).isNotNull(), () -> assertThat(defaultMember.getGender()).isEqualTo(memberDefaults.getGender()), () -> assertThat(defaultMember.getBirth()).isEqualTo(memberDefaults.getBirth()), - () -> assertThat(defaultMember.getProfileImageKey()).isEqualTo(memberDefaults.getProfileImageKey()), () -> assertThat(defaultMember.getCreatedAt()).isNotNull(), () -> assertThat(defaultMember.getUpdatedAt()).isNotNull() ); @@ -122,7 +120,6 @@ void createTest() { () -> assertThat(createdMember.getNickname()).isEqualTo(NEW_MEMBER_NICKNAME), () -> assertThat(createdMember.getGender()).isEqualTo(NEW_MEMBER_GENDER), () -> assertThat(createdMember.getBirth()).isEqualTo(NEW_MEMBER_BIRTH), - () -> assertThat(createdMember.getProfileImageKey()).isNotEqualTo(DEFAULT_PROFILE_KEY), () -> assertThat(createdMember.getCreatedAt()).isNotNull(), () -> assertThat(createdMember.getUpdatedAt()).isNotNull() ); @@ -162,7 +159,6 @@ void updateTest() { () -> assertThat(updatedMember.getCreatedAt()).isEqualTo(member.getCreatedAt()), () -> assertThat(updatedMember.getProvideId()).isEqualTo(member.getProvideId()), () -> assertThat(updatedMember.getNickname()).isEqualTo(UPDATE_MEMBER_NICKNAME), - () -> assertThat(updatedMember.getProfileImageKey()).isEqualTo(member.getProfileImageKey()), () -> assertThat(updatedMember.getUpdatedAt()).isAfter(member.getUpdatedAt()) ); } @@ -229,8 +225,7 @@ void updateNoNicknameChangeTest() { Member updatedMember = memberUpdateService.update(member.getId(), memberUpdateRequest); assertAll( () -> assertThat(updatedMember.getId()).isEqualTo(member.getId()), - () -> assertThat(updatedMember.getNickname()).isEqualTo(member.getNickname()), - () -> assertThat(updatedMember.getProfileImageKey()).isEqualTo(member.getProfileImageKey()) + () -> assertThat(updatedMember.getNickname()).isEqualTo(member.getNickname()) ); } diff --git a/src/test/java/org/fontory/fontorybe/unit/mock/FakeCloudStorageService.java b/src/test/java/org/fontory/fontorybe/unit/mock/FakeCloudStorageService.java index 896c90d..0c0faae 100644 --- a/src/test/java/org/fontory/fontorybe/unit/mock/FakeCloudStorageService.java +++ b/src/test/java/org/fontory/fontorybe/unit/mock/FakeCloudStorageService.java @@ -18,17 +18,6 @@ public FakeCloudStorageService(S3Config s3Config) { this.s3Config = s3Config; } - @Override - public FileMetadata uploadProfileImage(FileCreate fileCreate, String key) { - AmazonS3PutRequest amazonS3PutRequest = AmazonS3PutRequest.from( - fileCreate, - key, - s3Config.getBucketName(FileType.PROFILE_IMAGE), - s3Config.getPrefix(FileType.PROFILE_IMAGE), - LocalDateTime.now()); - return uploadFile(amazonS3PutRequest).toModel(); - } - @Override public FileMetadata uploadFontTemplateImage(FileCreate request) { String key = UUID.randomUUID().toString(); @@ -45,11 +34,6 @@ private String getFileUrl(FileType fileType, String key) { return String.format("%s/%s/%s", s3Config.getCdnUrl(), s3Config.getPrefix(fileType), key); } - @Override - public String getProfileImageUrl(String key) { - return getFileUrl(FileType.PROFILE_IMAGE, key); - } - @Override public String getFontPaperUrl(String key) { return getFileUrl(FileType.FONT_PAPER, key); diff --git a/src/test/java/org/fontory/fontorybe/unit/mock/FakeMemberRepository.java b/src/test/java/org/fontory/fontorybe/unit/mock/FakeMemberRepository.java index 82c33f4..145c273 100644 --- a/src/test/java/org/fontory/fontorybe/unit/mock/FakeMemberRepository.java +++ b/src/test/java/org/fontory/fontorybe/unit/mock/FakeMemberRepository.java @@ -23,7 +23,6 @@ public Member save(Member member) { .nickname(member.getNickname()) .gender(member.getGender()) .birth(member.getBirth()) - .profileImageKey(member.getProfileImageKey()) .provideId(member.getProvideId()) .status(member.getStatus()) .createdAt(now) @@ -38,7 +37,6 @@ public Member save(Member member) { .nickname(member.getNickname()) .gender(member.getGender()) .birth(member.getBirth()) - .profileImageKey(member.getProfileImageKey()) .provideId(member.getProvideId()) .status(member.getStatus()) .createdAt(member.getCreatedAt()) diff --git a/src/test/java/org/fontory/fontorybe/unit/mock/TestContainer.java b/src/test/java/org/fontory/fontorybe/unit/mock/TestContainer.java index 786e652..cdf3edf 100644 --- a/src/test/java/org/fontory/fontorybe/unit/mock/TestContainer.java +++ b/src/test/java/org/fontory/fontorybe/unit/mock/TestContainer.java @@ -144,7 +144,6 @@ public TestContainer() { fileService = FileServiceImpl.builder() .memberLookupService(memberLookupService) .memberDefaults(memberDefaults) - .memberUpdateService(memberUpdateService) .fileRepository(fileRepository) .fileRequestMapper(fileRequestMapper) .eventPublisher(eventPublisher) @@ -222,8 +221,7 @@ public Member create(InitMemberInfoRequest initNewMemberInfoRequest, Provide pro "image/png", // Content-Type "dummy-image-data".getBytes() // 파일 내용 ); - FileUploadResult fileUploadResult = fileService.uploadProfileImage(file, defaultMember.getId()); - return memberOnboardService.initNewMemberInfo(defaultMember.getId(), initNewMemberInfoRequest, fileUploadResult); + return memberOnboardService.initNewMemberInfo(defaultMember.getId(), initNewMemberInfoRequest); } public final ProvideCreateDto testMemberProvideCreateDto = new ProvideCreateDto(TEST_MEMBER_PROVIDER, TEST_MEMBER_PROVIDED_ID, TEST_MEMBER_EMAIL); diff --git a/src/test/resources/sql/createFileTestData.sql b/src/test/resources/sql/createFileTestData.sql index 69c7524..96e61b3 100644 --- a/src/test/resources/sql/createFileTestData.sql +++ b/src/test/resources/sql/createFileTestData.sql @@ -3,8 +3,8 @@ truncate table `member`; truncate table `provide`; -- Test member data -insert into `member` (`member_id`, `nickname`, `gender`, `birth`, `profile_image_key`, `provide_id`, `status`,`created_at`, `updated_at`) -values (999, 'existMemberNickName', 'MALE', '2025-01-26', 'existMemberProfileImage', 999, 'ACTIVATE', NOW(), NOW()); +insert into `member` (`member_id`, `nickname`, `gender`, `birth`, `provide_id`, `status`,`created_at`, `updated_at`) +values (999, 'existMemberNickName', 'MALE', '2025-01-26', 999, 'ACTIVATE', NOW(), NOW()); -- Test provide data insert into `provide` (`provide_id`, `provider`, `provided_id`, `email`, `member_id`) diff --git a/src/test/resources/sql/createFontTestData.sql b/src/test/resources/sql/createFontTestData.sql index 6e42ddc..8b055fa 100644 --- a/src/test/resources/sql/createFontTestData.sql +++ b/src/test/resources/sql/createFontTestData.sql @@ -26,11 +26,11 @@ INSERT INTO `font` ( '2025-04-08 10:00:00' ); -insert into `member` (`member_id`, `nickname`, `gender`, `birth`, `profile_image_key`, `provide_id`, `status`, `created_at`, `updated_at`) -values (999, 'existMemberNickName', 'MALE', '2025-01-26', 'existMemberProfileImage', 999, 'ACTIVATE','1922-09-18 19:11:00.000000', '1922-09-18 19:11:00.000000'); +insert into `member` (`member_id`, `nickname`, `gender`, `birth`, `provide_id`, `status`, `created_at`, `updated_at`) +values (999, 'existMemberNickName', 'MALE', '2025-01-26', 999, 'ACTIVATE','1922-09-18 19:11:00.000000', '1922-09-18 19:11:00.000000'); -insert into `member` (`member_id`, `nickname`, `gender`, `birth`, `profile_image_key`, `provide_id`, `status`, `created_at`, `updated_at`) -values (1, 'createdMemberNickName', 'MALE', '2025-01-26', 'existMemberProfileImage', 1, 'ACTIVATE','1922-09-18 19:11:00.000000', '1922-09-18 19:11:00.000000'); +insert into `member` (`member_id`, `nickname`, `gender`, `birth`, `provide_id`, `status`, `created_at`, `updated_at`) +values (1, 'createdMemberNickName', 'MALE', '2025-01-26', 1, 'ACTIVATE','1922-09-18 19:11:00.000000', '1922-09-18 19:11:00.000000'); insert into `provide` (`provide_id`, `provider`, `provided_id`, `email`, `member_id`) values (999, 'GOOGLE', 'test_provided_id', 'test_email', 999); diff --git a/src/test/resources/sql/createMemberTestData.sql b/src/test/resources/sql/createMemberTestData.sql index eebb305..ae0eedd 100644 --- a/src/test/resources/sql/createMemberTestData.sql +++ b/src/test/resources/sql/createMemberTestData.sql @@ -1,8 +1,8 @@ truncate table `member`; truncate table `provide`; -insert into `member` (`member_id`, `nickname`, `gender`, `birth`, `profile_image_key`, `provide_id`, `status`,`created_at`, `updated_at`) -values (999, 'testMemberNickName', 'MALE', '2025-01-26', 'testMemberProfileImage', 1, 'ACTIVATE','1922-09-18 19:11:00.000000', '1922-09-18 19:11:00.000000'); +insert into `member` (`member_id`, `nickname`, `gender`, `birth`, `provide_id`, `status`,`created_at`, `updated_at`) +values (999, 'testMemberNickName', 'MALE', '2025-01-26', 1, 'ACTIVATE','1922-09-18 19:11:00.000000', '1922-09-18 19:11:00.000000'); insert into `provide` (`provide_id`, `provider`, `provided_id`, `email`, `member_id`) values (1, 'GOOGLE', 'testMemberProvidedId', 'testMemberEmail', 999); \ No newline at end of file