본문 바로가기

프로젝트/멋사 개인 프로젝트 (mutsa-SNS)

[06] mutsa-SNS 3일차 - (1) User 수정

1. UserRole type 수정

post 작성 기능을 만들기 전 User Entity에서 userRole을 enum에서 string으로 변경했던 것이 생각이 났다.

그 때에는 계속 db에 enum의 name이 들어가지 않고, index가 들어갔었는데, 이는 User에서 column지정을 할 때 어노테이션을 붙여주지 않았기 때문으로 추정된다.

@Enumerated(EnumType.STRING)
private UserRole role;

 

ERD에서 요청했던 사항은 userRole을 enum으로 설정하라 지시하였기 때문에, 그것이 맞는 것 같아 다시 enum으로 고쳐주었다.

그 과정에서 ADMIN과 USER를 구분하는 것을 int index로 enum에서의 순서대로 지정해 주었다.

 

UserService

int index = 1;

//db에 유저가 아무도 없을 때, 새로 생성되는 계정을 admin으로
if (userRepository.count() == 0) {
    index = 0;
}

User savedUser = userRepository.save(req.toEntity(encoder.encode(req.getPassword()), index, registeredAt));

UserJoinRequest

public User toEntity(String password, int index, Timestamp time) {
    return User.builder()
            .userName(this.userName)
            .password(password)
            .role(UserRole.values()[index])
            .registeredAt(time)
            .updatedAt(time)
            .build();
}

지정 후 로컬에서 실행해 본 결과 UserRole이 제대로 db에 저장되는 것을 확인 할 수 있었다.

My SQL db의 user table 내용

 

또한 앞으로 만들 기능에 중복되는 column인 생성시간이랑 수정시간을 따로 BaseEntity에 빼고, 자동 시간 입력을 위한 Auduit  적용을 해 보았다.

 

2. BaseEntity 생성

Configuration

JpaAuditingConfig

@Configuration
@EnableJpaAuditing
public class JpaAuditingConfig {
}

Auditing을 위한 configuration class를 생성해 주었다.

 

Domain

BaseEntity

@Getter
@Setter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@ToString
public class BaseEntity {

    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime createdAt;

    @LastModifiedDate
    @Column
    private LocalDateTime lastModifiedAt;
}

User

@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Table(name = "user")
@Entity
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class User extends BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String password;
    @Enumerated(EnumType.STRING)
    private UserRole role;
    @Column(unique = true)
    private String userName;

}

BaseEntity를 extend하도록 설정하였다. 앞으로 만들 Entity들은 모두 BaseEntity를 extend하도록 설정한다.