This repository was archived by the owner on Jul 7, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSendLetter.kt
More file actions
105 lines (96 loc) · 3.24 KB
/
SendLetter.kt
File metadata and controls
105 lines (96 loc) · 3.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package com.asap.domain.letter.entity
import com.asap.domain.common.Aggregate
import com.asap.domain.common.DomainId
import com.asap.domain.letter.enums.LetterStatus
import com.asap.domain.letter.event.SendLetterEvent
import com.asap.domain.letter.vo.LetterContent
import com.asap.domain.user.entity.User
import java.time.LocalDate
import java.time.LocalDateTime
class SendLetter(
id: DomainId,
val content: LetterContent,
var senderId: DomainId?,
var senderName: String?,
var receiverName: String,
var letterCode: String?,
var status: LetterStatus,
var receiverId: DomainId?,
createdAt: LocalDateTime,
updatedAt: LocalDateTime,
) : Aggregate<SendLetter>(id, createdAt, updatedAt) {
val createdDate: LocalDate = createdAt.toLocalDate()
companion object {
fun create(
content: LetterContent,
senderId: DomainId,
receiverName: String,
letterCode: String?,
status: LetterStatus = LetterStatus.SENDING,
receiverId: DomainId? = null,
draftId: DomainId? = null,
createdAt: LocalDateTime = LocalDateTime.now(),
updatedAt: LocalDateTime = LocalDateTime.now(),
) = SendLetter(
id = DomainId.generate(),
content = content,
senderId = senderId,
senderName = null,
receiverName = receiverName,
letterCode = letterCode,
status = status,
receiverId = receiverId,
createdAt = createdAt,
updatedAt = updatedAt,
).also {
it.registerEvent(SendLetterEvent.SendLetterCreatedEvent(it, draftId?.value))
}
fun createAnonymous(
content: LetterContent,
receiverName: String,
letterCode: String?,
senderName: String,
status: LetterStatus = LetterStatus.SENDING,
receiverId: DomainId? = null,
createdAt: LocalDateTime = LocalDateTime.now(),
updatedAt: LocalDateTime = LocalDateTime.now(),
): SendLetter =
SendLetter(
id = DomainId.generate(),
content = content,
senderId = null,
senderName = senderName,
receiverName = receiverName,
letterCode = letterCode,
status = status,
receiverId = receiverId,
createdAt = createdAt,
updatedAt = updatedAt,
)
}
fun isSameReceiver(receiver: User): Boolean = receiverName == receiver.username && (receiverId == null || receiverId == receiver.id)
fun readLetter(receiverId: DomainId) {
this.receiverId = receiverId
this.status = LetterStatus.READ
updateTime()
}
fun receiveLetter() {
status = LetterStatus.RECEIVED
letterCode = null
updateTime()
}
fun delete() {
this.content.delete()
this.receiverName = ""
this.letterCode = null
this.receiverId = null
updateTime()
}
fun configSenderId(senderId: DomainId) {
check(this.senderId == null) {
"SenderId is already set"
}
this.senderId = senderId
updateTime()
}
}