This commit is contained in:
InsanusMokrassar 2019-11-04 20:54:08 +06:00
parent 93c3ebd870
commit 44d89b3a47
3 changed files with 32 additions and 24 deletions

View File

@ -3,6 +3,8 @@ package com.insanusmokrassar.postssystem.core.post.api
import com.insanusmokrassar.postssystem.core.content.ContentId import com.insanusmokrassar.postssystem.core.content.ContentId
import com.insanusmokrassar.postssystem.core.post.PostId import com.insanusmokrassar.postssystem.core.post.PostId
import com.insanusmokrassar.postssystem.core.post.RegisteredPost import com.insanusmokrassar.postssystem.core.post.RegisteredPost
import com.insanusmokrassar.postssystem.core.utils.MAX_DATE
import com.insanusmokrassar.postssystem.core.utils.MIN_DATE
import com.insanusmokrassar.postssystem.core.utils.pagination.Pagination import com.insanusmokrassar.postssystem.core.utils.pagination.Pagination
import com.insanusmokrassar.postssystem.core.utils.pagination.PaginationResult import com.insanusmokrassar.postssystem.core.utils.pagination.PaginationResult
import org.joda.time.DateTime import org.joda.time.DateTime
@ -24,10 +26,18 @@ interface ReadPostsAPI {
/** /**
* @return all [RegisteredPost]s between [from] and [to]. Range will be used INCLUSIVE, line \[[from], [to]\] * @return all [RegisteredPost]s between [from] and [to]. Range will be used INCLUSIVE, line \[[from], [to]\]
*/ */
suspend fun getPostsByDates(from: DateTime? = null, to: DateTime? = null): List<RegisteredPost> suspend fun getPostsByDates(from: DateTime = MIN_DATE, to: DateTime = MAX_DATE): List<RegisteredPost>
/** /**
* @return all posts by pages basing on their creation date * @return all posts by pages basing on their creation date
*/ */
suspend fun getPostsByPagination(pagination: Pagination): PaginationResult<out RegisteredPost> suspend fun getPostsByPagination(pagination: Pagination): PaginationResult<out RegisteredPost>
} }
suspend fun ReadPostsAPI.getPostsByDates(
from: DateTime? = null,
to: DateTime? = null
) = getPostsByDates(
from ?: MIN_DATE,
to ?: MAX_DATE
)

View File

@ -2,8 +2,5 @@ package com.insanusmokrassar.postssystem.core.utils
import org.joda.time.DateTime import org.joda.time.DateTime
fun DateTime?.orMin(): DateTime = this ?: MIN_DATE internal val MIN_DATE = DateTime(0)
fun DateTime?.orMax(): DateTime = this ?: MAX_DATE internal val MAX_DATE = DateTime(Long.MAX_VALUE)
private val MIN_DATE = DateTime(Long.MIN_VALUE)
private val MAX_DATE = DateTime(Long.MAX_VALUE)

View File

@ -45,13 +45,13 @@ class InMemoryPostsAPI(
} }
override suspend fun deletePost(id: PostId): Boolean { override suspend fun deletePost(id: PostId): Boolean {
return posts.remove(id) ?.also { return posts.remove(id)?.also {
postDeletedBroadcastChannel.send(it) postDeletedBroadcastChannel.send(it)
} != null } != null
} }
override suspend fun updatePostContent(postId: PostId, post: Post): Boolean { override suspend fun updatePostContent(postId: PostId, post: Post): Boolean {
return getPostById(postId) ?.also { dbPost -> return getPostById(postId)?.also { dbPost ->
val newPost = SimpleRegisteredPost( val newPost = SimpleRegisteredPost(
dbPost.id, dbPost.id,
post.content, post.content,
@ -65,22 +65,23 @@ class InMemoryPostsAPI(
override suspend fun getPostById(id: PostId): RegisteredPost? = posts[id] override suspend fun getPostById(id: PostId): RegisteredPost? = posts[id]
override suspend fun getPostsByContent(id: ContentId): List<RegisteredPost> = posts.values.filter { post -> override suspend fun getPostsByContent(id: ContentId): List<RegisteredPost> =
id in post.content posts.values.filter { post -> id in post.content }
override suspend fun getPostsByDates(from: DateTime, to: DateTime): List<RegisteredPost> =
(from .. to).let { range ->
posts.values.filter {
it.creationDate in range
} }
override suspend fun getPostsByDates(from: DateTime?, to: DateTime?): List<RegisteredPost> = posts.values.filter {
from ?.let { _ -> it.creationDate >= from } ?: true && to ?.let { _ -> it.creationDate <= to } ?: true
} }
override suspend fun getPostsByPagination( override suspend fun getPostsByPagination(
pagination: Pagination pagination: Pagination
): PaginationResult<out RegisteredPost> = sortedByDatePosts.subList( ): PaginationResult<out RegisteredPost> = pagination.createResult(
commonObjectsNumber = posts.size,
results = sortedByDatePosts.subList(
pagination.firstIndex, pagination.firstIndex,
pagination.lastIndex pagination.lastIndex
).let {
PaginationResult(
pagination.page,
posts.size / pagination.size,
it
) )
} )
} }