[Web_3] STUSSY CLONE PROJECT 3 😿

08627Β·2022λ…„ 10μ›” 3일
2

Spring

λͺ©λ‘ 보기
11/13
post-thumbnail


🐾 Service : Register

🐾 Service : Register 둜직 κ΅¬ν˜„


▫️ AccountService.java
- νšŒμ›μ •λ³΄κ°€ 없을 λ•Œ νšŒμ›κ°€μž… κ°€λŠ₯함.

public interface AccountService {
    public boolean checkDuplicateEmail(String email);
    public boolean register(RegisterReqDto registerReqDto) throws Exception;
}

▫️ AccountRepository.java

@Mapper
public interface AccountRepository {
    public int save(User user);
    public User findUserByEmail(String Email);
}

▫️ account.xml β†’ AccountRepository.java κ΅¬ν˜„

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.stussy.stussy.projectname.repository.AccountRepository">

    <insert id="save" parameterType="com.stussy.stussy.projectname.domain.User">    
        insert into
        	user_mst
        values(
            0, <!-- auto increment -->
            #{username},
            #{oauth_username},
            #{password},
            #{name},
            #{email},
            #{provider},
            #{role_id},
            now(),
            now()
        )
    </insert>


    <resultMap id="role" type="com.stussy.stussy.projectname.domain.Role">
        <result property="id" column="id"></result>
        <result property="role" column="role"></result>
        <result property="role_name" column="role_name"></result>
    </resultMap>
  
    <resultMap id="user" type="com.stussy.stussy.projectname.domain.User">
        <result property="id" column="id"></result>
        <result property="username" column="username"></result>
        <result property="oauth_username" column="oauth_username"></result>
        <result property="password" column="password"></result>
        <result property="name" column="name"></result>
        <result property="email" column="email"></result>
        <result property="provider" column="provider"></result>
        <result property="role_id" column="role_id"></result>
        <result property="create_date" column="create_date"></result>
        <result property="update_date" column="update_date"></result>
      
        βœ”οΈ<collection property="role" column="role"></collection>
    </resultMap>

    <select id="findUserByEmail" parameterType="String" resultMap="user">
        select
            um.id,
            um.username,
            um.oauth_username,
            um.password,
            um.name,
            um.email,
            um.provider,
            um.role_id,

            rm.role,
            rm.role_name,

            um.create_date,
            um.update_date

        from
            user_mst um
            left outer join role_mst rm on (rm.id = um.role_id)

        where
            email = #{email}
    </select>

</mapper>

resultMap μ‚¬μ΄μ—μ„œ μ—°κ΄€ 관계가 μžˆλŠ” 경우 Collection 으둜 μ—¬λŸ¬ 값을 같이 가져와 resultMap을 μ€‘μ²©ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλ‹€. (β†’ μ„œλΈŒμΏΌλ¦¬ 처럼 μ‚¬μš©κ°€λŠ₯ν•œ κ²ƒμž„)

➑️ User 클래슀의 role 의 κ°’μœΌλ‘œ Role 클래슀의 role 값을 κ°€μ Έμ˜¨λ‹€.


▫️ AccountServiceImpl.java

@Service
@RequiredArgsConstructor
public class AccountServiceImpl implements AccountService{

    private final AccountRepository accountRepository;

    @Override
    public boolean checkDuplicateEmail(String email) {

        User user = accountRepository.findUserByEmail(email); 
        // ➑️ κ²°κ³Όκ°€ Null 이어야 μ‹ κ·œ 등둝 κ°€λŠ₯
        if(user != null) { 
            Map<String, String> errorMap = new HashMap<String, String>();
            errorMap.put("duplicateFlag", "이미 κ°€μž…λœ μ΄λ©”μΌμž…λ‹ˆλ‹€");
            throw new CustomValidationException("DuplicateEmail Error", errorMap);
        }
        // λ‚˜λ¨Έμ§€ -> Null 인 경우 : true둜 리턴
        return true;
    }

    @Override
    public boolean register(RegisterReqDto registerReqDto) throws Exception {
    	// ⭐ DTO둜 받은 μœ μ € 정보λ₯Ό User 객체둜 λ°”κΎΈμ–΄μ„œ 등둝함. 
        User userEntity = registerReqDto.toUserEntity();
        int result = accountRepository.save(userEntity);

        return result != 0;
    }
}

▫️ AccountApi.java
➑️ ajax 둜 받은 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” API

@Slf4j
@RequestMapping("/api/account")
@RestController
@RequiredArgsConstructor
public class AccountApi {
    private final AccountService accountService;

    @LogAspect
    @ValidAspect
    @PostMapping("/register")
    public ResponseEntity<?> register(@Validated(ValidationSequence.class) @RequestBody RegisterReqDto registerReqDto, BindingResult bindingResult) throws Exception {

        accountService.checkDuplicateEmail(registerReqDto.getEmail());
        accountService.register(registerReqDto);

        return ResponseEntity.ok().body(new CMRespDto<>(1, "Successfully registered", registerReqDto));
    }
}



πŸ“’ μ†Œκ° 😿
μ΄λ²ˆμ— μƒˆλ‘œ λ‚˜μ˜¨ 짱ꡬλ₯Ό λƒ…λ”° 보러 κ°”λ‹€ μ™”λ‹€ ν•˜ λ„ˆλ¬΄λ„ˆλ¬΄ κ·€μ—½κ³  μž¬λ°ŒλŠ” .
근데 사싀 뒀에 앉은 μ• κΈ°λž‘ μ•žμ— 앉은 남고딩 두녀석이 λ„ˆλ¬΄ λ– λ“€μ–΄μ„œ 쑰금 ν™”λ‚¬μŒ λ‹˜λ“€ μ•ˆλ°©μ΄ μ•„λ‹ˆλΌκ΅¬μš” (╯‡░′)╯︡┻━┻
개천절의 μ‘°μ‘°λŠ” 지μ˜₯μ΄μ—ˆλ˜ 것이닀
κ·Έλž˜λ„ λΉ‘μ§‘μ€‘ν•΄μ„œ μ—΄μ‹¬νžˆ 보고 νŠΉμ „ λ§ˆμš°μŠ€νŒ¨λ“œλ„ 읃어왔닀
λ‚˜ 또 담주에 μΉ­κ΅¬λž‘ 또 ν•œ 번 λ³΄λŸ¬κ°ˆλ“― πŸ₯° γ…Žγ…Žγ…Žγ…Ž

0개의 λŒ“κΈ€