From d813239917abc9a376243e4a4d62a3e4eab7edfe Mon Sep 17 00:00:00 2001 From: ybchar Date: Sat, 6 Apr 2024 03:01:34 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=ED=9A=8C=EC=9B=90=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0=20=EA=B5=AC=ED=98=84(1=EC=B0=A8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../daybook/domain/auth/controller/.gitkeep | 0 .../unit/daybook/domain/auth/service/.gitkeep | 0 .../domain/common/model/BaseTimeEntity.java | 26 +++++++ .../daybook/domain/member/controller/.gitkeep | 0 .../daybook/domain/member/domain/Member.java | 74 +++++++++++++++++++ .../domain/member/domain/MemberRole.java | 13 ++++ .../domain/member/domain/MemberStatus.java | 14 ++++ .../domain/member/domain/OauthInfo.java | 33 +++++++++ .../domain/member/dto/request/.gitkeep | 0 .../domain/member/dto/response/.gitkeep | 0 .../member/repository/MemberRepository.java | 8 ++ .../repository/MemberRepositoryCustom.java | 4 + .../repository/MemberRepositoryImpl.java | 10 +++ 13 files changed, 182 insertions(+) create mode 100644 src/main/java/com/unit/daybook/domain/auth/controller/.gitkeep create mode 100644 src/main/java/com/unit/daybook/domain/auth/service/.gitkeep create mode 100644 src/main/java/com/unit/daybook/domain/common/model/BaseTimeEntity.java create mode 100644 src/main/java/com/unit/daybook/domain/member/controller/.gitkeep create mode 100644 src/main/java/com/unit/daybook/domain/member/domain/Member.java create mode 100644 src/main/java/com/unit/daybook/domain/member/domain/MemberRole.java create mode 100644 src/main/java/com/unit/daybook/domain/member/domain/MemberStatus.java create mode 100644 src/main/java/com/unit/daybook/domain/member/domain/OauthInfo.java create mode 100644 src/main/java/com/unit/daybook/domain/member/dto/request/.gitkeep create mode 100644 src/main/java/com/unit/daybook/domain/member/dto/response/.gitkeep create mode 100644 src/main/java/com/unit/daybook/domain/member/repository/MemberRepository.java create mode 100644 src/main/java/com/unit/daybook/domain/member/repository/MemberRepositoryCustom.java create mode 100644 src/main/java/com/unit/daybook/domain/member/repository/MemberRepositoryImpl.java diff --git a/src/main/java/com/unit/daybook/domain/auth/controller/.gitkeep b/src/main/java/com/unit/daybook/domain/auth/controller/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/com/unit/daybook/domain/auth/service/.gitkeep b/src/main/java/com/unit/daybook/domain/auth/service/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/com/unit/daybook/domain/common/model/BaseTimeEntity.java b/src/main/java/com/unit/daybook/domain/common/model/BaseTimeEntity.java new file mode 100644 index 0000000..5e2732a --- /dev/null +++ b/src/main/java/com/unit/daybook/domain/common/model/BaseTimeEntity.java @@ -0,0 +1,26 @@ +package com.unit.daybook.domain.common.model; + +import java.time.LocalDateTime; + +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import jakarta.persistence.Column; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.MappedSuperclass; +import lombok.Getter; + +@Getter +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +public abstract class BaseTimeEntity { + + @Column(updatable = false) + @CreatedDate + private LocalDateTime createdAt; + + @Column @LastModifiedDate + private LocalDateTime updatedAt; +} + diff --git a/src/main/java/com/unit/daybook/domain/member/controller/.gitkeep b/src/main/java/com/unit/daybook/domain/member/controller/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/com/unit/daybook/domain/member/domain/Member.java b/src/main/java/com/unit/daybook/domain/member/domain/Member.java new file mode 100644 index 0000000..9e843d8 --- /dev/null +++ b/src/main/java/com/unit/daybook/domain/member/domain/Member.java @@ -0,0 +1,74 @@ +package com.unit.daybook.domain.member.domain; + +import java.time.LocalDateTime; + +import com.unit.daybook.domain.common.model.BaseTimeEntity; + +import jakarta.persistence.Column; +import jakarta.persistence.Embedded; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Entity +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Member extends BaseTimeEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "member_id") + private Long id; + + private String nickname; + + @Embedded + private OauthInfo oauthInfo; + + @Enumerated(EnumType.STRING) + private MemberStatus status; + + @Enumerated(EnumType.STRING) + private MemberRole role; + + private LocalDateTime lastLoginAt; + + + @Builder(access = AccessLevel.PRIVATE) + private Member( + String nickname, + OauthInfo oauthInfo, + MemberStatus status, + MemberRole role, + LocalDateTime lastLoginAt) { + this.nickname = nickname; + this.oauthInfo = oauthInfo; + this.status = status; + this.role = role; + this.lastLoginAt = lastLoginAt; + } + + public static Member createNormalMember(OauthInfo oauthInfo, String nickname) { + return Member.builder() + .nickname(nickname) + .oauthInfo(oauthInfo) + .status(MemberStatus.NORMAL) + .role(MemberRole.USER) + .build(); + } + + public void updateLastLoginAt() { + this.lastLoginAt = LocalDateTime.now(); + } + + public void updateNickname() { + this.nickname = nickname; + } +} diff --git a/src/main/java/com/unit/daybook/domain/member/domain/MemberRole.java b/src/main/java/com/unit/daybook/domain/member/domain/MemberRole.java new file mode 100644 index 0000000..66eb31c --- /dev/null +++ b/src/main/java/com/unit/daybook/domain/member/domain/MemberRole.java @@ -0,0 +1,13 @@ +package com.unit.daybook.domain.member.domain; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum MemberRole { + USER("ROLE_USER"), + ADMIN("ROLE_ADMIN"); + + private final String value; +} \ No newline at end of file diff --git a/src/main/java/com/unit/daybook/domain/member/domain/MemberStatus.java b/src/main/java/com/unit/daybook/domain/member/domain/MemberStatus.java new file mode 100644 index 0000000..b80bb6c --- /dev/null +++ b/src/main/java/com/unit/daybook/domain/member/domain/MemberStatus.java @@ -0,0 +1,14 @@ +package com.unit.daybook.domain.member.domain; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum MemberStatus { + NORMAL("NORMAL"), + DELETED("DELETED"), + FORBIDDEN("FORBIDDEN"); + + private final String value; +} diff --git a/src/main/java/com/unit/daybook/domain/member/domain/OauthInfo.java b/src/main/java/com/unit/daybook/domain/member/domain/OauthInfo.java new file mode 100644 index 0000000..7e0acc7 --- /dev/null +++ b/src/main/java/com/unit/daybook/domain/member/domain/OauthInfo.java @@ -0,0 +1,33 @@ +package com.unit.daybook.domain.member.domain; + +import jakarta.persistence.Embeddable; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Embeddable +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class OauthInfo { + + private String oauthId; + private String oauthProvider; + private String oauthEmail; + + @Builder(access = AccessLevel.PRIVATE) + private OauthInfo(String oauthId, String oauthProvider, String oauthEmail) { + this.oauthId = oauthId; + this.oauthProvider = oauthProvider; + this.oauthEmail = oauthEmail; + } + + public static OauthInfo createOauthInfo( + String oauthId, String oauthProvider, String oauthEmail) { + return OauthInfo.builder() + .oauthId(oauthId) + .oauthProvider(oauthProvider) + .oauthEmail(oauthEmail) + .build(); + } +} diff --git a/src/main/java/com/unit/daybook/domain/member/dto/request/.gitkeep b/src/main/java/com/unit/daybook/domain/member/dto/request/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/com/unit/daybook/domain/member/dto/response/.gitkeep b/src/main/java/com/unit/daybook/domain/member/dto/response/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/com/unit/daybook/domain/member/repository/MemberRepository.java b/src/main/java/com/unit/daybook/domain/member/repository/MemberRepository.java new file mode 100644 index 0000000..34485cd --- /dev/null +++ b/src/main/java/com/unit/daybook/domain/member/repository/MemberRepository.java @@ -0,0 +1,8 @@ +package com.unit.daybook.domain.member.repository; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.unit.daybook.domain.member.domain.Member; + +public interface MemberRepository extends JpaRepository, MemberRepositoryCustom { +} diff --git a/src/main/java/com/unit/daybook/domain/member/repository/MemberRepositoryCustom.java b/src/main/java/com/unit/daybook/domain/member/repository/MemberRepositoryCustom.java new file mode 100644 index 0000000..fec994c --- /dev/null +++ b/src/main/java/com/unit/daybook/domain/member/repository/MemberRepositoryCustom.java @@ -0,0 +1,4 @@ +package com.unit.daybook.domain.member.repository; + +public interface MemberRepositoryCustom { +} diff --git a/src/main/java/com/unit/daybook/domain/member/repository/MemberRepositoryImpl.java b/src/main/java/com/unit/daybook/domain/member/repository/MemberRepositoryImpl.java new file mode 100644 index 0000000..794774a --- /dev/null +++ b/src/main/java/com/unit/daybook/domain/member/repository/MemberRepositoryImpl.java @@ -0,0 +1,10 @@ +package com.unit.daybook.domain.member.repository; + +import org.springframework.stereotype.Repository; + +import lombok.RequiredArgsConstructor; + +@Repository +@RequiredArgsConstructor +public class MemberRepositoryImpl implements MemberRepositoryCustom { +}