코딍코딍
코딩기록
코딍코딍
전체 방문자
오늘
어제
  • 분류 전체보기 (271)
    • 개발 (2)
    • Java (1)
    • 스프링 (28)
    • JPA (11)
    • Git (3)
    • 알고리즘 (160)
      • 백준 (132)
      • 프로그래머스 (8)
      • SWEA (20)
    • 토이 프로젝트 (14)
      • 간단한 Springboot CRUD (1)
      • 게시판 프로젝트 (13)
    • 알고리즘 개념정리 (8)
    • 오류 해결 (13)
    • 보류 (0)
    • AWS (5)
    • 트러블 슈팅 (0)
    • 회고 (3)
    • CS (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

최근 글

티스토리

hELLO · Designed By 정상우.
코딍코딍

코딩기록

토이 프로젝트/게시판 프로젝트

2. 스프링 게시판 만들기 - 도메인 생성, Member 테스트(repository,service)

2022. 8. 8. 19:59

domain

Member

@Entity
@Getter @Setter
public class Member {

    @Id
    @GeneratedValue
    @Column(name = "member_id")
    private Long Id;

    @NotBlank
    private String userId;

    @NotBlank
    private String password;

    private String email;

    @OneToMany(mappedBy = "member", fetch = FetchType.LAZY)
    private List<Board> boards = new ArrayList<>();

    @Builder
    public Member(String userId, String password, String email) {
        this.userId = userId;
        this.password = password;
        this.email = email;
    }

    protected Member() {}

    public void change(Member member) {
        this.userId = member.getUserId();
        this.password = member.getPassword();
        this.email = member.getEmail();
    }
}
  • @NotBlank는 검증을 차후 검증을 위해 선언
  • Member와 Board는 일대다 관계이기에 @OneToMany 선언
    • FetchType.LAZY 지연로딩 설정
  • 수정을 위한 메서드 change() 생성

 

Board

@Entity
@Getter @Setter
public class Board {

    @Id
    @GeneratedValue
    @Column(name="board_id")
    private Long id;

    private String title;

    private String content;

    private LocalDateTime createdDate;

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "member_id")
    private Member member;

}
  • Board와 Member는 다대일 관계이기에 @ManyToOne 선언
    • FetchType.LAZY 지연로딩 설정

 

repository

MemberRepository

@Repository
public interface MemberRepository extends JpaRepository<Member, Long> {
    Member findByUserId(String userId);
}
  • JpaRepository 상속
  • findByUserId() 생성
    • MemberService에서 중복 아이디를 빠르게 찾기위해 생성하였다.

 

service

MemberService

@Service
@Transactional
@RequiredArgsConstructor
public class MemberService {
    private final MemberRepository memberRepository;

    public void createMember(Member member) {
        validateDuplicateMember(member);
        memberRepository.save(member);
    }

    public void deleteMember(Long memberId) {
        memberRepository.delete(findOne(memberId));
    }

    public void updateMember(Member member) {
        Member findMember = memberRepository.findById(member.getId()).orElseThrow(
                ()->{throw new NoSuchElementException("찾는 멤버가 존재하지 않습니다.");}
        );
        findMember.change(member);
    }

    @Transactional(readOnly = true)
    public Member findOne(Long memberId) {
        return memberRepository.findById(memberId).orElseThrow(
                ()->{throw new NoSuchElementException("찾는 멤버가 존재하지 않습니다.");}
        );
    }

    @Transactional(readOnly = true)
    public List<Member> findAll() {
        return memberRepository.findAll();
    }

    public void validateDuplicateMember(Member member) {
        Member findMember = memberRepository.findByUserId(member.getUserId());
        if(findMember!=null) {
            throw new IllegalStateException("이미 존재하는 아이디입니다.");
        }
    }
}
  • CRUD 기능 구현
  • 회원가입 시 중복된 아이디를 검증하는 로직 추가 (validateDuplicateMember)

 

Test

MemberServiceTest

@SpringBootTest
@Transactional
class MemberServiceTest {
    @Autowired
    MemberService memberService;

    @Test
    public void 생성() {
        Member member1 = new Member("aa", "bb", "as");
        memberService.createMember(member1);

        Member findMember = memberService.findOne(member1.getId());
        Assertions.assertThat(findMember).isEqualTo(member1);
    }
    
    @Test
    public void 중복() {
        Member member1 = new Member("aa", "bb", "as");
        memberService.createMember(member1);
        Member member2 = new Member("aa", "cc", "ab");

        org.junit.jupiter.api.Assertions.assertThrows(IllegalStateException.class,
                ()->memberService.createMember(member2));
    }

    @Test
    public void 삭제() {
        Member member1 = new Member("aa", "bb", "as");
        memberService.createMember(member1);

        memberService.deleteMember(member1.getId());

        org.junit.jupiter.api.Assertions.assertThrows(NoSuchElementException.class,
                ()->memberService.findOne(member1.getId()));
    }

    @Test
    public void 수정() {
        Member member1 = new Member("aa", "bb", "as");
        memberService.createMember(member1);
        member1.setPassword("cc");

        memberService.updateMember(member1);

        Member findMember = memberService.findOne(member1.getId());
        Assertions.assertThat(findMember).isSameAs(member1);
    }
}

 

'토이 프로젝트 > 게시판 프로젝트' 카테고리의 다른 글

6. 게시판 프로젝트 - 인터셉터 등록, 회원가입 폼 중복 ID 검증  (0) 2022.08.10
5. 게시판 만들기 - 회원가입 필드 오류 검증, PRG 패턴  (0) 2022.08.09
4. 스프링 게시판 만들기 - 로그인 기능1(세션) , 필드 오류 검증  (0) 2022.08.09
3. 스프링 게시판 만들기 - 컨트롤러 생성(Member), 회원가입 기능, 뷰 생성  (0) 2022.08.09
1. 스프링 게시판 만들기 - 초기 설정  (0) 2022.08.08
    '토이 프로젝트/게시판 프로젝트' 카테고리의 다른 글
    • 5. 게시판 만들기 - 회원가입 필드 오류 검증, PRG 패턴
    • 4. 스프링 게시판 만들기 - 로그인 기능1(세션) , 필드 오류 검증
    • 3. 스프링 게시판 만들기 - 컨트롤러 생성(Member), 회원가입 기능, 뷰 생성
    • 1. 스프링 게시판 만들기 - 초기 설정
    코딍코딍
    코딍코딍
    ㅎ2

    티스토리툴바