Skip to content

Commit 499adfa

Browse files
authored
Merge pull request #8 from f-lab-edu/feat/7
[#7] 판매자 도메인 엔티티 작성
2 parents 2d69213 + 28fcb8b commit 499adfa

File tree

10 files changed

+206
-0
lines changed

10 files changed

+206
-0
lines changed

docs/seller_diagram.mermaid

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
%% 판매자 도메인 ERD
2+
erDiagram
3+
Seller {
4+
}
5+
SellerRegistrationRequest {
6+
}
7+
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.nilgil.commerce.common
2+
3+
import jakarta.persistence.Column
4+
import jakarta.persistence.Embeddable
5+
6+
@Embeddable
7+
data class Email(
8+
@Column(name = "email")
9+
val value: String,
10+
) {
11+
companion object {
12+
private val EMAIL_REGEX = Regex("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$")
13+
}
14+
15+
init {
16+
require(value.matches(EMAIL_REGEX)) { "Invalid email format: $value" }
17+
}
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.nilgil.commerce.common
2+
3+
import jakarta.persistence.Column
4+
import jakarta.persistence.Embeddable
5+
6+
@Embeddable
7+
data class PhoneNumber(
8+
@Column(name = "phone_number")
9+
val value: String,
10+
) {
11+
companion object {
12+
private val PHONE_NUMBER_REGEX = Regex("^01[016789]-\\d{3,4}-\\d{4}$")
13+
}
14+
15+
init {
16+
require(value.matches(PHONE_NUMBER_REGEX)) { "Invalid phone number format: $value" }
17+
}
18+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.nilgil.commerce.seller
2+
3+
import com.nilgil.commerce.common.BaseEntity
4+
import com.nilgil.commerce.common.Email
5+
import com.nilgil.commerce.common.PhoneNumber
6+
import jakarta.persistence.Embedded
7+
import jakarta.persistence.Entity
8+
import jakarta.persistence.EnumType
9+
import jakarta.persistence.Enumerated
10+
11+
@Entity
12+
class Seller(
13+
@Embedded
14+
var businessInfo: SellerBusinessInfo,
15+
@Embedded
16+
var contactInfo: SellerContactInfo,
17+
@Embedded
18+
var bankAccount: SellerBankAccount,
19+
var introduction: String?,
20+
var brandLogo: String?,
21+
) : BaseEntity() {
22+
@Enumerated(EnumType.STRING)
23+
var status: SellerStatus = SellerStatus.ACTIVE
24+
25+
fun activate() {
26+
this.status = SellerStatus.ACTIVE
27+
}
28+
29+
fun deactivate() {
30+
this.status = SellerStatus.INACTIVE
31+
}
32+
33+
fun block() {
34+
this.status = SellerStatus.BLOCKED
35+
}
36+
37+
fun unblock() {
38+
this.status = SellerStatus.ACTIVE
39+
}
40+
41+
fun changeBusinessInfo(sellerBusinessInfo: SellerBusinessInfo) {
42+
this.businessInfo = sellerBusinessInfo
43+
}
44+
45+
fun changeContactInfo(contactInfo: SellerContactInfo) {
46+
this.contactInfo = contactInfo
47+
}
48+
49+
fun changeEmail(email: Email) {
50+
this.contactInfo = this.contactInfo.copy(email = email)
51+
}
52+
53+
fun changePhoneNumber(phoneNumber: PhoneNumber) {
54+
this.contactInfo = this.contactInfo.copy(phoneNumber = phoneNumber)
55+
}
56+
57+
fun changeBankAccount(bankAccount: SellerBankAccount) {
58+
this.bankAccount = bankAccount
59+
}
60+
61+
fun changeIntroduction(introduction: String) {
62+
this.introduction = introduction
63+
}
64+
65+
fun changeBrandLogo(brandLogo: String) {
66+
this.brandLogo = brandLogo
67+
}
68+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.nilgil.commerce.seller
2+
3+
import jakarta.persistence.Column
4+
import jakarta.persistence.Embeddable
5+
6+
@Embeddable
7+
data class SellerBankAccount(
8+
@Column(name = "bank_name")
9+
val bankName: String,
10+
@Column(name = "bank_account_number")
11+
val accountNumber: String,
12+
@Column(name = "bank_account_holder")
13+
val accountHolder: String,
14+
)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.nilgil.commerce.seller
2+
3+
import jakarta.persistence.Column
4+
import jakarta.persistence.Embeddable
5+
6+
@Embeddable
7+
data class SellerBusinessInfo(
8+
@Column(name = "business_name")
9+
val name: String,
10+
@Column(name = "business_type")
11+
val type: String,
12+
@Column(name = "business_category")
13+
val category: String,
14+
@Column(name = "business_address")
15+
val address: String,
16+
@Column(name = "business_registration_number")
17+
val registrationNumber: String,
18+
@Column(name = "business_registration_certificate")
19+
val registrationCertificate: String,
20+
)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.nilgil.commerce.seller
2+
3+
import com.nilgil.commerce.common.Email
4+
import com.nilgil.commerce.common.PhoneNumber
5+
import jakarta.persistence.Embeddable
6+
import jakarta.persistence.Embedded
7+
8+
@Embeddable
9+
data class SellerContactInfo(
10+
@Embedded
11+
val email: Email,
12+
@Embedded
13+
val phoneNumber: PhoneNumber,
14+
)
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.nilgil.commerce.seller
2+
3+
import com.nilgil.commerce.common.BaseEntity
4+
import jakarta.persistence.Embedded
5+
import jakarta.persistence.Entity
6+
import jakarta.persistence.EnumType
7+
import jakarta.persistence.Enumerated
8+
9+
@Entity
10+
class SellerRegistrationRequest(
11+
@Embedded
12+
val businessInfo: SellerBusinessInfo,
13+
@Embedded
14+
val contactInfo: SellerContactInfo,
15+
@Embedded
16+
val bankAccount: SellerBankAccount,
17+
) : BaseEntity() {
18+
@Enumerated(EnumType.STRING)
19+
var status: SellerRegistrationStatus = SellerRegistrationStatus.PENDING
20+
21+
fun approve() {
22+
this.status = SellerRegistrationStatus.APPROVED
23+
}
24+
25+
fun reject() {
26+
this.status = SellerRegistrationStatus.REJECTED
27+
}
28+
29+
fun cancel() {
30+
this.status = SellerRegistrationStatus.CANCELLED
31+
}
32+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.nilgil.commerce.seller
2+
3+
enum class SellerRegistrationStatus {
4+
APPROVED,
5+
PENDING,
6+
REJECTED,
7+
CANCELLED,
8+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.nilgil.commerce.seller
2+
3+
enum class SellerStatus {
4+
ACTIVE,
5+
INACTIVE,
6+
BLOCKED,
7+
}

0 commit comments

Comments
 (0)