[#17] feat: 회원가입 기본 기능 적용
- 회원가입 프로세스 가장 기본적인 기능 적용 - 회원 이메일 기준 중복 체크 및 단순 저장(pw 암호화 과정도 X) - Memeber 도메인 관련 JPA 내용 common에 적용
This commit is contained in:
@@ -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
|
||||
@@ -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")
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package io.beaniejoy.dongnecafe.error
|
||||
|
||||
class MemberExistedException(email: String): RuntimeException("Member[$email] is already existed")
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package io.beaniejoy.dongnecafe.domain.member.constant
|
||||
|
||||
enum class RoleType(val value: String) {
|
||||
ROLE_ADMIN("어드민 관리자"),
|
||||
ROLE_USER("일반 사용자"),
|
||||
ROLE_OWNER("카페 관리자");
|
||||
;
|
||||
}
|
||||
@@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
)
|
||||
@@ -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?
|
||||
}
|
||||
@@ -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
|
||||
) {
|
||||
|
||||
@@ -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
|
||||
) {
|
||||
|
||||
@@ -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;
|
||||
Reference in New Issue
Block a user