Skip to content

Commit a924282

Browse files
committed
chore: Remove profile image upload feature and related artifacts
- Remove uploadProfileImage API and service method references - Delete ProfileImageUpdatedEvent DTO and ProfileImageUpdateListener listener - Remove uploadProfileImage/ getProfileImageUrl methods from CloudStorageService/AmazonS3BucketService - Strip out profileImageKey fields from Member domain, entity, DTOs, controllers, tests - Clean up DevTokenInitializer default profileImageKey initialization - Update integration and unit tests to remove profile image upload and URL assertions - Simplify MemberController/ProfileController/RegistrationController to no longer expect multipart file handling
1 parent e5c5b33 commit a924282

34 files changed

Lines changed: 50 additions & 560 deletions

src/main/java/org/fontory/fontorybe/common/application/DevTokenInitializer.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,6 @@ public void initTokens() {
9999
.birth(LocalDate.now())
100100
.nickname("Tester")
101101
.status(MemberStatus.ONBOARDING)
102-
.profileImageKey(memberDefaults.getProfileImageKey())
103102
.build();
104103
return memberRepository.save(m);
105104
});

src/main/java/org/fontory/fontorybe/file/adapter/outbound/s3/AmazonS3BucketService.java

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -27,40 +27,15 @@ public class AmazonS3BucketService implements CloudStorageService {
2727
private final S3Client s3;
2828
private final S3Config s3Config;
2929
private final ClockHolder clockHolder;
30-
private String profileImageBucketName;
3130
private String fontPaperBucketName;
32-
private String profileImagePrefix;
3331
private String fontPaperPrefix;
3432

3533
@PostConstruct
3634
void init() {
37-
profileImageBucketName = s3Config.getBucketName(FileType.PROFILE_IMAGE);
3835
fontPaperBucketName = s3Config.getBucketName(FileType.FONT_PAPER);
39-
profileImagePrefix = s3Config.getPrefix(FileType.PROFILE_IMAGE);
4036
fontPaperPrefix = s3Config.getPrefix(FileType.FONT_PAPER);
4137
}
4238

43-
@Override
44-
public FileMetadata uploadProfileImage(FileCreate request, String key) {
45-
log.info("Uploading profile image: fileName={}, contentType={}, size={} bytes, fileKey={}",
46-
request.getFileName(), request.getFile().getContentType(), request.getFile().getSize(), key);
47-
48-
AmazonS3PutRequest amazonS3PutRequest = AmazonS3PutRequest.from(
49-
request,
50-
key,
51-
profileImageBucketName,
52-
profileImagePrefix,
53-
clockHolder.getCurrentTimeStamp());
54-
55-
log.info("Profile image uploaded successfully: fileKey={}, bucket={}", key, profileImageBucketName);
56-
return uploadFile(amazonS3PutRequest).toModel();
57-
}
58-
59-
@Override
60-
public String getProfileImageUrl(String key) {
61-
return getFileUrl(FileType.PROFILE_IMAGE, key);
62-
}
63-
6439
@Override
6540
public String getFontPaperUrl(String key) {
6641
return getFileUrl(FileType.FONT_PAPER, key);

src/main/java/org/fontory/fontorybe/file/adapter/outbound/s3/ProfileImageUpdateListener.java

Lines changed: 0 additions & 147 deletions
This file was deleted.

src/main/java/org/fontory/fontorybe/file/adapter/outbound/s3/dto/ProfileImageUpdatedEvent.java

Lines changed: 0 additions & 12 deletions
This file was deleted.

src/main/java/org/fontory/fontorybe/file/application/FileServiceImpl.java

Lines changed: 0 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import java.util.UUID;
55

66
import org.fontory.fontorybe.file.adapter.inbound.FileRequestMapper;
7-
import org.fontory.fontorybe.file.adapter.outbound.s3.dto.ProfileImageUpdatedEvent;
87
import org.fontory.fontorybe.file.application.port.CloudStorageService;
98
import org.fontory.fontorybe.file.application.port.FileRepository;
109
import org.fontory.fontorybe.file.application.port.FileService;
@@ -13,7 +12,6 @@
1312
import org.fontory.fontorybe.file.domain.FileUploadResult;
1413
import org.fontory.fontorybe.file.domain.exception.FileNotFoundException;
1514
import org.fontory.fontorybe.member.controller.port.MemberLookupService;
16-
import org.fontory.fontorybe.member.controller.port.MemberUpdateService;
1715
import org.fontory.fontorybe.member.domain.Member;
1816
import org.fontory.fontorybe.member.domain.MemberDefaults;
1917
import org.springframework.context.ApplicationEventPublisher;
@@ -45,54 +43,6 @@ public FileMetadata getOrThrowById(Long id) {
4543
.orElseThrow(() -> new FileNotFoundException(id));
4644
}
4745

48-
/**
49-
* Upload profile image in two phase
50-
* 1) Stage the file in S3 under tempKey and save metadata in DB
51-
* 2) Publish an event for AFTER_COMMIT listener to promote and update DB.
52-
*/
53-
@Override
54-
@Transactional
55-
public FileUploadResult uploadProfileImage(MultipartFile file, Long memberId) {
56-
log.info("Start profile image upload: fileName={}, memberId={}", file.getOriginalFilename(), memberId);
57-
58-
// Lookup member and build FileCreate DTO
59-
Member requestMember = memberLookupService.getOrThrowById(memberId);
60-
log.debug("Fetched member for upload: memberId={}, currentProfileKey={}",
61-
memberId, requestMember.getProfileImageKey());
62-
FileCreate profileImageFileCreate = fileRequestMapper.toProfileImageFileCreate(file, requestMember);
63-
64-
// Determine fixedKey: new UUID for first upload, else reuse
65-
boolean isInitial = memberDefaults.getProfileImageKey().equals(requestMember.getProfileImageKey());
66-
String fixedKey = isInitial
67-
? UUID.randomUUID().toString()
68-
: requestMember.getProfileImageKey();
69-
log.debug("Determined fixedKey: {} (initialUpload={})", fixedKey, isInitial);
70-
71-
// Stage upload to S3 under tempKey
72-
String tempKey = UUID.randomUUID().toString();
73-
log.info("Staging profile image to S3: memberId={}, tempKey={}", memberId, tempKey);
74-
FileMetadata metadata = cloudStorageService.uploadProfileImage(profileImageFileCreate, tempKey);
75-
log.debug("S3 upload complete, metadata key updated: tempKey={}, metadataKey={}",
76-
tempKey, metadata.getKey());
77-
78-
// Save metadata with the final key placeholder
79-
metadata.updateKey(fixedKey);
80-
FileMetadata savedMetaData = fileRepository.save(metadata);
81-
log.info("File metadata saved: id={}, key={}", savedMetaData.getId(), savedMetaData.getKey());
82-
83-
// Publish event for AFTER_COMMIT promotion listener
84-
log.info("Publishing ProfileImageUpdatedEvent: memberId={}, tempKey={}, fixedKey={}",
85-
memberId, tempKey, fixedKey);
86-
eventPublisher.publishEvent(new ProfileImageUpdatedEvent(memberId, tempKey, fixedKey));
87-
88-
// 6) Build result URL from fixedKey (will be live after promotion)
89-
String fileUrl = cloudStorageService.getProfileImageUrl(fixedKey);
90-
FileUploadResult result = FileUploadResult.from(savedMetaData, fileUrl);
91-
log.info("Profile image upload request processed: memberId={}, resultUrl={}", memberId, fileUrl);
92-
93-
return result;
94-
}
95-
9646
@Override
9747
@Transactional
9848
public FileUploadResult uploadFontTemplateImage(MultipartFile file, Long memberId) {

src/main/java/org/fontory/fontorybe/file/application/port/CloudStorageService.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@
44
import org.fontory.fontorybe.file.domain.FileMetadata;
55

66
public interface CloudStorageService {
7-
FileMetadata uploadProfileImage(FileCreate fileCreate, String key);
87
FileMetadata uploadFontTemplateImage(FileCreate request);
9-
String getProfileImageUrl(String key);
108
String getFontPaperUrl(String key);
119
String getWoff2Url(String key);
1210
String getTtfUrl(String key);

src/main/java/org/fontory/fontorybe/file/application/port/FileService.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
import org.springframework.web.multipart.MultipartFile;
66

77
public interface FileService {
8-
9-
FileUploadResult uploadProfileImage(MultipartFile file, Long memberId);
108
FileMetadata getOrThrowById(Long id);
119
FileUploadResult uploadFontTemplateImage(MultipartFile file, Long memberId);
1210
}

src/main/java/org/fontory/fontorybe/member/controller/MemberController.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,8 @@ public ResponseEntity<ProfileResponse> getInfoMember(
3636
log.info("Request received: Get member info ID: {} by member ID: {}", id, requestMemberId);
3737

3838
Member targetMember = memberLookupService.getOrThrowById(id);
39-
String fileUrl = cloudStorageService.getProfileImageUrl(targetMember.getProfileImageKey());
40-
log.info("ProfileImageUrl generated : {}", fileUrl);
4139

42-
ProfileResponse profileResponse = ProfileResponse.from(targetMember, fileUrl);
40+
ProfileResponse profileResponse = ProfileResponse.from(targetMember);
4341
log.info("Response sent: ProfileResponse : {}", profileResponse);
4442

4543
return ResponseEntity

src/main/java/org/fontory/fontorybe/member/controller/ProfileController.java

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,8 @@ public ResponseEntity<MyProfileResponse> getMyProfile(
6464
log.info("Request received: getMyInfo - member is onboarding");
6565
throw new MemberNotFoundException();
6666
}
67-
String fileUrl = cloudStorageService.getProfileImageUrl(lookupMember.getProfileImageKey());
68-
log.info("ProfileImageUrl generated : {}", fileUrl);
6967

70-
MyProfileResponse myProfileResponse = MyProfileResponse.from(lookupMember, fileUrl);
68+
MyProfileResponse myProfileResponse = MyProfileResponse.from(lookupMember);
7169
log.info("Response sent: MyProfileDto : {}", myProfileResponse);
7270

7371
return ResponseEntity
@@ -79,29 +77,19 @@ public ResponseEntity<MyProfileResponse> getMyProfile(
7977
@Operation(
8078
summary = "내정보 수정"
8179
)
82-
@PatchMapping(consumes = MULTIPART_FORM_DATA_VALUE)
80+
@PatchMapping
8381
public ResponseEntity<MyProfileResponse> updateMember(
8482
@Login UserPrincipal userPrincipal,
85-
@RequestPart @Valid MemberUpdateRequest req,
86-
@SingleFileUpload @RequestPart(value = "file", required = false) List<MultipartFile> files
83+
@RequestBody @Valid MemberUpdateRequest req
8784
) {
8885
Long requestMemberId = userPrincipal.getId();
8986
log.info("Request received: update member ID: {} with request: {}",
9087
requestMemberId, req);
9188

92-
if (files != null && !files.isEmpty()) {
93-
MultipartFile file = extractSingleMultipartFile(files);
94-
logFileDetails(file, "Member profile image upload");
95-
FileUploadResult fileUploadResult = fileService.uploadProfileImage(file, requestMemberId);
96-
log.info("fileUploadResult: {}", fileUploadResult);
97-
} else {
98-
log.info("No profile image upload found");
99-
}
100-
10189
Member updatedMember = memberUpdateService.update(requestMemberId, req);
10290
log.info("Updated : Member ID: {} Updated successfully with nickname: {}", updatedMember.getId(), updatedMember.getNickname());
10391

104-
MyProfileResponse myProfileResponse = MyProfileResponse.from(updatedMember, cloudStorageService.getProfileImageUrl(updatedMember.getProfileImageKey()));
92+
MyProfileResponse myProfileResponse = MyProfileResponse.from(updatedMember);
10593
log.info("Response sent: MyProfileDto : {}", myProfileResponse);
10694

10795
return ResponseEntity

0 commit comments

Comments
 (0)