-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Feat/#412] 이메일 OPEN, DELIVERY DELAY 이벤트 처리 #419
Merged
Merged
Changes from all commits
Commits
Show all changes
19 commits
Select commit
Hold shift + click to select a range
59e81aa
feat: 전송 아티클 이벤트 테이블 추가 및 필요 enum 추가
belljun3395 743e469
refactor: 배치 전송후 전송 기록 추가
belljun3395 0914810
feat: 전송 아티클 이벤트 추가 및 조회 쿼리 추가
belljun3395 507a026
feat: AddEmailLogUseCase 구현
belljun3395 2053a86
feat: ArticleLogService 구현
belljun3395 b7c0173
feat: ArticleMemberService 구현
belljun3395 fb14ea1
feat: ReadArticleByEmailUseCase 구현
belljun3395 ebfd3b5
feat: addEmailLog 구현
belljun3395 bd2d8a0
feat: readArticleByEmail 구현
belljun3395 0ee9f66
fix: 요청으로 Byte를 받지 못하는 문제 해결
belljun3395 10108c6
feat: 아티클 로그 요청 시큐리티 해제
belljun3395 dc13d7c
fix: execute가 없어서 쿼리가 동작하지 않는 문제 해결
belljun3395 0ca5a34
fix: EmailLogEventType 변환할 때 type의 대소문자 구분하지 않고 변한할 수 있도록 수정
belljun3395 1c42574
feat: 로그 기록을 위한 인증 예외 주소 추가
belljun3395 51d148f
refactor: 아티클 이메일 전송시 전송 이벤트 기록하도록 수정
belljun3395 312440b
fix: 요청을 처리할 수 있도록 수정
belljun3395 ddb3e0b
fix: todo로 예외 발생하는 문제 해결
belljun3395 5450509
fix: eventType이 재대로 저장되지 않는 문제 해결
belljun3395 cea90e7
Merge branch 'dev' into feat/#412_belljun3395
belljun3395 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
48 changes: 48 additions & 0 deletions
48
api-repo/src/main/kotlin/com/few/api/repo/dao/log/SendArticleEventHistoryDao.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
package com.few.api.repo.dao.log | ||
|
||
import com.few.api.repo.dao.log.command.InsertEventCommand | ||
import com.few.api.repo.dao.log.query.SelectEventByMessageIdAndEventTypeQuery | ||
import com.few.api.repo.dao.log.record.SendArticleEventHistoryRecord | ||
import jooq.jooq_dsl.tables.SendArticleEventHistory | ||
import org.jooq.DSLContext | ||
import org.springframework.stereotype.Repository | ||
|
||
@Repository | ||
class SendArticleEventHistoryDao( | ||
private val dslContext: DSLContext, | ||
) { | ||
|
||
fun insertEvent(command: InsertEventCommand) { | ||
dslContext.insertInto(SendArticleEventHistory.SEND_ARTICLE_EVENT_HISTORY) | ||
.set(SendArticleEventHistory.SEND_ARTICLE_EVENT_HISTORY.MEMBER_ID, command.memberId) | ||
.set(SendArticleEventHistory.SEND_ARTICLE_EVENT_HISTORY.ARTICLE_ID, command.articleId) | ||
.set(SendArticleEventHistory.SEND_ARTICLE_EVENT_HISTORY.MESSAGE_ID, command.messageId) | ||
.set(SendArticleEventHistory.SEND_ARTICLE_EVENT_HISTORY.EVENT_TYPE_CD, command.eventType) | ||
.set(SendArticleEventHistory.SEND_ARTICLE_EVENT_HISTORY.SEND_TYPE_CD, command.sendType) | ||
.execute() | ||
} | ||
|
||
fun selectEventByMessageId(query: SelectEventByMessageIdAndEventTypeQuery): SendArticleEventHistoryRecord? { | ||
return dslContext.select( | ||
SendArticleEventHistory.SEND_ARTICLE_EVENT_HISTORY.MEMBER_ID.`as`( | ||
SendArticleEventHistoryRecord::memberId.name | ||
), | ||
SendArticleEventHistory.SEND_ARTICLE_EVENT_HISTORY.ARTICLE_ID.`as`( | ||
SendArticleEventHistoryRecord::articleId.name | ||
), | ||
SendArticleEventHistory.SEND_ARTICLE_EVENT_HISTORY.MESSAGE_ID.`as`( | ||
SendArticleEventHistoryRecord::messageId.name | ||
), | ||
SendArticleEventHistory.SEND_ARTICLE_EVENT_HISTORY.EVENT_TYPE_CD.`as`( | ||
SendArticleEventHistoryRecord::eventType.name | ||
), | ||
SendArticleEventHistory.SEND_ARTICLE_EVENT_HISTORY.SEND_TYPE_CD.`as`( | ||
SendArticleEventHistoryRecord::sendType.name | ||
) | ||
) | ||
.from(SendArticleEventHistory.SEND_ARTICLE_EVENT_HISTORY) | ||
.where(SendArticleEventHistory.SEND_ARTICLE_EVENT_HISTORY.MESSAGE_ID.eq(query.messageId)) | ||
.and(SendArticleEventHistory.SEND_ARTICLE_EVENT_HISTORY.EVENT_TYPE_CD.eq(query.eventType)) | ||
.fetchOne()?.into(SendArticleEventHistoryRecord::class.java) | ||
} | ||
} |
9 changes: 9 additions & 0 deletions
9
api-repo/src/main/kotlin/com/few/api/repo/dao/log/command/InsertEventCommand.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package com.few.api.repo.dao.log.command | ||
|
||
data class InsertEventCommand( | ||
val memberId: Long, | ||
val articleId: Long, | ||
val messageId: String, | ||
val eventType: Byte, | ||
val sendType: Byte, | ||
) |
6 changes: 6 additions & 0 deletions
6
...src/main/kotlin/com/few/api/repo/dao/log/query/SelectEventByMessageIdAndEventTypeQuery.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
package com.few.api.repo.dao.log.query | ||
|
||
data class SelectEventByMessageIdAndEventTypeQuery( | ||
val messageId: String, | ||
val eventType: Byte, | ||
) |
9 changes: 9 additions & 0 deletions
9
api-repo/src/main/kotlin/com/few/api/repo/dao/log/record/SendArticleEventHistoryRecord.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package com.few.api.repo.dao.log.record | ||
|
||
data class SendArticleEventHistoryRecord( | ||
val memberId: Long, | ||
val articleId: Long, | ||
val messageId: String, | ||
val eventType: Byte, | ||
val sendType: Byte, | ||
) |
36 changes: 36 additions & 0 deletions
36
api/src/main/kotlin/com/few/api/domain/article/service/ArticleLogService.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
package com.few.api.domain.article.service | ||
|
||
import com.few.api.domain.article.service.dto.InsertOpenEventDto | ||
import com.few.api.domain.article.service.dto.SelectDeliveryEventByMessageIdDto | ||
import com.few.api.repo.dao.log.SendArticleEventHistoryDao | ||
import com.few.api.repo.dao.log.command.InsertEventCommand | ||
import com.few.api.repo.dao.log.query.SelectEventByMessageIdAndEventTypeQuery | ||
import com.few.api.repo.dao.log.record.SendArticleEventHistoryRecord | ||
import org.springframework.stereotype.Service | ||
|
||
@Service | ||
class ArticleLogService( | ||
private val sendArticleEventHistoryDao: SendArticleEventHistoryDao, | ||
) { | ||
|
||
fun selectDeliveryEventByMessageId(dto: SelectDeliveryEventByMessageIdDto): SendArticleEventHistoryRecord? { | ||
return sendArticleEventHistoryDao.selectEventByMessageId( | ||
SelectEventByMessageIdAndEventTypeQuery( | ||
dto.messageId, | ||
dto.eventType | ||
) | ||
) | ||
} | ||
|
||
fun insertOpenEvent(dto: InsertOpenEventDto) { | ||
sendArticleEventHistoryDao.insertEvent( | ||
InsertEventCommand( | ||
memberId = dto.memberId, | ||
articleId = dto.articleId, | ||
messageId = dto.messageId, | ||
eventType = dto.eventType, | ||
sendType = dto.sendType | ||
) | ||
) | ||
} | ||
} |
18 changes: 18 additions & 0 deletions
18
api/src/main/kotlin/com/few/api/domain/article/service/ArticleMemberService.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
package com.few.api.domain.article.service | ||
|
||
import com.few.api.domain.article.service.dto.ReadMemberByEmailDto | ||
import com.few.api.repo.dao.member.MemberDao | ||
import com.few.api.repo.dao.member.query.SelectMemberByEmailQuery | ||
import org.springframework.stereotype.Service | ||
|
||
@Service | ||
class ArticleMemberService( | ||
private val memberDao: MemberDao, | ||
) { | ||
|
||
fun readMemberByEmail(dto: ReadMemberByEmailDto): Long? { | ||
return memberDao.selectMemberByEmail( | ||
SelectMemberByEmailQuery(dto.email) | ||
)?.memberId | ||
} | ||
} |
9 changes: 9 additions & 0 deletions
9
api/src/main/kotlin/com/few/api/domain/article/service/dto/InsertOpenEventDto.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package com.few.api.domain.article.service.dto | ||
|
||
data class InsertOpenEventDto( | ||
val memberId: Long, | ||
val articleId: Long, | ||
val messageId: String, | ||
val eventType: Byte, | ||
val sendType: Byte, | ||
) |
5 changes: 5 additions & 0 deletions
5
api/src/main/kotlin/com/few/api/domain/article/service/dto/ReadMemberByEmailDto.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package com.few.api.domain.article.service.dto | ||
|
||
data class ReadMemberByEmailDto( | ||
val email: String, | ||
) |
6 changes: 6 additions & 0 deletions
6
...c/main/kotlin/com/few/api/domain/article/service/dto/SelectDeliveryEventByMessageIdDto.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
package com.few.api.domain.article.service.dto | ||
|
||
data class SelectDeliveryEventByMessageIdDto( | ||
val messageId: String, | ||
val eventType: Byte, | ||
) |
45 changes: 45 additions & 0 deletions
45
api/src/main/kotlin/com/few/api/domain/article/usecase/ReadArticleByEmailUseCase.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
package com.few.api.domain.article.usecase | ||
|
||
import com.few.api.domain.article.service.ArticleLogService | ||
import com.few.api.domain.article.service.ArticleMemberService | ||
import com.few.api.domain.article.service.dto.InsertOpenEventDto | ||
import com.few.api.domain.article.service.dto.ReadMemberByEmailDto | ||
import com.few.api.domain.article.service.dto.SelectDeliveryEventByMessageIdDto | ||
import com.few.api.domain.article.usecase.dto.ReadArticleByEmailUseCaseIn | ||
import com.few.api.web.support.EmailLogEventType | ||
import org.springframework.stereotype.Component | ||
import org.springframework.transaction.annotation.Transactional | ||
import org.webjars.NotFoundException | ||
|
||
@Component | ||
class ReadArticleByEmailUseCase( | ||
private val memberService: ArticleMemberService, | ||
private val articleLogService: ArticleLogService, | ||
) { | ||
|
||
@Transactional | ||
fun execute(useCaseIn: ReadArticleByEmailUseCaseIn) { | ||
val memberId = | ||
memberService.readMemberByEmail(ReadMemberByEmailDto(useCaseIn.destination[0])) | ||
?: throw NotFoundException("member.notfound.email") | ||
|
||
val record = | ||
articleLogService.selectDeliveryEventByMessageId( | ||
SelectDeliveryEventByMessageIdDto( | ||
useCaseIn.messageId, | ||
EmailLogEventType.DELIVERY.code | ||
) | ||
) | ||
?: throw IllegalStateException("event is not found") | ||
|
||
articleLogService.insertOpenEvent( | ||
InsertOpenEventDto( | ||
memberId = memberId, | ||
articleId = record.articleId, | ||
messageId = record.messageId, | ||
eventType = EmailLogEventType.OPEN.code, | ||
sendType = record.sendType | ||
) | ||
) | ||
} | ||
} |
11 changes: 11 additions & 0 deletions
11
api/src/main/kotlin/com/few/api/domain/article/usecase/dto/ReadArticleByEmailUseCaseIn.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package com.few.api.domain.article.usecase.dto | ||
|
||
import com.few.api.web.support.EmailLogEventType | ||
import com.few.api.web.support.SendType | ||
|
||
data class ReadArticleByEmailUseCaseIn( | ||
val messageId: String, | ||
val destination: List<String>, | ||
val eventType: EmailLogEventType, | ||
val sendType: SendType, | ||
) |
46 changes: 46 additions & 0 deletions
46
api/src/main/kotlin/com/few/api/domain/log/AddEmailLogUseCase.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
package com.few.api.domain.log | ||
|
||
import com.few.api.domain.log.dto.AddEmailLogUseCaseIn | ||
import com.few.api.repo.dao.log.SendArticleEventHistoryDao | ||
import com.few.api.repo.dao.log.command.InsertEventCommand | ||
import com.few.api.repo.dao.log.query.SelectEventByMessageIdAndEventTypeQuery | ||
import com.few.api.repo.dao.member.MemberDao | ||
import com.few.api.repo.dao.member.query.SelectMemberByEmailQuery | ||
import com.few.api.web.support.EmailLogEventType | ||
import org.springframework.stereotype.Component | ||
import org.springframework.transaction.annotation.Transactional | ||
import org.webjars.NotFoundException | ||
|
||
@Component | ||
class AddEmailLogUseCase( | ||
private val memberDao: MemberDao, | ||
private val sendArticleEventHistoryDao: SendArticleEventHistoryDao, | ||
) { | ||
@Transactional | ||
fun execute(useCaseIn: AddEmailLogUseCaseIn) { | ||
val (memberId, _, _, _) = memberDao.selectMemberByEmail( | ||
SelectMemberByEmailQuery(useCaseIn.destination[0]) | ||
) ?: throw NotFoundException("member.notfound.email") | ||
|
||
val record = | ||
sendArticleEventHistoryDao.selectEventByMessageId( | ||
SelectEventByMessageIdAndEventTypeQuery( | ||
useCaseIn.messageId, | ||
EmailLogEventType.SEND.code | ||
) | ||
) | ||
?: throw IllegalStateException("event is not found") | ||
|
||
sendArticleEventHistoryDao.insertEvent( | ||
InsertEventCommand( | ||
memberId = memberId, | ||
articleId = record.articleId, | ||
messageId = record.messageId, | ||
eventType = useCaseIn.eventType.code, | ||
sendType = record.sendType | ||
) | ||
).let { | ||
// TODO("다른 이벤트는 필요시 추가한다.") | ||
} | ||
} | ||
} |
11 changes: 11 additions & 0 deletions
11
api/src/main/kotlin/com/few/api/domain/log/dto/AddEmailLogUseCaseIn.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package com.few.api.domain.log.dto | ||
|
||
import com.few.api.web.support.EmailLogEventType | ||
import java.time.LocalDateTime | ||
|
||
data class AddEmailLogUseCaseIn( | ||
val eventType: EmailLogEventType, | ||
val messageId: String, | ||
val destination: List<String>, | ||
val mailTimestamp: LocalDateTime, | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
25 changes: 25 additions & 0 deletions
25
api/src/main/kotlin/com/few/api/domain/subscription/service/SubscriptionLogService.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
package com.few.api.domain.subscription.service | ||
|
||
import com.few.api.domain.subscription.service.dto.InsertSendEventDto | ||
import com.few.api.repo.dao.log.SendArticleEventHistoryDao | ||
import com.few.api.repo.dao.log.command.InsertEventCommand | ||
import com.few.api.web.support.EmailLogEventType | ||
import org.springframework.stereotype.Service | ||
|
||
@Service | ||
class SubscriptionLogService( | ||
private val sendArticleEventHistoryDao: SendArticleEventHistoryDao, | ||
) { | ||
|
||
fun insertSendEvent(dto: InsertSendEventDto) { | ||
sendArticleEventHistoryDao.insertEvent( | ||
InsertEventCommand( | ||
memberId = dto.memberId, | ||
articleId = dto.articleId, | ||
messageId = dto.messageId, | ||
eventType = EmailLogEventType.SEND.code, | ||
sendType = dto.sendType | ||
) | ||
) | ||
} | ||
} |
8 changes: 8 additions & 0 deletions
8
api/src/main/kotlin/com/few/api/domain/subscription/service/dto/InsertSendEventDto.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
package com.few.api.domain.subscription.service.dto | ||
|
||
data class InsertSendEventDto( | ||
val memberId: Long, | ||
val articleId: Long, | ||
val messageId: String, | ||
val sendType: Byte, | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
send_article_event_history 말고 기존의 뷰 기록을 누적하는 article_view_his에도 동일한 기록을 추가해야하나 고민중입니다...
view 기록이 두개의 테이블에 나뉘어들어가는 것이 맘에 걸려서..