개발일지

member-service

준서이 2024. 4. 11. 16:49
package com.example.totalproject.Service;

import com.example.totalproject.DTO.MemberDTO;
import com.example.totalproject.Entity.MemberEntity;
import com.example.totalproject.Repository.MemberRepository;
import lombok.RequiredArgsConstructor;
import org.modelmapper.ModelMapper;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;

import java.util.Optional;

@Service
@RequiredArgsConstructor
public class MemberService {
    private final MemberRepository memberRepository;
    private final ModelMapper modelMapper = new ModelMapper();
    private final PasswordEncoder passwordEncoder;

    //삽입
    public void memberSave(MemberDTO memberDTO) {
        //기존 사용하는 아이디를 조회
        Optional<MemberEntity> read = memberRepository
                .findByUserid(memberDTO.getUserid());
        
        if(read.isEmpty()) { //읽어온 값이 없으면(기존 사용하는 아이디가 존재하지 않으면)
            
            MemberEntity memberEntity = modelMapper.map(memberDTO,
                    MemberEntity.class);
            memberRepository.save(memberEntity);
        }
    }

    //수정
    public void memberModify(MemberDTO memberDTO) {
        //비밀번호 처리 및 암호화를 작업 추가
        Optional<MemberEntity> read = memberRepository.findById(memberDTO.getId());
        //비밀번호가 없거나, 길이가 0이면
        if(memberDTO.getPassword() != null || memberDTO.getPassword().length() == 0) {
            memberDTO.setPassword(read.get().getPassword());
        } else {
            memberDTO.setPassword(passwordEncoder.encode(memberDTO.getPassword()));
        }

        MemberEntity memberEntity = modelMapper.map(memberDTO,
                MemberEntity.class);
        memberRepository.save(memberEntity);
    }
    //삭제
    public void memberRemove(int id) {
        memberRepository.deleteById(id);
    }
    //조회
    public Page<MemberDTO> memberList(Pageable page) {
        int cutPage = page.getPageNumber()-1;
        int pageCnt = 10;
        Pageable pageable = PageRequest.of(cutPage, pageCnt,
                Sort.by(Sort.Direction.DESC, "id"));
        Page<MemberEntity> memberEntities = memberRepository.findAll(pageable);
        Page<MemberDTO> memberDTOS = memberEntities.map(data->
                modelMapper.map(data, MemberDTO.class));
        return memberDTOS;
    }
    //개별조회
    public MemberDTO memberRead(int id) {
        Optional<MemberEntity> memberEntity = memberRepository.findById(id);
        MemberDTO memberDTO = modelMapper.map(memberEntity, MemberDTO.class);
        return memberDTO;
    }
}