패키지 구성
URI 조립
package com.selfstudy.frame.utils;
import org.springframework.web.util.UriComponentsBuilder;
import java.net.URI;
public class UriCreator {
public static URI createUri(String defaultUrl, Long resourceId) {
return UriComponentsBuilder
.newInstance()
.path(defaultUrl + "/{resource-id}")
.buildAndExpand(resourceId)
.toUri();
}
}
Optional<Member> optionalMember = memberRepository.findByEmail(member.getEmail());
// TODO: 밑에 코드 말고 사용자 정의 예외 처리해도 돌아가는지 확인
// if (optionalMember.isPresent()) throw new ResponseStatusException(HttpStatus.CONFLICT);
if (optionalMember.isPresent()) throw new BusinessLogicException(ExceptionCode.MEMBER_EXISTS);
passwordEncoder
Bean 생성@Bean
public PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
String encryptedPassword = passwordEncoder.encode(member.getPassword());
member.setPassword(encryptedPassword);
member.setName(member.getName());
member.setEmail(member.getEmail());
member.setBio(member.getBio());
Member savedMember = memberRepository.save(member);
return savedMember;
public Member updateMember(Member member) {
Optional<Member> optionalMember = memberRepository.findByEmail(member.getEmail());
Member fm = optionalMember.orElseThrow(() -> new BusinessLogicException(ExceptionCode.MEMBER_NOT_FOUND));
Optional.ofNullable(member.getBio()).ifPresent(bio -> fm.setBio(member.getBio()));
return memberRepository.save(fm);
}
@Transactional(readOnly = true)
public Member findMember(Long memberId) {
Optional<Member> optionalMember = memberRepository.findById(memberId);
Member fm = optionalMember.orElseThrow(() -> new BusinessLogicException(ExceptionCode.MEMBER_EXISTS));
return fm;
}
public Page<Member> findMembers(Integer page, Integer size) {
return memberRepository.findAll(PageRequest.of(page, size, Sort.by("memberId").descending()));
}
@PostMapping
public ResponseEntity postMember(@Valid @RequestBody MemberDto.Post requestBody) {
Member member = mapper.memberPostToMember(requestBody);
Member createdMember = memberService.createMember(member);
URI location = UriCreator.createUri(MEMBER_DEFAULT_URL, createdMember.getMemberId());
return ResponseEntity.created(location).build();
}
@PatchMapping
public ResponseEntity patchMember(@PathVariable("member-id") @Positive long memberId,
@Valid @RequestBody MemberDto.Patch patchDto) {
patchDto.setMemberId(memberId);
Member member = memberService.updateMember(mapper.memberPatchToMember(patchDto));
return ResponseEntity.ok(mapper.memberToMemberResponse(member));
}
@GetMapping("/{member-id}")
public ResponseEntity getMember(@PathVariable("member-id") @Positive long memberId) {
Member member = memberService.findMember(memberId);
MemberDto.Response response = mapper.memberToMemberResponse(member);
return ResponseEntity.ok(new SingleResponseDto<>(response));
}
@GetMapping
public ResponseEntity getMembers(@Positive @RequestParam Integer page,
@Positive @RequestParam Integer size) {
Page<Member> pageMembers = memberService.findMembers(page - 1, size);
List<Member> members = pageMembers.getContent();
return ResponseEntity.ok(new MultiResponseDto(mapper.membersToMemberResponses(members), pageMembers));
}