[Spring] 쇼핑몰 회원가입, 상품등록 구현

이신영·2024년 3월 26일
0

S0S

목록 보기
2/8
post-thumbnail

자세한 코드는 깃허브에!

구현 방안

우선 프로젝트는 최대한 중간중간 걸리는게 없도록 큰 테를 만든 다음 상세 기능을 채우자는 생각이다. 하나의 기능을 깊게 깊게 구현하다보면 엔티티간 관계라던지 수정에 용이하지않았던 경험이 있기때문이다. 특히 로그인 기능을 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("이미 존재하는 아이디입니다.");
                });
    }

}
  • DTO 활용
  • 권한 추가
  • 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);
    }

}
  • DTO 활용

해야할 것

  • 파일 업로드 기능 추가

검증


보안할 것

  • 엔티티에 각 필드별로 유효성검사 추가
profile
후회하지 않는 사람이 되자 🔥

0개의 댓글