From cab50e61a5a382c5f05381f6caef735794623f0d Mon Sep 17 00:00:00 2001 From: usbharu <64310155+usbharu@users.noreply.github.com> Date: Fri, 29 Sep 2023 19:19:05 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8B=95=E7=9A=84=E3=81=AB=E3=82=AF?= =?UTF-8?q?=E3=82=A8=E3=83=AA=E3=82=92=E6=A7=8B=E7=AF=89=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../post/MongoGenerateTimelineService.kt | 38 ++++++++++++++----- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/src/main/kotlin/dev/usbharu/hideout/service/post/MongoGenerateTimelineService.kt b/src/main/kotlin/dev/usbharu/hideout/service/post/MongoGenerateTimelineService.kt index 80ecf75e..d2399c3b 100644 --- a/src/main/kotlin/dev/usbharu/hideout/service/post/MongoGenerateTimelineService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/service/post/MongoGenerateTimelineService.kt @@ -1,17 +1,19 @@ package dev.usbharu.hideout.service.post import dev.usbharu.hideout.domain.mastodon.model.generated.Status +import dev.usbharu.hideout.domain.model.hideout.entity.Timeline import dev.usbharu.hideout.query.mastodon.StatusQueryService import dev.usbharu.hideout.repository.MongoTimelineRepository -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext -import org.springframework.data.domain.Pageable +import org.springframework.data.mongodb.core.MongoTemplate +import org.springframework.data.mongodb.core.query.Criteria +import org.springframework.data.mongodb.core.query.Query import org.springframework.stereotype.Service @Service class MongoGenerateTimelineService( private val mongoTimelineRepository: MongoTimelineRepository, - private val statusQueryService: StatusQueryService + private val statusQueryService: StatusQueryService, + private val mongoTemplate: MongoTemplate ) : GenerateTimelineService { override suspend fun getTimeline( @@ -23,12 +25,28 @@ class MongoGenerateTimelineService( sinceId: Long?, limit: Int ): List { - val timelines = - withContext(Dispatchers.IO) { - mongoTimelineRepository.findByUserIdAndTimelineIdAndPostIdBetweenAndIsLocal( - forUserId, 0, maxId, minId, localOnly, Pageable.ofSize(limit) - ) - } + + + val query = Query() + if (forUserId != null) { + val criteria = Criteria.where("userId").`is`(forUserId) + query.addCriteria(criteria) + } + if (localOnly) { + val criteria = Criteria.where("isLocal").`is`(true) + query.addCriteria(criteria) + } + if (maxId != null) { + val criteria = Criteria.where("postId").lt(maxId) + query.addCriteria(criteria) + } + if (minId != null) { + val criteria = Criteria.where("postId").gt(minId) + query.addCriteria(criteria) + } + + val timelines = mongoTemplate.find(query.limit(limit), Timeline::class.java) + return statusQueryService.findByPostIds(timelines.flatMap { setOfNotNull(it.postId, it.replyId, it.repostId) }) } }