feat: DefaultTimelineStore

This commit is contained in:
usbharu 2024-07-19 23:49:14 +09:00
parent b4c62fbd43
commit 3057d9cc5a
Signed by: usbharu
GPG Key ID: 6556747BF94EEBC8
4 changed files with 78 additions and 18 deletions

View File

@ -0,0 +1,8 @@
package dev.usbharu.hideout.core.config
import org.springframework.boot.context.properties.ConfigurationProperties
@ConfigurationProperties("hideout.timeline.default")
data class DefaultTimelineStoreConfig(
val actorPostsCount: Int = 500
)

View File

@ -5,4 +5,6 @@ interface TimelineRepository {
suspend fun delete(timeline: Timeline) suspend fun delete(timeline: Timeline)
suspend fun findByIds(ids: List<TimelineId>): List<Timeline> suspend fun findByIds(ids: List<TimelineId>): List<Timeline>
suspend fun findById(id: TimelineId): Timeline?
} }

View File

@ -6,6 +6,7 @@ import dev.usbharu.hideout.core.domain.model.filter.FilteredPost
import dev.usbharu.hideout.core.domain.model.post.Post import dev.usbharu.hideout.core.domain.model.post.Post
import dev.usbharu.hideout.core.domain.model.post.PostId import dev.usbharu.hideout.core.domain.model.post.PostId
import dev.usbharu.hideout.core.domain.model.timeline.Timeline import dev.usbharu.hideout.core.domain.model.timeline.Timeline
import dev.usbharu.hideout.core.domain.model.timeline.TimelineId
import dev.usbharu.hideout.core.domain.model.timelineobject.TimelineObject import dev.usbharu.hideout.core.domain.model.timelineobject.TimelineObject
import dev.usbharu.hideout.core.domain.model.timelineobject.TimelineObjectId import dev.usbharu.hideout.core.domain.model.timelineobject.TimelineObjectId
import dev.usbharu.hideout.core.domain.model.timelinerelationship.TimelineRelationship import dev.usbharu.hideout.core.domain.model.timelinerelationship.TimelineRelationship
@ -15,7 +16,7 @@ import dev.usbharu.hideout.core.external.timeline.TimelineStore
abstract class AbstractTimelineStore(private val idGenerateService: IdGenerateService) : TimelineStore { abstract class AbstractTimelineStore(private val idGenerateService: IdGenerateService) : TimelineStore {
override suspend fun addPost(post: Post) { override suspend fun addPost(post: Post) {
val timelineList = getTimeline(post.actorId) val timelineList = getTimelines(post.actorId)
val repost = post.repostId?.let { getPost(it) } val repost = post.repostId?.let { getPost(it) }
@ -26,7 +27,9 @@ abstract class AbstractTimelineStore(private val idGenerateService: IdGenerateSe
insertTimelineObject(timelineObjectList) insertTimelineObject(timelineObjectList)
} }
protected abstract suspend fun getTimeline(actorId: ActorId): List<Timeline> protected abstract suspend fun getTimelines(actorId: ActorId): List<Timeline>
protected abstract suspend fun getTimeline(timelineId: TimelineId): Timeline?
protected suspend fun createTimelineObject(post: Post, repost: Post?, timeline: Timeline): TimelineObject { protected suspend fun createTimelineObject(post: Post, repost: Post?, timeline: Timeline): TimelineObject {
val filters = getFilters(timeline.userDetailId) val filters = getFilters(timeline.userDetailId)
@ -35,19 +38,12 @@ abstract class AbstractTimelineStore(private val idGenerateService: IdGenerateSe
if (repost != null) { if (repost != null) {
return TimelineObject.create( return TimelineObject.create(
TimelineObjectId(idGenerateService.generateId()), TimelineObjectId(idGenerateService.generateId()), timeline, post, repost, applyFilters.filterResults
timeline,
post,
repost,
applyFilters.filterResults
) )
} }
return TimelineObject.create( return TimelineObject.create(
TimelineObjectId(idGenerateService.generateId()), TimelineObjectId(idGenerateService.generateId()), timeline, post, applyFilters.filterResults
timeline,
post,
applyFilters.filterResults
) )
} }
@ -63,6 +59,12 @@ abstract class AbstractTimelineStore(private val idGenerateService: IdGenerateSe
protected abstract suspend fun removeTimelineObject(postId: PostId) protected abstract suspend fun removeTimelineObject(postId: PostId)
protected abstract suspend fun removeTimelineObject(timelineId: TimelineId, actorId: ActorId)
protected abstract suspend fun removeTimelineObject(timelineId: TimelineId)
protected abstract suspend fun getPosts(timelineRelationshipList: List<TimelineRelationship>): List<Post>
override suspend fun updatePost(post: Post) { override suspend fun updatePost(post: Post) {
@ -79,23 +81,39 @@ abstract class AbstractTimelineStore(private val idGenerateService: IdGenerateSe
} }
} }
protected abstract suspend fun getActorPost(actorId: ActorId): List<Post>
override suspend fun removePost(post: Post) { override suspend fun removePost(post: Post) {
TODO("Not yet implemented") removeTimelineObject(post.id)
} }
override suspend fun addTimelineRelationship(timelineRelationship: TimelineRelationship) { override suspend fun addTimelineRelationship(timelineRelationship: TimelineRelationship) {
TODO("Not yet implemented") val postList = getActorPost(timelineRelationship.actorId)
val timeline = getTimeline(timelineRelationship.timelineId) ?: return
val timelineObjects = postList.map { post ->
val repost = post.repostId?.let { getPost(it) }
createTimelineObject(post, repost, timeline)
}
insertTimelineObject(timelineObjects)
} }
override suspend fun removeTimelineRelationship(timelineRelationship: TimelineRelationship) { override suspend fun removeTimelineRelationship(timelineRelationship: TimelineRelationship) {
TODO("Not yet implemented") removeTimelineObject(timelineRelationship.timelineId, timelineRelationship.actorId)
} }
override suspend fun addTimeline(timeline: Timeline, timelineRelationshipList: List<TimelineRelationship>) { override suspend fun addTimeline(timeline: Timeline, timelineRelationshipList: List<TimelineRelationship>) {
TODO("Not yet implemented") val postList = getPosts(timelineRelationshipList)
val timelineObjectList = postList.map { post ->
val repost = post.repostId?.let { getPost(it) }
createTimelineObject(post, repost, timeline)
}
insertTimelineObject(timelineObjectList)
} }
override suspend fun removeTimeline(timeline: Timeline) { override suspend fun removeTimeline(timeline: Timeline) {
TODO("Not yet implemented") removeTimelineObject(timeline.id)
} }
} }

View File

@ -1,5 +1,6 @@
package dev.usbharu.hideout.core.infrastructure.timeline package dev.usbharu.hideout.core.infrastructure.timeline
import dev.usbharu.hideout.core.config.DefaultTimelineStoreConfig
import dev.usbharu.hideout.core.domain.model.actor.ActorId import dev.usbharu.hideout.core.domain.model.actor.ActorId
import dev.usbharu.hideout.core.domain.model.filter.Filter import dev.usbharu.hideout.core.domain.model.filter.Filter
import dev.usbharu.hideout.core.domain.model.filter.FilterContext import dev.usbharu.hideout.core.domain.model.filter.FilterContext
@ -9,8 +10,10 @@ import dev.usbharu.hideout.core.domain.model.post.Post
import dev.usbharu.hideout.core.domain.model.post.PostId import dev.usbharu.hideout.core.domain.model.post.PostId
import dev.usbharu.hideout.core.domain.model.post.PostRepository import dev.usbharu.hideout.core.domain.model.post.PostRepository
import dev.usbharu.hideout.core.domain.model.timeline.Timeline import dev.usbharu.hideout.core.domain.model.timeline.Timeline
import dev.usbharu.hideout.core.domain.model.timeline.TimelineId
import dev.usbharu.hideout.core.domain.model.timeline.TimelineRepository import dev.usbharu.hideout.core.domain.model.timeline.TimelineRepository
import dev.usbharu.hideout.core.domain.model.timelineobject.TimelineObject import dev.usbharu.hideout.core.domain.model.timelineobject.TimelineObject
import dev.usbharu.hideout.core.domain.model.timelinerelationship.TimelineRelationship
import dev.usbharu.hideout.core.domain.model.timelinerelationship.TimelineRelationshipRepository import dev.usbharu.hideout.core.domain.model.timelinerelationship.TimelineRelationshipRepository
import dev.usbharu.hideout.core.domain.model.userdetails.UserDetailId import dev.usbharu.hideout.core.domain.model.userdetails.UserDetailId
import dev.usbharu.hideout.core.domain.service.filter.FilterDomainService import dev.usbharu.hideout.core.domain.service.filter.FilterDomainService
@ -24,9 +27,10 @@ open class DefaultTimelineStore(
private val filterRepository: FilterRepository, private val filterRepository: FilterRepository,
private val postRepository: PostRepository, private val postRepository: PostRepository,
private val filterDomainService: FilterDomainService, private val filterDomainService: FilterDomainService,
idGenerateService: IdGenerateService idGenerateService: IdGenerateService,
private val defaultTimelineStoreConfig: DefaultTimelineStoreConfig
) : AbstractTimelineStore(idGenerateService) { ) : AbstractTimelineStore(idGenerateService) {
override suspend fun getTimeline(actorId: ActorId): List<Timeline> { override suspend fun getTimelines(actorId: ActorId): List<Timeline> {
return timelineRepository.findByIds( return timelineRepository.findByIds(
timelineRelationshipRepository timelineRelationshipRepository
.findByActorId( .findByActorId(
@ -35,6 +39,10 @@ open class DefaultTimelineStore(
) )
} }
override suspend fun getTimeline(timelineId: TimelineId): Timeline? {
return timelineRepository.findById(timelineId)
}
override suspend fun getFilters(userDetailId: UserDetailId): List<Filter> { override suspend fun getFilters(userDetailId: UserDetailId): List<Filter> {
return filterRepository.findByUserDetailId(userDetailId) return filterRepository.findByUserDetailId(userDetailId)
} }
@ -50,4 +58,28 @@ open class DefaultTimelineStore(
override suspend fun insertTimelineObject(timelineObjectList: List<TimelineObject>) { override suspend fun insertTimelineObject(timelineObjectList: List<TimelineObject>) {
TODO("Not yet implemented") TODO("Not yet implemented")
} }
override suspend fun getTimelineObjectByPostId(postId: PostId): List<TimelineObject> {
TODO("Not yet implemented")
}
override suspend fun removeTimelineObject(postId: PostId) {
TODO("Not yet implemented")
}
override suspend fun removeTimelineObject(timelineId: TimelineId, actorId: ActorId) {
TODO("Not yet implemented")
}
override suspend fun removeTimelineObject(timelineId: TimelineId) {
TODO("Not yet implemented")
}
override suspend fun getPosts(timelineRelationshipList: List<TimelineRelationship>): List<Post> {
TODO("Not yet implemented")
}
override suspend fun getActorPost(actorId: ActorId): List<Post> {
postRepository.findByActorId()
}
} }