From adf1dfc1f325fa4103824cf62bcaf1ddca1b8589 Mon Sep 17 00:00:00 2001 From: usbharu Date: Sun, 11 May 2025 23:09:25 +0900 Subject: [PATCH] feat: post content auto truncate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Postのcontentとtextを自動で制限文字数内に切り取るように --- .../core/domain/model/post/PostContent.kt | 40 ++++++++++++++++- .../core/domain/model/post/PostContentTest.kt | 44 +++++++++++++++++++ 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 hideout/hideout-core/src/test/kotlin/dev/usbharu/hideout/core/domain/model/post/PostContentTest.kt diff --git a/hideout/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/post/PostContent.kt b/hideout/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/post/PostContent.kt index 9f6b2db7..28944d80 100644 --- a/hideout/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/post/PostContent.kt +++ b/hideout/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/post/PostContent.kt @@ -18,11 +18,49 @@ package dev.usbharu.hideout.core.domain.model.post import dev.usbharu.hideout.core.domain.model.emoji.CustomEmojiId -data class PostContent(val text: String, val content: String, val emojiIds: List) { +class PostContent { + + val text: String + val content: String + val emojiIds: List + + constructor(text: String, content: String, emojiIds: List) { + this.text = text.take(TEXT_LENGTH) + this.content = content.take(CONTENT_LENGTH) + this.emojiIds = emojiIds.distinct() + } companion object { val empty = PostContent("", "", emptyList()) const val CONTENT_LENGTH = 5000 const val TEXT_LENGTH = 3000 } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as PostContent + + if (text != other.text) return false + if (content != other.content) return false + if (emojiIds != other.emojiIds) return false + + return true + } + + override fun hashCode(): Int { + var result = text.hashCode() + result = 31 * result + content.hashCode() + result = 31 * result + emojiIds.hashCode() + return result + } + + override fun toString(): String { + return "PostContent(" + + "text='$text', " + + "content='$content', " + + "emojiIds=$emojiIds" + + ")" + } } diff --git a/hideout/hideout-core/src/test/kotlin/dev/usbharu/hideout/core/domain/model/post/PostContentTest.kt b/hideout/hideout-core/src/test/kotlin/dev/usbharu/hideout/core/domain/model/post/PostContentTest.kt new file mode 100644 index 00000000..e0da8111 --- /dev/null +++ b/hideout/hideout-core/src/test/kotlin/dev/usbharu/hideout/core/domain/model/post/PostContentTest.kt @@ -0,0 +1,44 @@ +package dev.usbharu.hideout.core.domain.model.post + +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test + +class PostContentTest { + @Test + fun textがtext_lengthを超える場合は切り取られる() { + val postContent = PostContent( + "a".repeat(PostContent.TEXT_LENGTH + 1), + "b".repeat(PostContent.CONTENT_LENGTH), + emptyList() + ) + + assertEquals(postContent.text, "a".repeat(PostContent.TEXT_LENGTH)) + assertEquals(postContent.content, "b".repeat(PostContent.CONTENT_LENGTH)) + } + + @Test + fun contentがcontent_lengthを超える場合は切り取られる() { + val postContent = PostContent( + "a".repeat(PostContent.TEXT_LENGTH), + "b".repeat(PostContent.CONTENT_LENGTH + 1), + emptyList() + ) + + assertEquals(postContent.text, "a".repeat(PostContent.TEXT_LENGTH)) + assertEquals(postContent.content, "b".repeat(PostContent.CONTENT_LENGTH)) + } + + @Test + fun textとcontentがtext_lengthとcontent_lengthを超えない場合は変わらない() { + val postContent = PostContent( + "a".repeat(PostContent.TEXT_LENGTH), + "b".repeat(PostContent.CONTENT_LENGTH), + emptyList() + ) + + assertEquals(postContent.text, "a".repeat(PostContent.TEXT_LENGTH)) + assertEquals(postContent.content, "b".repeat(PostContent.CONTENT_LENGTH)) + } + + +} \ No newline at end of file