[#17] feat: 회원가입 기본 기능 적용

- 회원가입 프로세스 가장 기본적인 기능 적용
- 회원 이메일 기준 중복 체크 및 단순 저장(pw 암호화 과정도 X)
- Memeber 도메인 관련 JPA 내용 common에 적용
This commit is contained in:
beaniejoy
2022-10-05 00:01:27 +09:00
parent 45136c7f9c
commit 4fb2032e68
19 changed files with 168 additions and 2 deletions

View File

@@ -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

View File

@@ -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<String> {
override fun getCurrentAuditor(): Optional<String> {
return Optional.of("system")
}
}

View File

@@ -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)
}
}

View File

@@ -0,0 +1,3 @@
package io.beaniejoy.dongnecafe.error
class MemberExistedException(email: String): RuntimeException("Member[$email] is already existed")

View File

@@ -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
}
}

View File

@@ -0,0 +1,8 @@
package io.beaniejoy.dongnecafe.domain.member.constant
enum class RoleType(val value: String) {
ROLE_ADMIN("어드민 관리자"),
ROLE_USER("일반 사용자"),
ROLE_OWNER("카페 관리자");
;
}

View File

@@ -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
)
}
}
}

View File

@@ -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
)

View File

@@ -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<Member, Long> {
fun findByEmail(email: String): Member?
}

View File

@@ -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
) {

View File

@@ -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
) {

View File

@@ -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;