[SELF Mini Project -4] Member CRUD 구현(MemberController, MemberService) + URICreator

현이·2023년 12월 12일
0

Self Study

목록 보기
4/5

URICreator 패키지, Class 생성

  • 패키지 구성

  • 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();
    }
}

MemberService 생성

  • 기본 틀

createMember()

  • 사용자 정의 예외처리로 이미 존재하는 회원인지 먼저 확인
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로 비밀번호 encrypt
    -> config에 passwordEncoder Bean 생성
@Bean
public PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
  • encrypt한 비밀번호 Member에 저장(set)
String encryptedPassword = passwordEncoder.encode(member.getPassword());
member.setPassword(encryptedPassword);
  • member 초기화해서 Repository에 저장
member.setName(member.getName());
member.setEmail(member.getEmail());
member.setBio(member.getBio());

Member savedMember = memberRepository.save(member);
        
return savedMember;

updateMember()

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);
    }

findMember() & findMembers()

@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()));
}

MemberController 생성

postMember()

@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();
}

patchMember()

@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));
}

getMember() & getMembers()

@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));
}

0개의 댓글