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 @@ -58,11 +58,12 @@ public class LogBookService {
.build();
}

@Transactional
@Transactional(readOnly = true)
public List<LogBaseListResultDTO> getLogBooksByYearAndStatus(int year, SaveStatus status, Long userId) {

List<LogBaseInfo> logBaseInfoList;


Member member = memberService.findById(userId);

if (status == null) {
Expand All @@ -84,7 +85,7 @@ public List<LogBaseListResultDTO> getLogBooksByYearAndStatus(int year, SaveStatu

}//연도에 따라, 저장 상태(임시저장,완전저장)에 따라 로그북베이스정보 조회

@Transactional
@Transactional(readOnly = true)
public List<LogBaseListResultDTO> getLogBooks(Long userId) {

List<LogBaseInfo> logBaseInfoList = logBaseInfoRepository.findByMemberId(userId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ public class MemberServiceImpl implements MemberService {
private int gracePeriodDays;

@Override
@Transactional(readOnly = true)
public Member findMemberByEmail(String email) {
return memberRepository.findByEmail(email).orElseThrow(()-> new BusinessException(ErrorCode.EMAIL_NOT_FOUND));
}
Expand All @@ -52,18 +53,35 @@ public Member findById(Long id) {
@Override
@CacheEvict(cacheNames = com.divary.global.config.CacheConfig.CACHE_MEMBER_BY_ID, key = "#member.id", condition = "#member.id != null")
public Member saveMember(Member member) {
// If member has an ID, it might be a detached entity from cache
// Re-fetch from DB to get managed entity with proper version
if (member.getId() != null) {
Member managedMember = memberRepository.findById(member.getId())
.orElseThrow(() -> new BusinessException(ErrorCode.MEMBER_NOT_FOUND));

// Copy all fields from detached member to managed member
managedMember.setEmail(member.getEmail());
managedMember.setLevel(member.getLevel());
managedMember.setRole(member.getRole());
managedMember.setStatus(member.getStatus());
managedMember.setDeactivatedAt(member.getDeactivatedAt());

return managedMember; // JPA dirty checking will save this
}

// New entity - just save directly
return memberRepository.save(member);
}



@CacheEvict(cacheNames = com.divary.global.config.CacheConfig.CACHE_MEMBER_BY_ID, key = "#userId")
@CacheEvict(cacheNames = com.divary.global.config.CacheConfig.CACHE_MEMBER_BY_ID, key = "#userId", beforeInvocation = false)
public void updateLevel(Long userId, MyPageLevelRequestDTO requestDTO) {
Levels level = EnumValidator.validateEnum(Levels.class, requestDTO.getLevel().name());


Member member = memberRepository.findById(userId).orElseThrow(()-> new BusinessException(ErrorCode.MEMBER_NOT_FOUND));
member.setLevel(level);
// Cache evicted after successful update
}

@Override
Expand All @@ -83,7 +101,7 @@ public MyPageImageResponseDTO uploadLicense(MultipartFile image, Long userId) {

@Override
@Transactional
@CacheEvict(cacheNames = com.divary.global.config.CacheConfig.CACHE_MEMBER_BY_ID, key = "#memberId")
@CacheEvict(cacheNames = com.divary.global.config.CacheConfig.CACHE_MEMBER_BY_ID, key = "#memberId", beforeInvocation = false)
public DeactivateResponse requestToDeleteMember(Long memberId) {
Member member = memberRepository.findById(memberId).orElseThrow(()-> new BusinessException(ErrorCode.MEMBER_NOT_FOUND));

Expand All @@ -96,18 +114,20 @@ public DeactivateResponse requestToDeleteMember(Long memberId) {
.plusDays(gracePeriodDays);

return new DeactivateResponse(scheduledDeletionAt);
// Cache evicted after successful update
}

@Override
@Transactional
@CacheEvict(cacheNames = com.divary.global.config.CacheConfig.CACHE_MEMBER_BY_ID, key = "#memberId")
@CacheEvict(cacheNames = com.divary.global.config.CacheConfig.CACHE_MEMBER_BY_ID, key = "#memberId", beforeInvocation = false)
public void cancelDeleteMember(Long memberId) {
Member member = memberRepository.findById(memberId).orElseThrow(() -> new BusinessException(ErrorCode.MEMBER_NOT_FOUND));

// DEACTIVATED 상태일 때만 취소 가능
if (member.getStatus() == Status.DEACTIVATED) {
member.cancelDeletion();
}
// Cache evicted after successful update
}
@Override
@Transactional
Expand Down