프로젝트/만남형 SNS

4 회원정보수정

_Min 2021. 6. 5. 23:25

회원정보수정 Dto

import com.post_show_blues.vine.domain.member.Member;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@Builder
@ToString
public class MemberUpdateDto {
    private String text;
    private String instaurl;
    private String twitterurl;

    public Member toEntity() {
        return Member.builder()
                .text(text)
                .instaurl(instaurl)
                .twitterurl(twitterurl)
                .build();
    }
}

우리 서비스에서 수정 가능한 게 instaurl이랑 twitterurl, text(자기소개)라 해당 부분만 dto로 받아 넘긴다

 

 

import com.post_show_blues.vine.domain.member.Member;
import com.post_show_blues.vine.domain.member.MemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;


//회원 정보 수정
@RequiredArgsConstructor
@Service
public class MemberService {

    private final MemberRepository memberRepository;

    /**
     * 회원 정보 수정
     */
    @Transactional
    public Member memberUpdate(Long id, Member member){
        // 1. 영속화
        Member memberEntity = memberRepository.findById(id).orElseThrow(() ->{
                return new IllegalArgumentException("찾을 수 없는 id입니다");
        });

        memberEntity.setInstaurl(member.getInstaurl());
        memberEntity.setTwitterurl(member.getTwitterurl());
        memberEntity.setText(member.getText());

        return memberEntity;
    }
}

.findById()

.findById()로 찾아오면 Optional 객체로 리턴된다

Optional 객체에서 자주 쓰이는 메소드는 두 가지이다.

1. get() : 찾음

2. orElseThrow() : 못찾으면 익셉션을 발동하라

입력한 id에 해당하는 멤버가 없을 시 익셉션을 발동하게 된다

 

영속성 컨텍스트

JPA를 사용하면 우리 서버와 DB 사이에 영속성 컨텍스트라는 Layer가 하나 추가돼 persist() 하기 전에는 거기서 entity를 관리한다

memberUpdate 메소드에서 set()을 통해 entity에 변화를 줬으니 영속성 컨텍스트에 반영이 되고, DB에는 해당 메소드가 끝났을때 저장되게 되는 것 같다.

 

 

회원정보 수정 테스트

import com.post_show_blues.vine.domain.member.Member;
import com.post_show_blues.vine.dto.Auth.SignupDto;
import com.post_show_blues.vine.dto.member.MemberUpdateDto;
import org.assertj.core.api.Assertions;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;

@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
public class MemberServiceTest {
    @Autowired MemberService memberService;
    @Autowired AuthService authService;

    @Test
    public void 회원정보수정() throws Exception {
        //given
        SignupDto memberEntityA = createSignupDto();
        Member memberA = authService.join(memberEntityA.toEntity());
        MemberUpdateDto memberUpdateDto = createMemberUpdateDto();


        //when
        Member updateMember = memberService.memberUpdate(memberA.getId(), memberUpdateDto.toEntity());

        //then
        Assertions.assertThat(updateMember.getInstaurl()).isEqualTo(memberUpdateDto.getInstaurl());


    }

    SignupDto createSignupDto(){
        return SignupDto.builder()
                .name("memberB")
                .email("member@duksung.ac.kr")
                .nickname("memberNickname")
                .password("1111")
                .phone("010-0000-0000")
                .university("덕성대학교")
                .build();
    }

    MemberUpdateDto createMemberUpdateDto(){
        return MemberUpdateDto.builder()
                .text("안녕하세요")
                .instaurl("https://www.instagram.com/dlwlrma/?hl=ko")
                .twitterurl("https://twitter.com/BTS_twt?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor")
                .build();
        }

}

 

 

초록색은 세상에서 가장 아름다운 색인 것 같다

김영한님 강의에서 초록색이 뜨면 마음에 평안이 온다고 하셨는데 왜 그러셨는지 시간이 갈수록 이해가 된다

 

 

 

코드 깃헙 주소 https://github.com/JMine97/vine

참고 강의 https://www.easyupclass.com/course/218/about

728x90