자세한 코드는 깃허브에!
우선 프로젝트는 최대한 중간중간 걸리는게 없도록 큰 테를 만든 다음 상세 기능을 채우자는 생각이다. 하나의 기능을 깊게 깊게 구현하다보면 엔티티간 관계라던지 수정에 용이하지않았던 경험이 있기때문이다. 특히 로그인 기능을 Spring Security로 구현할거라서 가장 마지막에 구현하고자 하는데 왜냐면 사용자의 닉네임을 활용해서 게시글을 올리거나 여러가지 기능들이 쓰일거니까? 뷰는 포스트맨으로 일단 대체하겠다!
@Service
@RequiredArgsConstructor
public class MemberServiceImpl implements MemberService {
private final MemberRepository memberRepository;
@Override
public void join(MemberDTO memberDTO) {
if(memberDTO==null){
throw new IllegalArgumentException("회원 정보가 유효하지 않습니다.");
}
Role role = Role.USER;
if(memberDTO.getUsername().equals("admin")){
role = Role.ADMIN;
}
Member member = Member.builder()
.username(memberDTO.getUsername())
.password(memberDTO.getPassword())
.nickname(memberDTO.getNickname())
.email(memberDTO.getEmail())
.gender(memberDTO.getGender())
.role(role)
.build();
validateDuplicateMember(member);
memberRepository.save(member);
}
private void validateDuplicateMember(Member member){
memberRepository.findByUsername(member.getUsername())
.ifPresent(findMember -> {
throw new IllegalStateException("이미 존재하는 아이디입니다.");
});
}
}
validateDuplicateMember
로 아이디 중복확인하고 넣어주기@Service
@RequiredArgsConstructor
public class ProductServiceImpl implements ProductService{
final private ProductRepository productRepository;
@Override
public void uploadProduct(ProductDTO productDTO){
if(productDTO==null){
throw new IllegalArgumentException("상품정보가 유효하지 않습니다.");
}
Product product = Product.builder()
.productName(productDTO.getProductName())
.category(productDTO.getCategory())
.writerName(productDTO.getWriterName())
.price(productDTO.getPrice())
.description(productDTO.getDescription())
.build();
productRepository.save(product);
}
}