diff --git a/src/main/kotlin/dev/usbharu/hideout/Application.kt b/src/main/kotlin/dev/usbharu/hideout/Application.kt index aec8f304..5052c79c 100644 --- a/src/main/kotlin/dev/usbharu/hideout/Application.kt +++ b/src/main/kotlin/dev/usbharu/hideout/Application.kt @@ -108,12 +108,12 @@ fun Application.parent() { inject().value, ) configureRouting( - httpSignatureVerifyService = inject().value, - activityPubService = inject().value, - userService = inject().value, - activityPubUserService = inject().value, - postService = inject().value, - userApiService = inject().value, + httpSignatureVerifyService = inject().value, + activityPubService = inject().value, + userService = inject().value, + activityPubUserService = inject().value, + postService = inject().value, + userApiService = inject().value, ) } diff --git a/src/main/kotlin/dev/usbharu/hideout/domain/model/ap/Emoji.kt b/src/main/kotlin/dev/usbharu/hideout/domain/model/ap/Emoji.kt index 8012b4fd..35806687 100644 --- a/src/main/kotlin/dev/usbharu/hideout/domain/model/ap/Emoji.kt +++ b/src/main/kotlin/dev/usbharu/hideout/domain/model/ap/Emoji.kt @@ -5,16 +5,19 @@ open class Emoji : Object { var icon: Image? = null protected constructor() : super() - constructor(type: List, - name: String?, - actor: String?, - id: String?, - updated: String?, - icon: Image?) : super( - type = add(type, "Emoji"), - name = name, - actor = actor, - id = id) { + constructor( + type: List, + name: String?, + actor: String?, + id: String?, + updated: String?, + icon: Image? + ) : super( + type = add(type, "Emoji"), + name = name, + actor = actor, + id = id + ) { this.updated = updated this.icon = icon } @@ -36,6 +39,4 @@ open class Emoji : Object { } override fun toString(): String = "Emoji(updated=$updated, icon=$icon) ${super.toString()}" - - } diff --git a/src/main/kotlin/dev/usbharu/hideout/domain/model/ap/Like.kt b/src/main/kotlin/dev/usbharu/hideout/domain/model/ap/Like.kt index 68a1aa47..c4eb3abf 100644 --- a/src/main/kotlin/dev/usbharu/hideout/domain/model/ap/Like.kt +++ b/src/main/kotlin/dev/usbharu/hideout/domain/model/ap/Like.kt @@ -10,18 +10,20 @@ open class Like : Object { var tag: List = emptyList() protected constructor() : super() - constructor(type: List, - name: String?, - actor: String?, - id: String?, - `object`: String?, - content: String?, - tag: List + constructor( + type: List, + name: String?, + actor: String?, + id: String?, + `object`: String?, + content: String?, + tag: List ) : super( - type = add(type, "Like"), - name = name, - actor = actor, - id = id) { + type = add(type, "Like"), + name = name, + actor = actor, + id = id + ) { this.`object` = `object` this.content = content this.tag = tag @@ -46,6 +48,4 @@ open class Like : Object { } override fun toString(): String = "Like(`object`=$`object`, content=$content, tag=$tag) ${super.toString()}" - - } diff --git a/src/main/kotlin/dev/usbharu/hideout/plugins/Routing.kt b/src/main/kotlin/dev/usbharu/hideout/plugins/Routing.kt index 6a52f394..5931ad53 100644 --- a/src/main/kotlin/dev/usbharu/hideout/plugins/Routing.kt +++ b/src/main/kotlin/dev/usbharu/hideout/plugins/Routing.kt @@ -18,12 +18,12 @@ import io.ktor.server.routing.* @Suppress("LongParameterList") fun Application.configureRouting( - httpSignatureVerifyService: HttpSignatureVerifyService, - activityPubService: ActivityPubService, - userService: IUserService, - activityPubUserService: ActivityPubUserService, - postService: IPostApiService, - userApiService: IUserApiService + httpSignatureVerifyService: HttpSignatureVerifyService, + activityPubService: ActivityPubService, + userService: IUserService, + activityPubUserService: ActivityPubUserService, + postService: IPostApiService, + userApiService: IUserApiService ) { install(AutoHeadResponse) routing { diff --git a/src/main/kotlin/dev/usbharu/hideout/repository/IPostRepository.kt b/src/main/kotlin/dev/usbharu/hideout/repository/IPostRepository.kt index 8887853e..39f91ad1 100644 --- a/src/main/kotlin/dev/usbharu/hideout/repository/IPostRepository.kt +++ b/src/main/kotlin/dev/usbharu/hideout/repository/IPostRepository.kt @@ -11,33 +11,33 @@ interface IPostRepository { suspend fun findByUrl(url: String): Post? suspend fun delete(id: Long) suspend fun findAll( - since: Instant?, - until: Instant?, - minId: Long?, - maxId: Long?, - limit: Int?, - userId: Long? + since: Instant?, + until: Instant?, + minId: Long?, + maxId: Long?, + limit: Int?, + userId: Long? ): List suspend fun findByUserNameAndDomain( - username: String, - s: String, - since: Instant?, - until: Instant?, - minId: Long?, - maxId: Long?, - limit: Int?, - userId: Long? + username: String, + s: String, + since: Instant?, + until: Instant?, + minId: Long?, + maxId: Long?, + limit: Int?, + userId: Long? ): List suspend fun findByUserId( - idOrNull: Long, - since: Instant?, - until: Instant?, - minId: Long?, - maxId: Long?, - limit: Int?, - userId: Long? + idOrNull: Long, + since: Instant?, + until: Instant?, + minId: Long?, + maxId: Long?, + limit: Int?, + userId: Long? ): List suspend fun findByApId(id: String): Post? diff --git a/src/main/kotlin/dev/usbharu/hideout/repository/PostRepositoryImpl.kt b/src/main/kotlin/dev/usbharu/hideout/repository/PostRepositoryImpl.kt index a92889c1..6360e609 100644 --- a/src/main/kotlin/dev/usbharu/hideout/repository/PostRepositoryImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/repository/PostRepositoryImpl.kt @@ -81,37 +81,37 @@ class PostRepositoryImpl(database: Database, private val idGenerateService: IdGe } override suspend fun findAll( - since: Instant?, - until: Instant?, - minId: Long?, - maxId: Long?, - limit: Int?, - userId: Long? + since: Instant?, + until: Instant?, + minId: Long?, + maxId: Long?, + limit: Int?, + userId: Long? ): List { TODO("Not yet implemented") } override suspend fun findByUserNameAndDomain( - username: String, - s: String, - since: Instant?, - until: Instant?, - minId: Long?, - maxId: Long?, - limit: Int?, - userId: Long? + username: String, + s: String, + since: Instant?, + until: Instant?, + minId: Long?, + maxId: Long?, + limit: Int?, + userId: Long? ): List { TODO("Not yet implemented") } override suspend fun findByUserId( - idOrNull: Long, - since: Instant?, - until: Instant?, - minId: Long?, - maxId: Long?, - limit: Int?, - userId: Long? + idOrNull: Long, + since: Instant?, + until: Instant?, + minId: Long?, + maxId: Long?, + limit: Int?, + userId: Long? ): List { TODO("Not yet implemented") } @@ -140,16 +140,16 @@ object Posts : Table() { fun ResultRow.toPost(): Post { return Post( - id = this[Posts.id], - userId = this[Posts.userId], - overview = this[Posts.overview], - text = this[Posts.text], - createdAt = this[Posts.createdAt], - visibility = Visibility.values().first { visibility -> visibility.ordinal == this[Posts.visibility] }, - url = this[Posts.url], - repostId = this[Posts.repostId], - replyId = this[Posts.replyId], - sensitive = this[Posts.sensitive], - apId = this[Posts.apId] + id = this[Posts.id], + userId = this[Posts.userId], + overview = this[Posts.overview], + text = this[Posts.text], + createdAt = this[Posts.createdAt], + visibility = Visibility.values().first { visibility -> visibility.ordinal == this[Posts.visibility] }, + url = this[Posts.url], + repostId = this[Posts.repostId], + replyId = this[Posts.replyId], + sensitive = this[Posts.sensitive], + apId = this[Posts.apId] ) } diff --git a/src/main/kotlin/dev/usbharu/hideout/repository/ReactionRepositoryImpl.kt b/src/main/kotlin/dev/usbharu/hideout/repository/ReactionRepositoryImpl.kt index bb87ec37..0349b8b2 100644 --- a/src/main/kotlin/dev/usbharu/hideout/repository/ReactionRepositoryImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/repository/ReactionRepositoryImpl.kt @@ -10,7 +10,10 @@ import org.jetbrains.exposed.sql.transactions.transaction import org.koin.core.annotation.Single @Single -class ReactionRepositoryImpl(private val database: Database, private val idGenerateService: IdGenerateService) : ReactionRepository { +class ReactionRepositoryImpl( + private val database: Database, + private val idGenerateService: IdGenerateService +) : ReactionRepository { init { transaction(database) { @@ -19,10 +22,9 @@ class ReactionRepositoryImpl(private val database: Database, private val idGener } } - @Suppress("InjectDispatcher") suspend fun query(block: suspend () -> T): T = - newSuspendedTransaction(Dispatchers.IO) { block() } + newSuspendedTransaction(Dispatchers.IO) { block() } override suspend fun generateId(): Long = idGenerateService.generateId() @@ -40,7 +42,6 @@ class ReactionRepositoryImpl(private val database: Database, private val idGener it[emojiId] = reaction.emojiId it[postId] = reaction.postId it[userId] = reaction.userId - } } } @@ -49,17 +50,21 @@ class ReactionRepositoryImpl(private val database: Database, private val idGener override suspend fun reactionAlreadyExist(postId: Long, userId: Long, emojiId: Long): Boolean { return query { - Reactions.select { Reactions.postId.eq(postId).and(Reactions.userId.eq(userId)).and(Reactions.emojiId.eq(emojiId)) }.empty().not() + Reactions.select { + Reactions.postId.eq(postId).and(Reactions.userId.eq(userId)).and( + Reactions.emojiId.eq(emojiId) + ) + }.empty().not() } } } fun ResultRow.toReaction(): Reaction { return Reaction( - this[Reactions.id].value, - this[Reactions.emojiId], - this[Reactions.postId], - this[Reactions.userId] + this[Reactions.id].value, + this[Reactions.emojiId], + this[Reactions.postId], + this[Reactions.userId] ) } diff --git a/src/main/kotlin/dev/usbharu/hideout/routing/api/internal/v1/Posts.kt b/src/main/kotlin/dev/usbharu/hideout/routing/api/internal/v1/Posts.kt index 2312d575..55078b69 100644 --- a/src/main/kotlin/dev/usbharu/hideout/routing/api/internal/v1/Posts.kt +++ b/src/main/kotlin/dev/usbharu/hideout/routing/api/internal/v1/Posts.kt @@ -51,14 +51,14 @@ fun Route.posts(postApiService: IPostApiService) { get { val userId = call.principal()?.payload?.getClaim("uid")?.asLong() val targetUserName = call.parameters["name"] - ?: throw ParameterNotExistException("Parameter(name='userName@domain') does not exist.") + ?: throw ParameterNotExistException("Parameter(name='userName@domain') does not exist.") val posts = postApiService.getByUser(targetUserName, userId = userId) call.respond(posts) } get("/{id}") { val userId = call.principal()?.payload?.getClaim("uid")?.asLong() val id = call.parameters["id"]?.toLong() - ?: throw ParameterNotExistException("Parameter(name='postsId' does not exist.") + ?: throw ParameterNotExistException("Parameter(name='postsId' does not exist.") val post = postApiService.getById(id, userId) call.respond(post) } diff --git a/src/main/kotlin/dev/usbharu/hideout/routing/api/internal/v1/Users.kt b/src/main/kotlin/dev/usbharu/hideout/routing/api/internal/v1/Users.kt index 23142bd7..8609e439 100644 --- a/src/main/kotlin/dev/usbharu/hideout/routing/api/internal/v1/Users.kt +++ b/src/main/kotlin/dev/usbharu/hideout/routing/api/internal/v1/Users.kt @@ -43,9 +43,9 @@ fun Route.users(userService: IUserService, userApiService: IUserApiService) { get { val userParameter = ( call.parameters["name"] - ?: throw ParameterNotExistException( - "Parameter(name='userName@domain') does not exist." - ) + ?: throw ParameterNotExistException( + "Parameter(name='userName@domain') does not exist." + ) ) if (userParameter.toLongOrNull() != null) { return@get call.respond(userApiService.findById(userParameter.toLong())) @@ -93,9 +93,9 @@ fun Route.users(userService: IUserService, userApiService: IUserApiService) { get { val userParameter = ( call.parameters["name"] - ?: throw ParameterNotExistException( - "Parameter(name='userName@domain') does not exist." - ) + ?: throw ParameterNotExistException( + "Parameter(name='userName@domain') does not exist." + ) ) if (userParameter.toLongOrNull() != null) { return@get call.respond(userApiService.findFollowings(userParameter.toLong())) diff --git a/src/main/kotlin/dev/usbharu/hideout/service/activitypub/ActivityPubLikeServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/service/activitypub/ActivityPubLikeServiceImpl.kt index 8b006df2..4d946e2e 100644 --- a/src/main/kotlin/dev/usbharu/hideout/service/activitypub/ActivityPubLikeServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/service/activitypub/ActivityPubLikeServiceImpl.kt @@ -11,13 +11,14 @@ import dev.usbharu.hideout.service.user.IUserService import io.ktor.http.* import org.koin.core.annotation.Single - @Single -class ActivityPubLikeServiceImpl(private val reactionService: IReactionService, - private val activityPubUserService: ActivityPubUserService, - private val userService: IUserService, - private val postService: IPostRepository, - private val activityPubNoteService: ActivityPubNoteService) : ActivityPubLikeService { +class ActivityPubLikeServiceImpl( + private val reactionService: IReactionService, + private val activityPubUserService: ActivityPubUserService, + private val userService: IUserService, + private val postService: IPostRepository, + private val activityPubNoteService: ActivityPubNoteService +) : ActivityPubLikeService { override suspend fun receiveLike(like: Like): ActivityPubResponse { val actor = like.actor ?: throw IllegalActivityPubObjectException("actor is null") val content = like.content ?: throw IllegalActivityPubObjectException("content is null") @@ -25,11 +26,13 @@ class ActivityPubLikeServiceImpl(private val reactionService: IReactionService, val person = activityPubUserService.fetchPerson(actor) activityPubNoteService.fetchNote(like.`object`!!) - val user = userService.findByUrl(person.url - ?: throw IllegalActivityPubObjectException("actor is not found")) + val user = userService.findByUrl( + person.url + ?: throw IllegalActivityPubObjectException("actor is not found") + ) val post = postService.findByUrl(like.`object`!!) - ?: throw PostNotFoundException("${like.`object`} was not found") + ?: throw PostNotFoundException("${like.`object`} was not found") reactionService.receiveReaction(content, actor.substringAfter("://").substringBefore("/"), user.id, post.id) return ActivityPubStringResponse(HttpStatusCode.OK, "") diff --git a/src/main/kotlin/dev/usbharu/hideout/service/activitypub/ActivityPubNoteServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/service/activitypub/ActivityPubNoteServiceImpl.kt index 117b207a..5d6338a5 100644 --- a/src/main/kotlin/dev/usbharu/hideout/service/activitypub/ActivityPubNoteServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/service/activitypub/ActivityPubNoteServiceImpl.kt @@ -22,11 +22,11 @@ import java.time.Instant @Single class ActivityPubNoteServiceImpl( - private val httpClient: HttpClient, - private val jobQueueParentService: JobQueueParentService, - private val userService: IUserService, - private val postRepository: IPostRepository, - private val activityPubUserService: ActivityPubUserService + private val httpClient: HttpClient, + private val jobQueueParentService: JobQueueParentService, + private val userService: IUserService, + private val postRepository: IPostRepository, + private val activityPubUserService: ActivityPubUserService ) : ActivityPubNoteService { private val logger = LoggerFactory.getLogger(this::class.java) @@ -48,24 +48,24 @@ class ActivityPubNoteServiceImpl( val actor = props[DeliverPostJob.actor] val postEntity = Config.configData.objectMapper.readValue(props[DeliverPostJob.post]) val note = Note( - name = "Note", - id = postEntity.url, - attributedTo = actor, - content = postEntity.text, - published = Instant.ofEpochMilli(postEntity.createdAt).toString(), - to = listOf(public, actor + "/follower") + name = "Note", + id = postEntity.url, + attributedTo = actor, + content = postEntity.text, + published = Instant.ofEpochMilli(postEntity.createdAt).toString(), + to = listOf(public, actor + "/follower") ) val inbox = props[DeliverPostJob.inbox] logger.debug("createNoteJob: actor={}, note={}, inbox={}", actor, postEntity, inbox) httpClient.postAp( - urlString = inbox, - username = "$actor#pubkey", - jsonLd = Create( - name = "Create Note", - `object` = note, - actor = note.attributedTo, - id = "${Config.configData.url}/create/note/${postEntity.id}" - ) + urlString = inbox, + username = "$actor#pubkey", + jsonLd = Create( + name = "Create Note", + `object` = note, + actor = note.attributedTo, + id = "${Config.configData.url}/create/note/${postEntity.id}" + ) ) } @@ -75,7 +75,8 @@ class ActivityPubNoteServiceImpl( return postToNote(post) } val response = httpClient.getAp( - url, targetActor?.let { "$targetActor#pubkey" } + url, + targetActor?.let { "$targetActor#pubkey" } ) val note = Config.configData.objectMapper.readValue(response.bodyAsText()) return note(note, targetActor, url) @@ -85,44 +86,44 @@ class ActivityPubNoteServiceImpl( val user = userService.findById(post.userId) val reply = post.replyId?.let { postRepository.findOneById(it) } return Note( - name = "Post", - id = post.apId, - attributedTo = user.url, - content = post.text, - published = Instant.ofEpochMilli(post.createdAt).toString(), - to = listOf(public, user.url + "/follower"), - sensitive = post.sensitive, - cc = listOf(public, user.url + "/follower"), - inReplyTo = reply?.url + name = "Post", + id = post.apId, + attributedTo = user.url, + content = post.text, + published = Instant.ofEpochMilli(post.createdAt).toString(), + to = listOf(public, user.url + "/follower"), + sensitive = post.sensitive, + cc = listOf(public, user.url + "/follower"), + inReplyTo = reply?.url ) } private suspend fun ActivityPubNoteServiceImpl.note( - note: Note, - targetActor: String?, - url: String + note: Note, + targetActor: String?, + url: String ): Note { val findByApId = postRepository.findByApId(url) if (findByApId != null) { return postToNote(findByApId) } val person = activityPubUserService.fetchPerson( - note.attributedTo ?: throw IllegalActivityPubObjectException("note.attributedTo is null"), - targetActor + note.attributedTo ?: throw IllegalActivityPubObjectException("note.attributedTo is null"), + targetActor ) val user = - userService.findByUrl(person.url ?: throw IllegalActivityPubObjectException("person.url is null")) + userService.findByUrl(person.url ?: throw IllegalActivityPubObjectException("person.url is null")) val visibility = - if (note.to.contains(public) && note.cc.contains(public)) { - Visibility.PUBLIC - } else if (note.to.find { it.endsWith("/followers") } != null && note.cc.contains(public)) { - Visibility.UNLISTED - } else if (note.to.find { it.endsWith("/followers") } != null) { - Visibility.FOLLOWERS - } else { - Visibility.DIRECT - } + if (note.to.contains(public) && note.cc.contains(public)) { + Visibility.PUBLIC + } else if (note.to.find { it.endsWith("/followers") } != null && note.cc.contains(public)) { + Visibility.UNLISTED + } else if (note.to.find { it.endsWith("/followers") } != null) { + Visibility.FOLLOWERS + } else { + Visibility.DIRECT + } val reply = note.inReplyTo?.let { fetchNote(it, targetActor) @@ -130,25 +131,25 @@ class ActivityPubNoteServiceImpl( } postRepository.save( - Post( - id = postRepository.generateId(), - userId = user.id, - overview = null, - text = note.content.orEmpty(), - createdAt = Instant.parse(note.published).toEpochMilli(), - visibility = visibility, - url = note.id ?: url, - repostId = null, - replyId = reply?.id, - sensitive = note.sensitive, - apId = note.id ?: url, - ) + Post( + id = postRepository.generateId(), + userId = user.id, + overview = null, + text = note.content.orEmpty(), + createdAt = Instant.parse(note.published).toEpochMilli(), + visibility = visibility, + url = note.id ?: url, + repostId = null, + replyId = reply?.id, + sensitive = note.sensitive, + apId = note.id ?: url, + ) ) return note } override suspend fun fetchNote(note: Note, targetActor: String?): Note = - note(note, targetActor, note.id ?: throw IllegalArgumentException("note.id is null")) + note(note, targetActor, note.id ?: throw IllegalArgumentException("note.id is null")) companion object { const val public: String = "https://www.w3.org/ns/activitystreams#Public" diff --git a/src/main/kotlin/dev/usbharu/hideout/service/activitypub/ActivityPubServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/service/activitypub/ActivityPubServiceImpl.kt index b153ad19..e5360563 100644 --- a/src/main/kotlin/dev/usbharu/hideout/service/activitypub/ActivityPubServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/service/activitypub/ActivityPubServiceImpl.kt @@ -17,12 +17,12 @@ import org.slf4j.LoggerFactory @Single class ActivityPubServiceImpl( - private val activityPubReceiveFollowService: ActivityPubReceiveFollowService, - private val activityPubNoteService: ActivityPubNoteService, - private val activityPubUndoService: ActivityPubUndoService, - private val activityPubAcceptService: ActivityPubAcceptService, - private val activityPubCreateService: ActivityPubCreateService, - private val activityPubLikeService: ActivityPubLikeService + private val activityPubReceiveFollowService: ActivityPubReceiveFollowService, + private val activityPubNoteService: ActivityPubNoteService, + private val activityPubUndoService: ActivityPubUndoService, + private val activityPubAcceptService: ActivityPubAcceptService, + private val activityPubCreateService: ActivityPubCreateService, + private val activityPubLikeService: ActivityPubLikeService ) : ActivityPubService { val logger: Logger = LoggerFactory.getLogger(this::class.java) diff --git a/src/main/kotlin/dev/usbharu/hideout/service/api/IPostApiService.kt b/src/main/kotlin/dev/usbharu/hideout/service/api/IPostApiService.kt index 3d205faa..eb7eb97a 100644 --- a/src/main/kotlin/dev/usbharu/hideout/service/api/IPostApiService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/service/api/IPostApiService.kt @@ -3,25 +3,26 @@ package dev.usbharu.hideout.service.api import dev.usbharu.hideout.domain.model.hideout.entity.Post import java.time.Instant +@Suppress("LongParameterList") interface IPostApiService { suspend fun createPost(postForm: dev.usbharu.hideout.domain.model.hideout.form.Post, userId: Long): Post suspend fun getById(id: Long, userId: Long?): Post suspend fun getAll( - since: Instant? = null, - until: Instant? = null, - minId: Long? = null, - maxId: Long? = null, - limit: Int? = null, - userId: Long? = null + since: Instant? = null, + until: Instant? = null, + minId: Long? = null, + maxId: Long? = null, + limit: Int? = null, + userId: Long? = null ): List suspend fun getByUser( - nameOrId: String, - since: Instant? = null, - until: Instant? = null, - minId: Long? = null, - maxId: Long? = null, - limit: Int? = null, - userId: Long? = null + nameOrId: String, + since: Instant? = null, + until: Instant? = null, + minId: Long? = null, + maxId: Long? = null, + limit: Int? = null, + userId: Long? = null ): List } diff --git a/src/main/kotlin/dev/usbharu/hideout/service/api/PostApiServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/service/api/PostApiServiceImpl.kt index 92ceb999..35e05585 100644 --- a/src/main/kotlin/dev/usbharu/hideout/service/api/PostApiServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/service/api/PostApiServiceImpl.kt @@ -13,58 +13,58 @@ import dev.usbharu.hideout.domain.model.hideout.form.Post as FormPost @Single class PostApiServiceImpl( - private val postService: IPostService, - private val postRepository: IPostRepository + private val postService: IPostService, + private val postRepository: IPostRepository ) : IPostApiService { override suspend fun createPost(postForm: FormPost, userId: Long): Post { return postService.createLocal( - PostCreateDto( - text = postForm.text, - overview = postForm.overview, - visibility = postForm.visibility, - repostId = postForm.repostId, - repolyId = postForm.replyId, - userId = userId - ) + PostCreateDto( + text = postForm.text, + overview = postForm.overview, + visibility = postForm.visibility, + repostId = postForm.repostId, + repolyId = postForm.replyId, + userId = userId + ) ) } override suspend fun getById(id: Long, userId: Long?): Post { return postRepository.findOneById(id, userId) - ?: throw PostNotFoundException("$id was not found or is not authorized.") + ?: throw PostNotFoundException("$id was not found or is not authorized.") } override suspend fun getAll( - since: Instant?, - until: Instant?, - minId: Long?, - maxId: Long?, - limit: Int?, - userId: Long? + since: Instant?, + until: Instant?, + minId: Long?, + maxId: Long?, + limit: Int?, + userId: Long? ): List = postRepository.findAll(since, until, minId, maxId, limit, userId) override suspend fun getByUser( - nameOrId: String, - since: Instant?, - until: Instant?, - minId: Long?, - maxId: Long?, - limit: Int?, - userId: Long? + nameOrId: String, + since: Instant?, + until: Instant?, + minId: Long?, + maxId: Long?, + limit: Int?, + userId: Long? ): List { val idOrNull = nameOrId.toLongOrNull() return if (idOrNull == null) { val acct = AcctUtil.parse(nameOrId) postRepository.findByUserNameAndDomain( - acct.username, - acct.domain - ?: Config.configData.domain, - since, - until, - minId, - maxId, - limit, - userId + username = acct.username, + s = acct.domain + ?: Config.configData.domain, + since = since, + until = until, + minId = minId, + maxId = maxId, + limit = limit, + userId = userId ) } else { postRepository.findByUserId(idOrNull, since, until, minId, maxId, limit, userId) diff --git a/src/main/kotlin/dev/usbharu/hideout/service/post/PostServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/service/post/PostServiceImpl.kt index d9384fe5..fbd204e8 100644 --- a/src/main/kotlin/dev/usbharu/hideout/service/post/PostServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/service/post/PostServiceImpl.kt @@ -11,23 +11,23 @@ import java.time.Instant @Single class PostServiceImpl( - private val postRepository: IPostRepository, - private val userRepository: IUserRepository, - private val activityPubNoteService: ActivityPubNoteService + private val postRepository: IPostRepository, + private val userRepository: IUserRepository, + private val activityPubNoteService: ActivityPubNoteService ) : IPostService { override suspend fun createLocal(post: PostCreateDto): Post { val user = userRepository.findById(post.userId) ?: throw UserNotFoundException("${post.userId} was not found") val id = postRepository.generateId() val createPost = Post( - id = id, - userId = post.userId, - overview = post.overview, - text = post.text, - createdAt = Instant.now().toEpochMilli(), - visibility = post.visibility, - url = "${user.url}/posts/$id", - repostId = null, - replyId = null + id = id, + userId = post.userId, + overview = post.overview, + text = post.text, + createdAt = Instant.now().toEpochMilli(), + visibility = post.visibility, + url = "${user.url}/posts/$id", + repostId = null, + replyId = null ) activityPubNoteService.createNote(createPost) return internalCreate(createPost) diff --git a/src/main/kotlin/dev/usbharu/hideout/service/reaction/ReactionServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/service/reaction/ReactionServiceImpl.kt index 89c039f1..cbf24753 100644 --- a/src/main/kotlin/dev/usbharu/hideout/service/reaction/ReactionServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/service/reaction/ReactionServiceImpl.kt @@ -9,7 +9,7 @@ class ReactionServiceImpl(private val reactionRepository: ReactionRepository) : override suspend fun receiveReaction(name: String, domain: String, userId: Long, postId: Long) { if (reactionRepository.reactionAlreadyExist(postId, userId, 0).not()) { reactionRepository.save( - Reaction(reactionRepository.generateId(), 0, postId, userId) + Reaction(reactionRepository.generateId(), 0, postId, userId) ) } } diff --git a/src/test/kotlin/dev/usbharu/hideout/routing/api/internal/v1/PostsTest.kt b/src/test/kotlin/dev/usbharu/hideout/routing/api/internal/v1/PostsTest.kt index d4777c46..0f2c1627 100644 --- a/src/test/kotlin/dev/usbharu/hideout/routing/api/internal/v1/PostsTest.kt +++ b/src/test/kotlin/dev/usbharu/hideout/routing/api/internal/v1/PostsTest.kt @@ -41,24 +41,24 @@ class PostsTest { createdAt = Instant.now().toEpochMilli(), url = "https://example.com/posts/1" ), - Post( - id = 123456, - userId = 4322, - text = "test2", - visibility = Visibility.PUBLIC, - createdAt = Instant.now().toEpochMilli(), - url = "https://example.com/posts/2" - ) + Post( + id = 123456, + userId = 4322, + text = "test2", + visibility = Visibility.PUBLIC, + createdAt = Instant.now().toEpochMilli(), + url = "https://example.com/posts/2" + ) ) val postService = mock { onBlocking { getAll( - since = anyOrNull(), - until = anyOrNull(), - minId = anyOrNull(), - maxId = anyOrNull(), - limit = anyOrNull(), - userId = isNull() + since = anyOrNull(), + until = anyOrNull(), + minId = anyOrNull(), + maxId = anyOrNull(), + limit = anyOrNull(), + userId = isNull() ) } doReturn posts } @@ -120,12 +120,12 @@ class PostsTest { val postService = mock { onBlocking { getAll( - since = anyOrNull(), - until = anyOrNull(), - minId = anyOrNull(), - maxId = anyOrNull(), - limit = anyOrNull(), - userId = isNotNull() + since = anyOrNull(), + until = anyOrNull(), + minId = anyOrNull(), + maxId = anyOrNull(), + limit = anyOrNull(), + userId = isNotNull() ) } doReturn posts } @@ -157,12 +157,12 @@ class PostsTest { config = ApplicationConfig("empty.conf") } val post = Post( - 12345, - 1234, - text = "aaa", - visibility = Visibility.PUBLIC, - createdAt = Instant.now().toEpochMilli(), - url = "https://example.com/posts/1" + 12345, + 1234, + text = "aaa", + visibility = Visibility.PUBLIC, + createdAt = Instant.now().toEpochMilli(), + url = "https://example.com/posts/1" ) val postService = mock { onBlocking { getById(any(), anyOrNull()) } doReturn post @@ -188,12 +188,12 @@ class PostsTest { config = ApplicationConfig("empty.conf") } val post = Post( - 12345, - 1234, - text = "aaa", - visibility = Visibility.FOLLOWERS, - createdAt = Instant.now().toEpochMilli(), - url = "https://example.com/posts/1" + 12345, + 1234, + text = "aaa", + visibility = Visibility.FOLLOWERS, + createdAt = Instant.now().toEpochMilli(), + url = "https://example.com/posts/1" ) val postService = mock { onBlocking { getById(any(), isNotNull()) } doReturn post @@ -243,13 +243,13 @@ class PostsTest { val argument = it.getArgument(0) val userId = it.getArgument(1) Post( - 123L, - userId, - null, - argument.text, - Instant.now().toEpochMilli(), - Visibility.PUBLIC, - "https://example.com" + 123L, + userId, + null, + argument.text, + Instant.now().toEpochMilli(), + Visibility.PUBLIC, + "https://example.com" ) } } @@ -299,25 +299,25 @@ class PostsTest { createdAt = Instant.now().toEpochMilli(), url = "https://example.com/posts/1" ), - Post( - id = 123456, - userId = 1, - text = "test2", - visibility = Visibility.PUBLIC, - createdAt = Instant.now().toEpochMilli(), - url = "https://example.com/posts/2" - ) + Post( + id = 123456, + userId = 1, + text = "test2", + visibility = Visibility.PUBLIC, + createdAt = Instant.now().toEpochMilli(), + url = "https://example.com/posts/2" + ) ) val postService = mock { onBlocking { getByUser( - nameOrId = any(), - since = anyOrNull(), - until = anyOrNull(), - minId = anyOrNull(), - maxId = anyOrNull(), - limit = anyOrNull(), - userId = anyOrNull() + nameOrId = any(), + since = anyOrNull(), + until = anyOrNull(), + minId = anyOrNull(), + maxId = anyOrNull(), + limit = anyOrNull(), + userId = anyOrNull() ) } doReturn posts } @@ -351,25 +351,25 @@ class PostsTest { createdAt = Instant.now().toEpochMilli(), url = "https://example.com/posts/1" ), - Post( - id = 123456, - userId = 1, - text = "test2", - visibility = Visibility.PUBLIC, - createdAt = Instant.now().toEpochMilli(), - url = "https://example.com/posts/2" - ) + Post( + id = 123456, + userId = 1, + text = "test2", + visibility = Visibility.PUBLIC, + createdAt = Instant.now().toEpochMilli(), + url = "https://example.com/posts/2" + ) ) val postService = mock { onBlocking { getByUser( - nameOrId = eq("test1"), - since = anyOrNull(), - until = anyOrNull(), - minId = anyOrNull(), - maxId = anyOrNull(), - limit = anyOrNull(), - userId = anyOrNull() + nameOrId = eq("test1"), + since = anyOrNull(), + until = anyOrNull(), + minId = anyOrNull(), + maxId = anyOrNull(), + limit = anyOrNull(), + userId = anyOrNull() ) } doReturn posts } @@ -403,25 +403,25 @@ class PostsTest { createdAt = Instant.now().toEpochMilli(), url = "https://example.com/posts/1" ), - Post( - id = 123456, - userId = 1, - text = "test2", - visibility = Visibility.PUBLIC, - createdAt = Instant.now().toEpochMilli(), - url = "https://example.com/posts/2" - ) + Post( + id = 123456, + userId = 1, + text = "test2", + visibility = Visibility.PUBLIC, + createdAt = Instant.now().toEpochMilli(), + url = "https://example.com/posts/2" + ) ) val postService = mock { onBlocking { getByUser( - nameOrId = eq("test1@example.com"), - since = anyOrNull(), - until = anyOrNull(), - minId = anyOrNull(), - maxId = anyOrNull(), - limit = anyOrNull(), - userId = anyOrNull() + nameOrId = eq("test1@example.com"), + since = anyOrNull(), + until = anyOrNull(), + minId = anyOrNull(), + maxId = anyOrNull(), + limit = anyOrNull(), + userId = anyOrNull() ) } doReturn posts } @@ -455,25 +455,25 @@ class PostsTest { createdAt = Instant.now().toEpochMilli(), url = "https://example.com/posts/1" ), - Post( - id = 123456, - userId = 1, - text = "test2", - visibility = Visibility.PUBLIC, - createdAt = Instant.now().toEpochMilli(), - url = "https://example.com/posts/2" - ) + Post( + id = 123456, + userId = 1, + text = "test2", + visibility = Visibility.PUBLIC, + createdAt = Instant.now().toEpochMilli(), + url = "https://example.com/posts/2" + ) ) val postService = mock { onBlocking { getByUser( - nameOrId = eq("@test1@example.com"), - since = anyOrNull(), - until = anyOrNull(), - minId = anyOrNull(), - maxId = anyOrNull(), - limit = anyOrNull(), - userId = anyOrNull() + nameOrId = eq("@test1@example.com"), + since = anyOrNull(), + until = anyOrNull(), + minId = anyOrNull(), + maxId = anyOrNull(), + limit = anyOrNull(), + userId = anyOrNull() ) } doReturn posts } @@ -499,12 +499,12 @@ class PostsTest { config = ApplicationConfig("empty.conf") } val post = Post( - id = 123456, - userId = 1, - text = "test2", - visibility = Visibility.PUBLIC, - createdAt = Instant.now().toEpochMilli(), - url = "https://example.com/posts/2" + id = 123456, + userId = 1, + text = "test2", + visibility = Visibility.PUBLIC, + createdAt = Instant.now().toEpochMilli(), + url = "https://example.com/posts/2" ) val postService = mock { onBlocking { getById(eq(12345L), anyOrNull()) } doReturn post @@ -531,12 +531,12 @@ class PostsTest { config = ApplicationConfig("empty.conf") } val post = Post( - id = 123456, - userId = 1, - text = "test2", - visibility = Visibility.PUBLIC, - createdAt = Instant.now().toEpochMilli(), - url = "https://example.com/posts/2" + id = 123456, + userId = 1, + text = "test2", + visibility = Visibility.PUBLIC, + createdAt = Instant.now().toEpochMilli(), + url = "https://example.com/posts/2" ) val postService = mock { onBlocking { getById(eq(12345L), anyOrNull()) } doReturn post @@ -563,12 +563,12 @@ class PostsTest { config = ApplicationConfig("empty.conf") } val post = Post( - id = 123456, - userId = 1, - text = "test2", - visibility = Visibility.PUBLIC, - createdAt = Instant.now().toEpochMilli(), - url = "https://example.com/posts/2" + id = 123456, + userId = 1, + text = "test2", + visibility = Visibility.PUBLIC, + createdAt = Instant.now().toEpochMilli(), + url = "https://example.com/posts/2" ) val postService = mock { onBlocking { getById(eq(12345L), anyOrNull()) } doReturn post @@ -595,12 +595,12 @@ class PostsTest { config = ApplicationConfig("empty.conf") } val post = Post( - id = 123456, - userId = 1, - text = "test2", - visibility = Visibility.PUBLIC, - createdAt = Instant.now().toEpochMilli(), - url = "https://example.com/posts/2" + id = 123456, + userId = 1, + text = "test2", + visibility = Visibility.PUBLIC, + createdAt = Instant.now().toEpochMilli(), + url = "https://example.com/posts/2" ) val postService = mock { onBlocking { getById(eq(12345L), anyOrNull()) } doReturn post