[그림일기 서비스 보고 공부하기] User 엔티티 고민 - create 메서드, 테이블명 단수 vs 복수

오젼·2024년 10월 5일
0
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Where(clause = "deleted_at is null")
public class User extends BaseEntityWithUpdate {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long userId;

    @NotNull
    @Column(nullable = false)
    private String email;

    @NotNull
    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private SocialCode socialCode;

    private LocalDateTime lastDiaryDate;

    @Enumerated(EnumType.STRING)
    private UserRole userRole;

    private LocalDateTime deletedAt;

    @Builder(access = AccessLevel.PRIVATE)
    private User(String email, SocialCode socialCode) {
        this.email = email;
        this.socialCode = socialCode;
        this.userRole = UserRole.USER;
    }

    public static User create(String email, SocialCode socialCode) {
        return User.builder()
            .email(email)
            .socialCode(socialCode)
            .build();
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setLastDiaryDate(LocalDateTime date) {
        this.lastDiaryDate = date;
    }

    public void deleteUser() {
        this.deletedAt = LocalDateTime.now();
    }

    public boolean checkDrawLimit() {
        return this.getLastDiaryDate() == null
            || !this.getLastDiaryDate().toLocalDate().equals(LocalDate.now());
    }

    public boolean isAdmin() {
        return this.userRole == UserRole.ADMIN;
    }
}

저번에 Soft delete에 대한 건 찾아봤었고
create 메서드를 쓰는 것, table 이름을 어떻게 할지에 대해 고민을 해봤다.

일단 create 메서드는 굳이 필요하지 않은 것 같다. 아래는 김영한님 답변

https://www.inflearn.com/community/questions/16235/생성-메서드-setter-질문

그냥 생성자를 만들기로 했다.

그리고 table 이름.
아니 전에 찾아보기로는 table명은 의미상 복수로 하는 것이 낫다는 걸 본 적이 있던 것 같은데, 다시 보니 그냥 단수로 쓰는 게 나아 보인다.

복수 vs 단수는 사실 정답이 있다기 보다 의견이 갈리는 주제인데 글들을 찾다 보니 단수가 더 나은 것 같았다. Entity 클래스에 굳이 @Table(name = "users")를 해 줄 필요도 없고..

https://velog.io/@drypot/Table-Name
https://stackoverflow.com/questions/5290609/what-is-the-best-practice-in-naming-your-user-table

0개의 댓글