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<Member, Long>, 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 { +}