Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -147,18 +147,20 @@ public Page<FontResponse> getFonts(Long memberId, int page, int size) {
PageRequest pageRequest = PageRequest.of(page, size, sort);

Page<Font> fontPage = fontRepository.findAllByMemberIdAndStatus(memberId, pageRequest, FontStatus.DONE);
log.debug("Service detail: Found {} fonts on page {} for member ID: {}",
log.debug("Service detail: Found {} fonts on page {} for member ID: {}",
fontPage.getNumberOfElements(), page, memberId);

Page<FontResponse> result = fontPage.map(font -> {
boolean bookmarked = bookmarkRepository.existsByMemberIdAndFontId(memberId, font.getId());
Member writer = memberLookupService.getOrThrowById(font.getMemberId());
String writerNickname = memberLookupService.findById(font.getMemberId())
.map(Member::getNickname)
.orElse("알 수 없는 사용자");
String woff2Url = cloudStorageService.getWoff2Url(font.getKey());
return FontResponse.from(font, bookmarked, writer.getNickname(), woff2Url);
return FontResponse.from(font, bookmarked, writerNickname, woff2Url);
});

log.info("Service completed: Retrieved {} fonts out of {} total for member ID: {}",

log.info("Service completed: Retrieved {} fonts out of {} total for member ID: {}",
result.getNumberOfElements(), result.getTotalElements(), memberId);
return result;
}
Expand All @@ -169,16 +171,18 @@ public FontResponse getFont(Long fontId, Long memberId) {
log.info("Service executing: Fetching font details for font ID: {}", fontId);
Font targetFont = getOrThrowById(fontId);
checkFontStatusIsDone(targetFont);
Member writer = memberLookupService.getOrThrowById(targetFont.getMemberId());
String writerNickname = memberLookupService.findById(targetFont.getMemberId())
.map(Member::getNickname)
.orElse("알 수 없는 사용자");

boolean isBookmarked = false;
if (memberId != null) {
isBookmarked = bookmarkRepository.existsByMemberIdAndFontId(memberId, fontId);
}
String woff2Url = cloudStorageService.getWoff2Url(targetFont.getKey());
FontResponse fontResponse = FontResponse.from(targetFont, isBookmarked, writer.getNickname(), woff2Url);
FontResponse fontResponse = FontResponse.from(targetFont, isBookmarked, writerNickname, woff2Url);

log.info("Service completed: Retrieved font details for font ID: {} with name: {}",
log.info("Service completed: Retrieved font details for font ID: {} with name: {}",
fontId, targetFont.getName());

return fontResponse;
Expand All @@ -202,9 +206,9 @@ public FontDeleteResponse delete(Long memberId, Long fontId) {

@Override
public Page<FontPageResponse> getFontPage(Long memberId, int page, int size, String sortBy, String keyword) {
log.info("Service executing: Fetching font page with memberId: {}, page: {}, size: {}, sortBy: {}, keyword: {}",
log.info("Service executing: Fetching font page with memberId: {}, page: {}, size: {}, sortBy: {}, keyword: {}",
memberId, page, size, sortBy, keyword);

Sort sort = Sort.by(Sort.Order.desc("createdAt"));
if ("downloadCount".equalsIgnoreCase(sortBy)) {
sort = Sort.by(Sort.Order.desc("downloadCount"));
Expand All @@ -221,26 +225,30 @@ public Page<FontPageResponse> getFontPage(Long memberId, int page, int size, Str
log.debug("Service detail: Searching fonts with keyword: {}", keyword);
fontPage = fontRepository.findByNameContainingAndStatus(keyword, pageRequest, FontStatus.DONE);
}

log.debug("Service detail: Found {} fonts on page {}", fontPage.getNumberOfElements(), page);

Page<FontPageResponse> result;
if (memberId == null) {
result = fontPage.map(font -> {
Member member = memberLookupService.getOrThrowById(font.getMemberId());
String writerNickname = memberLookupService.findById(font.getMemberId())
.map(Member::getNickname)
.orElse("알 수 없는 사용자");
String woff2Url = cloudStorageService.getWoff2Url(font.getKey());
return FontPageResponse.from(font, member.getNickname(), false, woff2Url);
return FontPageResponse.from(font, writerNickname, false, woff2Url);
});
} else {
result = fontPage.map(font -> {
Member member = memberLookupService.getOrThrowById(font.getMemberId());
String writerNickname = memberLookupService.findById(font.getMemberId())
.map(Member::getNickname)
.orElse("알 수 없는 사용자");
boolean bookmarked = bookmarkRepository.existsByMemberIdAndFontId(memberId, font.getId());
String woff2Url = cloudStorageService.getWoff2Url(font.getKey());
return FontPageResponse.from(font, member.getNickname(), bookmarked, woff2Url);
return FontPageResponse.from(font, writerNickname, bookmarked, woff2Url);
});
}
log.info("Service completed: Retrieved {} fonts out of {} total, {} pages",

log.info("Service completed: Retrieved {} fonts out of {} total, {} pages",
result.getNumberOfElements(), result.getTotalElements(), result.getTotalPages());
return result;
}
Expand All @@ -261,12 +269,14 @@ public List<FontResponse> getOtherFonts(Long fontId) {
List<FontResponse> result = fonts.stream()
.map(f -> {
boolean bookmarked = bookmarkRepository.existsByMemberIdAndFontId(member.getId(), f.getId());
Member writer = memberLookupService.getOrThrowById(f.getMemberId());
String woff2Url = cloudStorageService.getWoff2Url(font.getKey());
return FontResponse.from(f, bookmarked, writer.getNickname(), woff2Url);
String writerNickname = memberLookupService.findById(f.getMemberId())
.map(Member::getNickname)
.orElse("알 수 없는 사용자");
String woff2Url = cloudStorageService.getWoff2Url(f.getKey());
return FontResponse.from(f, bookmarked, writerNickname, woff2Url);
})
.collect(Collectors.toList());

log.info("Service completed: Retrieved {} other fonts from creator of font ID: {}", result.size(), fontId);
return result;
}
Expand All @@ -283,12 +293,14 @@ public List<FontResponse> getMyPopularFonts(Long memberId) {
List<FontResponse> result = fonts.stream()
.map(font -> {
boolean bookmarked = bookmarkRepository.existsByMemberIdAndFontId(member.getId(), font.getId());
Member writer = memberLookupService.getOrThrowById(font.getMemberId());
String writerNickname = memberLookupService.findById(font.getMemberId())
.map(Member::getNickname)
.orElse("알 수 없는 사용자");
String woff2Url = cloudStorageService.getWoff2Url(font.getKey());
return FontResponse.from(font, bookmarked, writer.getNickname(), woff2Url);
return FontResponse.from(font, bookmarked, writerNickname, woff2Url);
})
.collect(Collectors.toList());

log.info("Service completed: Retrieved {} popular fonts for member ID: {}", result.size(), memberId);
return result;
}
Expand All @@ -304,23 +316,27 @@ public List<FontResponse> getPopularFonts(Long memberId) {
if (memberId == null) {
result = fonts.stream()
.map(font -> {
Member writer = memberLookupService.getOrThrowById(font.getMemberId());
String writerNickname = memberLookupService.findById(font.getMemberId())
.map(Member::getNickname)
.orElse("알 수 없는 사용자");
String woff2Url = cloudStorageService.getWoff2Url(font.getKey());
return FontResponse.from(font, false, writer.getNickname(), woff2Url);
return FontResponse.from(font, false, writerNickname, woff2Url);
})
.collect(Collectors.toList());
} else {
Member member = memberLookupService.getOrThrowById(memberId);
result = fonts.stream()
.map(font -> {
boolean bookmarked = bookmarkRepository.existsByMemberIdAndFontId(member.getId(), font.getId());
Member writer = memberLookupService.getOrThrowById(font.getMemberId());
String writerNickname = memberLookupService.findById(font.getMemberId())
.map(Member::getNickname)
.orElse("알 수 없는 사용자");
String woff2Url = cloudStorageService.getWoff2Url(font.getKey());
return FontResponse.from(font, bookmarked, writer.getNickname(), woff2Url);
return FontResponse.from(font, bookmarked, writerNickname, woff2Url);
})
.collect(Collectors.toList());
}

log.info("Service completed: Retrieved {} globally popular fonts", result.size());
return result;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

import org.fontory.fontorybe.member.domain.Member;

import java.util.Optional;

public interface MemberLookupService {
Member getOrThrowById(Long id);
boolean existsByNickname(String nick);
Optional<Member> findById(Long id);
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public Member getOrThrowById(Long id) {

/**
* 특정 닉네임이 이미 사용 중인지 확인
*
*
* @param targetName 확인할 닉네임
* @return 사용 중이면 true, 사용 가능하면 false
*/
Expand All @@ -60,4 +60,25 @@ public boolean existsByNickname(String targetName) {
log.debug("Nickname existence check result: nickname={}, exists={}", targetName, exists);
return exists;
}

/**
* ID로 회원을 조회하고, 존재하지 않으면 Optional.empty() 반환
*
* @param id 조회할 회원 ID
* @return 조회된 회원 정보를 담은 Optional
*/
@Override
@Transactional(readOnly = true)
public Optional<Member> findById(Long id) {
log.debug("Looking up member by ID (optional): memberId={}", id);
if (id == null) {
log.debug("Member lookup skipped: memberId is null");
return Optional.empty();
}
Optional<Member> member = memberRepository.findById(id);
if (member.isEmpty()) {
log.debug("Member not found: memberId={}", id);
}
return member;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

public class FakeMemberLookupService implements MemberLookupService {
private final Map<Long, Member> members = new HashMap<>();
Expand All @@ -25,6 +26,11 @@ public boolean existsByNickname(String nickname) {
.anyMatch(member -> member.getNickname().equals(nickname));
}

@Override
public Optional<Member> findById(Long id) {
return Optional.ofNullable(members.get(id));
}

// Test helper methods
public void addMember(Member member) {
members.put(member.getId(), member);
Expand Down
Loading