From 4fb2032e687f35210b6f12ee5023e9d35d0d75e2 Mon Sep 17 00:00:00 2001 From: beaniejoy Date: Wed, 5 Oct 2022 00:01:27 +0900 Subject: [PATCH] =?UTF-8?q?[#17]=20feat:=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EA=B8=B0=EB=B3=B8=20=EA=B8=B0=EB=8A=A5=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 회원가입 프로세스 가장 기본적인 기능 적용 - 회원 이메일 기준 중복 체크 및 단순 저장(pw 암호화 과정도 X) - Memeber 도메인 관련 JPA 내용 common에 적용 --- .../common/config/AuditingConfig.kt | 8 +++ .../common/entity/BaseEntityAuditorAware.kt | 12 ++++ .../dongnecafe/controller/MemberController.kt | 19 +++++++ .../error/MemberExistedException.kt | 3 + .../dongnecafe/service/MemberService.kt | 31 ++++++++++ .../domain/member/constant/RoleType.kt | 8 +++ .../dongnecafe/domain/member/entity/Member.kt | 56 +++++++++++++++++++ .../model/request/MemberRegisterRequest.kt | 8 +++ .../member/repository/MemberRepository.kt | 8 +++ .../domain/cafe/controller/CafeController.kt | 2 +- .../cafe/controller/CafeMenuController.kt | 2 +- ... => V001__Delete_all_tables_if_exists.sql} | 0 ..._Create_cafe.sql => V002__Create_cafe.sql} | 0 ...fe_menu.sql => V003__Create_cafe_menu.sql} | 0 ..._image.sql => V004__Create_cafe_image.sql} | 0 ...ption.sql => V005__Create_menu_option.sql} | 0 ...ail.sql => V006__Create_option_detail.sql} | 0 ...k.sql => V007__Alter_all_tables_pk_fk.sql} | 0 .../db/migration/V008__Create_member.sql | 13 +++++ 19 files changed, 168 insertions(+), 2 deletions(-) create mode 100644 dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/AuditingConfig.kt create mode 100644 dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/entity/BaseEntityAuditorAware.kt create mode 100644 dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/controller/MemberController.kt create mode 100644 dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/MemberExistedException.kt create mode 100644 dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/service/MemberService.kt create mode 100644 dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/member/constant/RoleType.kt create mode 100644 dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/member/entity/Member.kt create mode 100644 dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/member/model/request/MemberRegisterRequest.kt create mode 100644 dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/member/repository/MemberRepository.kt rename dongne-service-api/src/main/resources/db/migration/{V1__Delete_all_tables_if_exists.sql => V001__Delete_all_tables_if_exists.sql} (100%) rename dongne-service-api/src/main/resources/db/migration/{V2__Create_cafe.sql => V002__Create_cafe.sql} (100%) rename dongne-service-api/src/main/resources/db/migration/{V3__Create_cafe_menu.sql => V003__Create_cafe_menu.sql} (100%) rename dongne-service-api/src/main/resources/db/migration/{V4__Create_cafe_image.sql => V004__Create_cafe_image.sql} (100%) rename dongne-service-api/src/main/resources/db/migration/{V5__Create_menu_option.sql => V005__Create_menu_option.sql} (100%) rename dongne-service-api/src/main/resources/db/migration/{V6__Create_option_detail.sql => V006__Create_option_detail.sql} (100%) rename dongne-service-api/src/main/resources/db/migration/{V7__Alter_all_tables_pk_fk.sql => V007__Alter_all_tables_pk_fk.sql} (100%) create mode 100644 dongne-service-api/src/main/resources/db/migration/V008__Create_member.sql diff --git a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/AuditingConfig.kt b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/AuditingConfig.kt new file mode 100644 index 0000000..9adc473 --- /dev/null +++ b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/AuditingConfig.kt @@ -0,0 +1,8 @@ +package io.beaniejoy.dongnecafe.common.config + +import org.springframework.context.annotation.Configuration +import org.springframework.data.jpa.repository.config.EnableJpaAuditing + +@Configuration +@EnableJpaAuditing +class AuditingConfig \ No newline at end of file diff --git a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/entity/BaseEntityAuditorAware.kt b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/entity/BaseEntityAuditorAware.kt new file mode 100644 index 0000000..4d14bb9 --- /dev/null +++ b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/entity/BaseEntityAuditorAware.kt @@ -0,0 +1,12 @@ +package io.beaniejoy.dongnecafe.common.entity + +import org.springframework.data.domain.AuditorAware +import org.springframework.stereotype.Component +import java.util.* + +@Component +class BaseEntityAuditorAware: AuditorAware { + override fun getCurrentAuditor(): Optional { + return Optional.of("system") + } +} \ No newline at end of file diff --git a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/controller/MemberController.kt b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/controller/MemberController.kt new file mode 100644 index 0000000..c677ed1 --- /dev/null +++ b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/controller/MemberController.kt @@ -0,0 +1,19 @@ +package io.beaniejoy.dongnecafe.controller + +import io.beaniejoy.dongnecafe.domain.member.model.request.MemberRegisterRequest +import io.beaniejoy.dongnecafe.service.MemberService +import org.springframework.web.bind.annotation.PostMapping +import org.springframework.web.bind.annotation.RequestBody +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController + +@RestController +@RequestMapping("/api/members") +class MemberController( + private val memberService: MemberService +) { + @PostMapping("/signup") + fun signUp(@RequestBody resource: MemberRegisterRequest): Long { + return memberService.registerMember(resource) + } +} \ No newline at end of file diff --git a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/MemberExistedException.kt b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/MemberExistedException.kt new file mode 100644 index 0000000..31d58e1 --- /dev/null +++ b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/MemberExistedException.kt @@ -0,0 +1,3 @@ +package io.beaniejoy.dongnecafe.error + +class MemberExistedException(email: String): RuntimeException("Member[$email] is already existed") \ No newline at end of file diff --git a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/service/MemberService.kt b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/service/MemberService.kt new file mode 100644 index 0000000..1a98d60 --- /dev/null +++ b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/service/MemberService.kt @@ -0,0 +1,31 @@ +package io.beaniejoy.dongnecafe.service + +import io.beaniejoy.dongnecafe.domain.member.entity.Member +import io.beaniejoy.dongnecafe.domain.member.model.request.MemberRegisterRequest +import io.beaniejoy.dongnecafe.domain.member.repository.MemberRepository +import io.beaniejoy.dongnecafe.error.MemberExistedException +import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional + +@Service +@Transactional +class MemberService( + private val memberRepository: MemberRepository +) { + fun registerMember(resource: MemberRegisterRequest): Long { + memberRepository.findByEmail(resource.email!!)?.also { + throw MemberExistedException(resource.email!!) + } + + val registeredMember = memberRepository.save( + Member.createMember( + email = resource.email!!, + password = resource.password!!, + address = resource.address!!, + phoneNumber = resource.phoneNumber!! + ) + ) + + return registeredMember.id + } +} \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/member/constant/RoleType.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/member/constant/RoleType.kt new file mode 100644 index 0000000..4130db2 --- /dev/null +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/member/constant/RoleType.kt @@ -0,0 +1,8 @@ +package io.beaniejoy.dongnecafe.domain.member.constant + +enum class RoleType(val value: String) { + ROLE_ADMIN("어드민 관리자"), + ROLE_USER("일반 사용자"), + ROLE_OWNER("카페 관리자"); + ; +} \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/member/entity/Member.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/member/entity/Member.kt new file mode 100644 index 0000000..4c5c25d --- /dev/null +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/member/entity/Member.kt @@ -0,0 +1,56 @@ +package io.beaniejoy.dongnecafe.domain.member.entity + +import io.beaniejoy.dongnecafe.common.BaseTimeEntity +import io.beaniejoy.dongnecafe.domain.member.constant.RoleType +import javax.persistence.* + +@Entity +@Table(name = "member") +class Member( + email: String, + password: String, + address: String, + phoneNumber: String +): BaseTimeEntity() { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "member_id", nullable = false) + val id: Long = 0L + + @Column(name = "email", nullable = false) + var email: String = email + protected set + + @Column(name = "password", nullable = false) + var password: String = password + protected set + + @Column(name = "address", nullable = false) + var address: String = address + protected set + + @Column(name = "phone_number", nullable = false) + var phoneNumber: String = phoneNumber + protected set + + @Enumerated(EnumType.STRING) + @Column(name = "role_type", nullable = false) + var roleType: RoleType = RoleType.ROLE_USER + protected set + + companion object { + fun createMember( + email: String, + password: String, + address: String, + phoneNumber: String + ): Member { + return Member( + email = email, + password = password, + address = address, + phoneNumber = phoneNumber + ) + } + } +} \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/member/model/request/MemberRegisterRequest.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/member/model/request/MemberRegisterRequest.kt new file mode 100644 index 0000000..4563621 --- /dev/null +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/member/model/request/MemberRegisterRequest.kt @@ -0,0 +1,8 @@ +package io.beaniejoy.dongnecafe.domain.member.model.request + +class MemberRegisterRequest( + val email: String? = null, + val password: String? = null, + val address: String? = null, + val phoneNumber: String? = null +) \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/member/repository/MemberRepository.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/member/repository/MemberRepository.kt new file mode 100644 index 0000000..911dcb3 --- /dev/null +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/member/repository/MemberRepository.kt @@ -0,0 +1,8 @@ +package io.beaniejoy.dongnecafe.domain.member.repository + +import io.beaniejoy.dongnecafe.domain.member.entity.Member +import org.springframework.data.jpa.repository.JpaRepository + +interface MemberRepository : JpaRepository { + fun findByEmail(email: String): Member? +} \ No newline at end of file diff --git a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/controller/CafeController.kt b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/controller/CafeController.kt index 8f12999..f9b9bc1 100644 --- a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/controller/CafeController.kt +++ b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/controller/CafeController.kt @@ -12,7 +12,7 @@ import org.springframework.data.web.PageableDefault import org.springframework.web.bind.annotation.* @RestController -@RequestMapping("/cafes") +@RequestMapping("/api/cafes") class CafeController( private val cafeService: CafeService ) { diff --git a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/controller/CafeMenuController.kt b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/controller/CafeMenuController.kt index 7603af0..4e41697 100644 --- a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/controller/CafeMenuController.kt +++ b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/controller/CafeMenuController.kt @@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController @RestController -@RequestMapping("/cafes/{cafeId}/menus") +@RequestMapping("/api/cafes/{cafeId}/menus") class CafeMenuController( private val cafeMenuService: CafeMenuService ) { diff --git a/dongne-service-api/src/main/resources/db/migration/V1__Delete_all_tables_if_exists.sql b/dongne-service-api/src/main/resources/db/migration/V001__Delete_all_tables_if_exists.sql similarity index 100% rename from dongne-service-api/src/main/resources/db/migration/V1__Delete_all_tables_if_exists.sql rename to dongne-service-api/src/main/resources/db/migration/V001__Delete_all_tables_if_exists.sql diff --git a/dongne-service-api/src/main/resources/db/migration/V2__Create_cafe.sql b/dongne-service-api/src/main/resources/db/migration/V002__Create_cafe.sql similarity index 100% rename from dongne-service-api/src/main/resources/db/migration/V2__Create_cafe.sql rename to dongne-service-api/src/main/resources/db/migration/V002__Create_cafe.sql diff --git a/dongne-service-api/src/main/resources/db/migration/V3__Create_cafe_menu.sql b/dongne-service-api/src/main/resources/db/migration/V003__Create_cafe_menu.sql similarity index 100% rename from dongne-service-api/src/main/resources/db/migration/V3__Create_cafe_menu.sql rename to dongne-service-api/src/main/resources/db/migration/V003__Create_cafe_menu.sql diff --git a/dongne-service-api/src/main/resources/db/migration/V4__Create_cafe_image.sql b/dongne-service-api/src/main/resources/db/migration/V004__Create_cafe_image.sql similarity index 100% rename from dongne-service-api/src/main/resources/db/migration/V4__Create_cafe_image.sql rename to dongne-service-api/src/main/resources/db/migration/V004__Create_cafe_image.sql diff --git a/dongne-service-api/src/main/resources/db/migration/V5__Create_menu_option.sql b/dongne-service-api/src/main/resources/db/migration/V005__Create_menu_option.sql similarity index 100% rename from dongne-service-api/src/main/resources/db/migration/V5__Create_menu_option.sql rename to dongne-service-api/src/main/resources/db/migration/V005__Create_menu_option.sql diff --git a/dongne-service-api/src/main/resources/db/migration/V6__Create_option_detail.sql b/dongne-service-api/src/main/resources/db/migration/V006__Create_option_detail.sql similarity index 100% rename from dongne-service-api/src/main/resources/db/migration/V6__Create_option_detail.sql rename to dongne-service-api/src/main/resources/db/migration/V006__Create_option_detail.sql diff --git a/dongne-service-api/src/main/resources/db/migration/V7__Alter_all_tables_pk_fk.sql b/dongne-service-api/src/main/resources/db/migration/V007__Alter_all_tables_pk_fk.sql similarity index 100% rename from dongne-service-api/src/main/resources/db/migration/V7__Alter_all_tables_pk_fk.sql rename to dongne-service-api/src/main/resources/db/migration/V007__Alter_all_tables_pk_fk.sql diff --git a/dongne-service-api/src/main/resources/db/migration/V008__Create_member.sql b/dongne-service-api/src/main/resources/db/migration/V008__Create_member.sql new file mode 100644 index 0000000..78a0650 --- /dev/null +++ b/dongne-service-api/src/main/resources/db/migration/V008__Create_member.sql @@ -0,0 +1,13 @@ +CREATE TABLE `member` ( + `member_id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '회원 ID', + `email` varchar(20) NOT NULL COMMENT '계정 이메일', + `password` varchar(255) NOT NULL COMMENT '비밀번호', + `address` varchar(100) NOT NULL COMMENT '회원 주소', + `phone_number` varchar(11) NOT NULL COMMENT '회원 전화번호', + `role_type` varchar(20) COMMENT '회원 권한', + `created_at` datetime NOT NULL COMMENT '회원 등록날짜', + `created_by` varchar(20) NOT NULL COMMENT '회원 등록자', + `updated_at` datetime NULL COMMENT '회원 변경날짜', + `updated_by` varchar(20) NULL COMMENT '회원 변경자', + PRIMARY KEY (`member_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; \ No newline at end of file