[SpringBoot] 회원 서비스 구현하기 (1) - UserEntity, UserRepository

구민지·2023년 11월 14일
0
post-thumbnail

☁️ 토이 프로젝트 개발일지

개발동아리에서 토이 프로젝트로 회원가입, 회원정보 변경, 회원탈퇴 등의 기능을 담당하게 되었다! 내가 담당한 부분을 개발한 기록을 해보려고 한다 😀

✨ 담당한 기능

  1. 회원가입
  2. 이메일 중복확인
  3. 닉네임 중복확인
  4. 비밀번호 암호화
  5. 닉네임 변경
  6. 전화번호 변경
  7. 비밀번호 변경
  8. 회원 탈퇴

✨ UserEntity

import jakarta.persistence.*;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;

import java.time.LocalDateTime;
import java.util.Objects;

@Entity
@Table(name = "User")
@NoArgsConstructor
@Getter
public class UserEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotNull
    private String email;

    @NotNull
    private String password;

    @Size(min = 2, max = 8)
    @NotNull
    private String nickname;

    @Size(max = 11)
    @NotNull
    private String phone;

    @CreationTimestamp
    private LocalDateTime created_at;

    @Builder
    public UserEntity(String email, String password, String nickname, String phone) {
        this.email = email;
        this.password = password;
        this.nickname = nickname;
        this.phone = phone;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (!(obj instanceof UserEntity userEntity)) return false;

        return Objects.equals(this.email, userEntity.getEmail()) &&
                Objects.equals(this.nickname, userEntity.getNickname());
    }

    @Override
    public int hashCode() {
        return Objects.hash(email, nickname);
    }

먼저 User table엔 기본적으로 email,password,nickname,phone 등의 필드가 있다.
닉네임과 전화번호는 @Size어노테이션을 사용해서 글자수 제한을 설정한다.

✨ UserRepository

import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface UserRepository extends JpaRepository<UserEntity,Long> {
    Optional<UserEntity> findByEmail(String email);
    Optional<UserEntity> findByNickname(String nickname);

}

다음으로 UserRepository이다.
JpaRepository<EntityType,PK type>를 상속받아 기본적인 CRUD 기능을 사용할 수 있도록한다.

추후 회원가입 과정에서 이미 존재하는 이메일인지, 이미 존재하는 닉네임인지 중복확인을 하기 위해서 findByEmail , findByNickname을 만들어준다.

그리고 이러한 findByEmail , findByNickname의 리턴값은 있을수도 있고 없을수도 있음으로(존재하지않는 이메일, 존재하지 않는 닉네임인 경우) Optional로 설정했다.

0개의 댓글