diff --git a/src/e2eTest/kotlin/AssertionUtil.kt b/src/e2eTest/kotlin/AssertionUtil.kt index 8083b825..6b82aa59 100644 --- a/src/e2eTest/kotlin/AssertionUtil.kt +++ b/src/e2eTest/kotlin/AssertionUtil.kt @@ -1,4 +1,4 @@ -import dev.usbharu.hideout.core.infrastructure.exposedrepository.Users +import dev.usbharu.hideout.core.infrastructure.exposedrepository.Actors import org.jetbrains.exposed.sql.and import org.jetbrains.exposed.sql.select import org.jetbrains.exposed.sql.selectAll @@ -16,13 +16,13 @@ object AssertionUtil { domain } - val selectAll = Users.selectAll() + val selectAll = Actors.selectAll() println(selectAll.fetchSize) println(selectAll.toList().size) - selectAll.map { "@${it[Users.name]}@${it[Users.domain]}" }.forEach { println(it) } + selectAll.map { "@${it[Actors.name]}@${it[Actors.domain]}" }.forEach { println(it) } - return Users.select { Users.name eq username and (Users.domain eq s) }.empty().not() + return Actors.select { Actors.name eq username and (Actors.domain eq s) }.empty().not() } } diff --git a/src/intTest/kotlin/mastodon/account/AccountApiTest.kt b/src/intTest/kotlin/mastodon/account/AccountApiTest.kt index 0c69e626..cf67b35d 100644 --- a/src/intTest/kotlin/mastodon/account/AccountApiTest.kt +++ b/src/intTest/kotlin/mastodon/account/AccountApiTest.kt @@ -1,8 +1,8 @@ package mastodon.account import dev.usbharu.hideout.SpringApplication +import dev.usbharu.hideout.core.infrastructure.exposedquery.ActorQueryServiceImpl import dev.usbharu.hideout.core.infrastructure.exposedquery.FollowerQueryServiceImpl -import dev.usbharu.hideout.core.infrastructure.exposedquery.UserQueryServiceImpl import kotlinx.coroutines.test.runTest import org.assertj.core.api.Assertions.assertThat import org.flywaydb.core.Flyway @@ -39,7 +39,7 @@ class AccountApiTest { private lateinit var followerQueryServiceImpl: FollowerQueryServiceImpl @Autowired - private lateinit var userQueryServiceImpl: UserQueryServiceImpl + private lateinit var userQueryServiceImpl: ActorQueryServiceImpl @Autowired diff --git a/src/intTest/kotlin/util/WithHttpSignatureSecurityContextFactory.kt b/src/intTest/kotlin/util/WithHttpSignatureSecurityContextFactory.kt index 9108e357..faabf58a 100644 --- a/src/intTest/kotlin/util/WithHttpSignatureSecurityContextFactory.kt +++ b/src/intTest/kotlin/util/WithHttpSignatureSecurityContextFactory.kt @@ -2,7 +2,7 @@ package util import dev.usbharu.hideout.application.external.Transaction import dev.usbharu.hideout.core.infrastructure.springframework.httpsignature.HttpSignatureUser -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.httpsignature.common.HttpHeaders import dev.usbharu.httpsignature.common.HttpMethod import dev.usbharu.httpsignature.common.HttpRequest @@ -14,7 +14,7 @@ import org.springframework.security.web.authentication.preauth.PreAuthenticatedA import java.net.URL class WithHttpSignatureSecurityContextFactory( - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, private val transaction: Transaction ) : WithSecurityContextFactory<WithHttpSignature> { @@ -28,7 +28,7 @@ class WithHttpSignatureSecurityContextFactory( ) ) val httpSignatureUser = transaction.transaction { - val findByKeyId = userQueryService.findByKeyId(annotation.keyId) + val findByKeyId = actorQueryService.findByKeyId(annotation.keyId) HttpSignatureUser( findByKeyId.name, findByKeyId.domain, diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/infrastructure/exposedquery/NoteQueryServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/infrastructure/exposedquery/NoteQueryServiceImpl.kt index 561b8de2..19b217d5 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/infrastructure/exposedquery/NoteQueryServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/infrastructure/exposedquery/NoteQueryServiceImpl.kt @@ -23,7 +23,7 @@ class NoteQueryServiceImpl(private val postRepository: PostRepository, private v NoteQueryService { override suspend fun findById(id: Long): Pair<Note, Post> { return Posts - .leftJoin(Users) + .leftJoin(Actors) .leftJoin(PostsMedia) .leftJoin(Media) .select { Posts.id eq id } @@ -35,7 +35,7 @@ class NoteQueryServiceImpl(private val postRepository: PostRepository, private v override suspend fun findByApid(apId: String): Pair<Note, Post> { return Posts - .leftJoin(Users) + .leftJoin(Actors) .leftJoin(PostsMedia) .leftJoin(Media) .select { Posts.apId eq apId } @@ -61,11 +61,11 @@ class NoteQueryServiceImpl(private val postRepository: PostRepository, private v val visibility1 = visibility( Visibility.values().first { visibility -> visibility.ordinal == this[Posts.visibility] }, - this[Users.followers] + this[Actors.followers] ) return Note( id = this[Posts.apId], - attributedTo = this[Users.url], + attributedTo = this[Actors.url], content = this[Posts.text], published = Instant.ofEpochMilli(this[Posts.createdAt]).toString(), to = visibility1.first, diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/accept/APDeliverAcceptJobProcessor.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/accept/APDeliverAcceptJobProcessor.kt index 343dcb50..3a48b5df 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/accept/APDeliverAcceptJobProcessor.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/accept/APDeliverAcceptJobProcessor.kt @@ -4,20 +4,20 @@ import dev.usbharu.hideout.activitypub.service.common.APRequestService import dev.usbharu.hideout.application.external.Transaction import dev.usbharu.hideout.core.external.job.DeliverAcceptJob import dev.usbharu.hideout.core.external.job.DeliverAcceptJobParam -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.service.job.JobProcessor import org.springframework.stereotype.Service @Service class APDeliverAcceptJobProcessor( private val apRequestService: APRequestService, - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, private val deliverAcceptJob: DeliverAcceptJob, private val transaction: Transaction ) : JobProcessor<DeliverAcceptJobParam, DeliverAcceptJob> { override suspend fun process(param: DeliverAcceptJobParam): Unit = transaction.transaction { - apRequestService.apPost(param.inbox, param.accept, userQueryService.findById(param.signer)) + apRequestService.apPost(param.inbox, param.accept, actorQueryService.findById(param.signer)) } override fun job(): DeliverAcceptJob = deliverAcceptJob diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/accept/ApAcceptProcessor.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/accept/ApAcceptProcessor.kt index 24a54ef5..1a48f22d 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/accept/ApAcceptProcessor.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/accept/ApAcceptProcessor.kt @@ -7,14 +7,14 @@ import dev.usbharu.hideout.activitypub.service.common.AbstractActivityPubProcess import dev.usbharu.hideout.activitypub.service.common.ActivityPubProcessContext import dev.usbharu.hideout.activitypub.service.common.ActivityType import dev.usbharu.hideout.application.external.Transaction -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.service.relationship.RelationshipService import org.springframework.stereotype.Service @Service class ApAcceptProcessor( transaction: Transaction, - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, private val relationshipService: RelationshipService ) : AbstractActivityPubProcessor<Accept>(transaction) { @@ -32,8 +32,8 @@ class ApAcceptProcessor( val userUrl = follow.apObject val followerUrl = follow.actor - val user = userQueryService.findByUrl(userUrl) - val follower = userQueryService.findByUrl(followerUrl) + val user = actorQueryService.findByUrl(userUrl) + val follower = actorQueryService.findByUrl(followerUrl) relationshipService.acceptFollowRequest(user.id, follower.id) logger.debug("SUCCESS Follow from ${user.url} to ${follower.url}.") diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/accept/ApSendAcceptService.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/accept/ApSendAcceptService.kt index 35270235..2a52fd1c 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/accept/ApSendAcceptService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/accept/ApSendAcceptService.kt @@ -2,14 +2,14 @@ package dev.usbharu.hideout.activitypub.service.activity.accept import dev.usbharu.hideout.activitypub.domain.model.Accept import dev.usbharu.hideout.activitypub.domain.model.Follow -import dev.usbharu.hideout.core.domain.model.user.User +import dev.usbharu.hideout.core.domain.model.actor.Actor import dev.usbharu.hideout.core.external.job.DeliverAcceptJob import dev.usbharu.hideout.core.external.job.DeliverAcceptJobParam import dev.usbharu.hideout.core.service.job.JobQueueParentService import org.springframework.stereotype.Service interface ApSendAcceptService { - suspend fun sendAcceptFollow(user: User, target: User) + suspend fun sendAcceptFollow(actor: Actor, target: Actor) } @Service @@ -17,17 +17,17 @@ class ApSendAcceptServiceImpl( private val jobQueueParentService: JobQueueParentService, private val deliverAcceptJob: DeliverAcceptJob ) : ApSendAcceptService { - override suspend fun sendAcceptFollow(user: User, target: User) { + override suspend fun sendAcceptFollow(actor: Actor, target: Actor) { val deliverAcceptJobParam = DeliverAcceptJobParam( Accept( apObject = Follow( - apObject = user.url, + apObject = actor.url, actor = target.url ), - actor = user.url + actor = actor.url ), target.inbox, - user.id + actor.id ) jobQueueParentService.scheduleTypeSafe(deliverAcceptJob, deliverAcceptJobParam) diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/block/APDeliverBlockJobProcessor.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/block/APDeliverBlockJobProcessor.kt index a97a0f19..bc946419 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/block/APDeliverBlockJobProcessor.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/block/APDeliverBlockJobProcessor.kt @@ -2,7 +2,7 @@ package dev.usbharu.hideout.activitypub.service.activity.block import dev.usbharu.hideout.activitypub.service.common.APRequestService import dev.usbharu.hideout.application.external.Transaction -import dev.usbharu.hideout.core.domain.model.user.UserRepository +import dev.usbharu.hideout.core.domain.model.actor.ActorRepository import dev.usbharu.hideout.core.external.job.DeliverBlockJob import dev.usbharu.hideout.core.external.job.DeliverBlockJobParam import dev.usbharu.hideout.core.service.job.JobProcessor @@ -14,12 +14,12 @@ import org.springframework.stereotype.Service @Service class APDeliverBlockJobProcessor( private val apRequestService: APRequestService, - private val userRepository: UserRepository, + private val actorRepository: ActorRepository, private val transaction: Transaction, private val deliverBlockJob: DeliverBlockJob ) : JobProcessor<DeliverBlockJobParam, DeliverBlockJob> { override suspend fun process(param: DeliverBlockJobParam): Unit = transaction.transaction { - val signer = userRepository.findById(param.signer) + val signer = actorRepository.findById(param.signer) apRequestService.apPost( param.inbox, param.reject, diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/block/APSendBlockService.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/block/APSendBlockService.kt index f814da7e..8e689d96 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/block/APSendBlockService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/block/APSendBlockService.kt @@ -4,14 +4,14 @@ import dev.usbharu.hideout.activitypub.domain.model.Block import dev.usbharu.hideout.activitypub.domain.model.Follow import dev.usbharu.hideout.activitypub.domain.model.Reject import dev.usbharu.hideout.application.config.ApplicationConfig -import dev.usbharu.hideout.core.domain.model.user.User +import dev.usbharu.hideout.core.domain.model.actor.Actor import dev.usbharu.hideout.core.external.job.DeliverBlockJob import dev.usbharu.hideout.core.external.job.DeliverBlockJobParam import dev.usbharu.hideout.core.service.job.JobQueueParentService import org.springframework.stereotype.Service interface APSendBlockService { - suspend fun sendBlock(user: User, target: User) + suspend fun sendBlock(actor: Actor, target: Actor) } @Service @@ -20,19 +20,19 @@ class ApSendBlockServiceImpl( private val jobQueueParentService: JobQueueParentService, private val deliverBlockJob: DeliverBlockJob ) : APSendBlockService { - override suspend fun sendBlock(user: User, target: User) { + override suspend fun sendBlock(actor: Actor, target: Actor) { val blockJobParam = DeliverBlockJobParam( - user.id, + actor.id, Block( - user.url, - "${applicationConfig.url}/block/${user.id}/${target.id}", + actor.url, + "${applicationConfig.url}/block/${actor.id}/${target.id}", target.url ), Reject( - user.url, - "${applicationConfig.url}/reject/${user.id}/${target.id}", + actor.url, + "${applicationConfig.url}/reject/${actor.id}/${target.id}", Follow( - apObject = user.url, + apObject = actor.url, actor = target.url ) ), diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/block/BlockActivityPubProcessor.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/block/BlockActivityPubProcessor.kt index 075bf893..e31f4e6c 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/block/BlockActivityPubProcessor.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/block/BlockActivityPubProcessor.kt @@ -5,7 +5,7 @@ import dev.usbharu.hideout.activitypub.service.common.AbstractActivityPubProcess import dev.usbharu.hideout.activitypub.service.common.ActivityPubProcessContext import dev.usbharu.hideout.activitypub.service.common.ActivityType import dev.usbharu.hideout.application.external.Transaction -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.service.relationship.RelationshipService import org.springframework.stereotype.Service @@ -14,14 +14,14 @@ import org.springframework.stereotype.Service */ @Service class BlockActivityPubProcessor( - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, private val relationshipService: RelationshipService, transaction: Transaction ) : AbstractActivityPubProcessor<Block>(transaction) { override suspend fun internalProcess(activity: ActivityPubProcessContext<Block>) { - val user = userQueryService.findByUrl(activity.activity.actor) - val target = userQueryService.findByUrl(activity.activity.apObject) + val user = actorQueryService.findByUrl(activity.activity.actor) + val target = actorQueryService.findByUrl(activity.activity.apObject) relationshipService.block(user.id, target.id) } diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/create/ApSendCreateServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/create/ApSendCreateServiceImpl.kt index 226f2a63..0ba9413e 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/create/ApSendCreateServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/create/ApSendCreateServiceImpl.kt @@ -6,8 +6,8 @@ import dev.usbharu.hideout.activitypub.query.NoteQueryService import dev.usbharu.hideout.application.config.ApplicationConfig import dev.usbharu.hideout.core.domain.model.post.Post import dev.usbharu.hideout.core.external.job.DeliverPostJob +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.query.FollowerQueryService -import dev.usbharu.hideout.core.query.UserQueryService import dev.usbharu.hideout.core.service.job.JobQueueParentService import org.slf4j.LoggerFactory import org.springframework.stereotype.Service @@ -17,7 +17,7 @@ class ApSendCreateServiceImpl( private val followerQueryService: FollowerQueryService, private val objectMapper: ObjectMapper, private val jobQueueParentService: JobQueueParentService, - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, private val noteQueryService: NoteQueryService, private val applicationConfig: ApplicationConfig ) : ApSendCreateService { @@ -25,11 +25,11 @@ class ApSendCreateServiceImpl( logger.info("CREATE Create Local Note ${post.url}") logger.debug("START Create Local Note ${post.url}") logger.trace("{}", post) - val followers = followerQueryService.findFollowersById(post.userId) + val followers = followerQueryService.findFollowersById(post.actorId) logger.debug("DELIVER Deliver Note Create ${followers.size} accounts.") - val userEntity = userQueryService.findById(post.userId) + val userEntity = actorQueryService.findById(post.actorId) val note = noteQueryService.findById(post.id).first val create = Create( name = "Create Note", diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/follow/APReceiveFollowJobProcessor.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/follow/APReceiveFollowJobProcessor.kt index 1f79af46..292f0ee2 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/follow/APReceiveFollowJobProcessor.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/follow/APReceiveFollowJobProcessor.kt @@ -7,7 +7,7 @@ import dev.usbharu.hideout.activitypub.service.objects.user.APUserService import dev.usbharu.hideout.application.external.Transaction import dev.usbharu.hideout.core.external.job.ReceiveFollowJob import dev.usbharu.hideout.core.external.job.ReceiveFollowJobParam -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.service.job.JobProcessor import dev.usbharu.hideout.core.service.relationship.RelationshipService import org.slf4j.LoggerFactory @@ -16,7 +16,7 @@ import org.springframework.stereotype.Service @Service class APReceiveFollowJobProcessor( private val transaction: Transaction, - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, private val apUserService: APUserService, private val objectMapper: ObjectMapper, private val relationshipService: RelationshipService @@ -28,9 +28,9 @@ class APReceiveFollowJobProcessor( logger.info("START Follow from: {} to {}", param.targetActor, param.actor) - val targetEntity = userQueryService.findByUrl(param.targetActor) + val targetEntity = actorQueryService.findByUrl(param.targetActor) val followActorEntity = - userQueryService.findByUrl(follow.actor) + actorQueryService.findByUrl(follow.actor) relationshipService.followRequest(followActorEntity.id, targetEntity.id) diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/follow/APSendFollowService.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/follow/APSendFollowService.kt index 825ec198..87ad7cd7 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/follow/APSendFollowService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/follow/APSendFollowService.kt @@ -15,10 +15,10 @@ class APSendFollowServiceImpl( ) : APSendFollowService { override suspend fun sendFollow(sendFollowDto: SendFollowDto) { val follow = Follow( - apObject = sendFollowDto.followTargetUserId.url, - actor = sendFollowDto.userId.url + apObject = sendFollowDto.followTargetActorId.url, + actor = sendFollowDto.actorId.url ) - apRequestService.apPost(sendFollowDto.followTargetUserId.inbox, follow, sendFollowDto.userId) + apRequestService.apPost(sendFollowDto.followTargetActorId.inbox, follow, sendFollowDto.actorId) } } diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/like/APReactionService.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/like/APReactionService.kt index 53063c50..1995cf83 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/like/APReactionService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/like/APReactionService.kt @@ -4,9 +4,9 @@ import com.fasterxml.jackson.databind.ObjectMapper import dev.usbharu.hideout.core.domain.model.reaction.Reaction import dev.usbharu.hideout.core.external.job.DeliverReactionJob import dev.usbharu.hideout.core.external.job.DeliverRemoveReactionJob +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.query.FollowerQueryService import dev.usbharu.hideout.core.query.PostQueryService -import dev.usbharu.hideout.core.query.UserQueryService import dev.usbharu.hideout.core.service.job.JobQueueParentService import org.springframework.beans.factory.annotation.Qualifier import org.springframework.stereotype.Service @@ -19,14 +19,14 @@ interface APReactionService { @Service class APReactionServiceImpl( private val jobQueueParentService: JobQueueParentService, - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, private val followerQueryService: FollowerQueryService, private val postQueryService: PostQueryService, @Qualifier("activitypub") private val objectMapper: ObjectMapper ) : APReactionService { override suspend fun reaction(like: Reaction) { - val followers = followerQueryService.findFollowersById(like.userId) - val user = userQueryService.findById(like.userId) + val followers = followerQueryService.findFollowersById(like.actorId) + val user = actorQueryService.findById(like.actorId) val post = postQueryService.findById(like.postId) followers.forEach { follower -> @@ -41,8 +41,8 @@ class APReactionServiceImpl( } override suspend fun removeReaction(like: Reaction) { - val followers = followerQueryService.findFollowersById(like.userId) - val user = userQueryService.findById(like.userId) + val followers = followerQueryService.findFollowersById(like.actorId) + val user = actorQueryService.findById(like.actorId) val post = postQueryService.findById(like.postId) followers.forEach { follower -> diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/like/ApReactionJobProcessor.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/like/ApReactionJobProcessor.kt index 1487eb56..e7857e8e 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/like/ApReactionJobProcessor.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/like/ApReactionJobProcessor.kt @@ -6,19 +6,19 @@ import dev.usbharu.hideout.application.config.ApplicationConfig import dev.usbharu.hideout.application.external.Transaction import dev.usbharu.hideout.core.external.job.DeliverReactionJob import dev.usbharu.hideout.core.external.job.DeliverReactionJobParam -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.service.job.JobProcessor import org.springframework.stereotype.Service @Service class ApReactionJobProcessor( - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, private val apRequestService: APRequestService, private val applicationConfig: ApplicationConfig, private val transaction: Transaction ) : JobProcessor<DeliverReactionJobParam, DeliverReactionJob> { override suspend fun process(param: DeliverReactionJobParam): Unit = transaction.transaction { - val signer = userQueryService.findByUrl(param.actor) + val signer = actorQueryService.findByUrl(param.actor) apRequestService.apPost( param.inbox, diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/like/ApRemoveReactionJobProcessor.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/like/ApRemoveReactionJobProcessor.kt index 0409b9a0..5dd3e6e7 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/like/ApRemoveReactionJobProcessor.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/like/ApRemoveReactionJobProcessor.kt @@ -9,14 +9,14 @@ import dev.usbharu.hideout.application.config.ApplicationConfig import dev.usbharu.hideout.application.external.Transaction import dev.usbharu.hideout.core.external.job.DeliverRemoveReactionJob import dev.usbharu.hideout.core.external.job.DeliverRemoveReactionJobParam -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.service.job.JobProcessor import org.springframework.stereotype.Service import java.time.Instant @Service class ApRemoveReactionJobProcessor( - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, private val transaction: Transaction, private val objectMapper: ObjectMapper, private val apRequestService: APRequestService, @@ -25,7 +25,7 @@ class ApRemoveReactionJobProcessor( override suspend fun process(param: DeliverRemoveReactionJobParam): Unit = transaction.transaction { val like = objectMapper.readValue<Like>(param.like) - val signer = userQueryService.findByUrl(param.actor) + val signer = actorQueryService.findByUrl(param.actor) apRequestService.apPost( param.inbox, diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/reject/APDeliverRejectJobProcessor.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/reject/APDeliverRejectJobProcessor.kt index 575a34de..0ef702d5 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/reject/APDeliverRejectJobProcessor.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/reject/APDeliverRejectJobProcessor.kt @@ -4,20 +4,20 @@ import dev.usbharu.hideout.activitypub.service.common.APRequestService import dev.usbharu.hideout.application.external.Transaction import dev.usbharu.hideout.core.external.job.DeliverRejectJob import dev.usbharu.hideout.core.external.job.DeliverRejectJobParam -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.service.job.JobProcessor import org.springframework.stereotype.Component @Component class APDeliverRejectJobProcessor( private val apRequestService: APRequestService, - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, private val deliverRejectJob: DeliverRejectJob, private val transaction: Transaction ) : JobProcessor<DeliverRejectJobParam, DeliverRejectJob> { override suspend fun process(param: DeliverRejectJobParam): Unit = transaction.transaction { - apRequestService.apPost(param.inbox, param.reject, userQueryService.findById(param.signer)) + apRequestService.apPost(param.inbox, param.reject, actorQueryService.findById(param.signer)) } override fun job(): DeliverRejectJob = deliverRejectJob diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/reject/ApRejectProcessor.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/reject/ApRejectProcessor.kt index d86a583a..29bbd1f9 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/reject/ApRejectProcessor.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/reject/ApRejectProcessor.kt @@ -6,14 +6,14 @@ import dev.usbharu.hideout.activitypub.service.common.AbstractActivityPubProcess import dev.usbharu.hideout.activitypub.service.common.ActivityPubProcessContext import dev.usbharu.hideout.activitypub.service.common.ActivityType import dev.usbharu.hideout.application.external.Transaction -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.service.relationship.RelationshipService import org.springframework.stereotype.Service @Service class ApRejectProcessor( private val relationshipService: RelationshipService, - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, transaction: Transaction ) : AbstractActivityPubProcessor<Reject>(transaction) { @@ -26,13 +26,13 @@ class ApRejectProcessor( } when (activityType) { "Follow" -> { - val user = userQueryService.findByUrl(activity.activity.actor) + val user = actorQueryService.findByUrl(activity.activity.actor) activity.activity.apObject as Follow val actor = activity.activity.apObject.actor - val target = userQueryService.findByUrl(actor) + val target = actorQueryService.findByUrl(actor) logger.debug("REJECT Follow user {} target {}", user.url, target.url) diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/reject/ApSendRejectService.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/reject/ApSendRejectService.kt index ecb675c2..2be2e379 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/reject/ApSendRejectService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/reject/ApSendRejectService.kt @@ -1,7 +1,7 @@ package dev.usbharu.hideout.activitypub.service.activity.reject -import dev.usbharu.hideout.core.domain.model.user.User +import dev.usbharu.hideout.core.domain.model.actor.Actor interface ApSendRejectService { - suspend fun sendRejectFollow(user: User, target: User) + suspend fun sendRejectFollow(actor: Actor, target: Actor) } diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/reject/ApSendRejectServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/reject/ApSendRejectServiceImpl.kt index fb7610bb..a5d8194c 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/reject/ApSendRejectServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/reject/ApSendRejectServiceImpl.kt @@ -3,7 +3,7 @@ package dev.usbharu.hideout.activitypub.service.activity.reject import dev.usbharu.hideout.activitypub.domain.model.Follow import dev.usbharu.hideout.activitypub.domain.model.Reject import dev.usbharu.hideout.application.config.ApplicationConfig -import dev.usbharu.hideout.core.domain.model.user.User +import dev.usbharu.hideout.core.domain.model.actor.Actor import dev.usbharu.hideout.core.external.job.DeliverRejectJob import dev.usbharu.hideout.core.external.job.DeliverRejectJobParam import dev.usbharu.hideout.core.service.job.JobQueueParentService @@ -15,15 +15,15 @@ class ApSendRejectServiceImpl( private val jobQueueParentService: JobQueueParentService, private val deliverRejectJob: DeliverRejectJob ) : ApSendRejectService { - override suspend fun sendRejectFollow(user: User, target: User) { + override suspend fun sendRejectFollow(actor: Actor, target: Actor) { val deliverRejectJobParam = DeliverRejectJobParam( Reject( - user.url, - "${applicationConfig.url}/reject/${user.id}/${target.id}", - Follow(apObject = user.url, actor = target.url) + actor.url, + "${applicationConfig.url}/reject/${actor.id}/${target.id}", + Follow(apObject = actor.url, actor = target.url) ), target.inbox, - user.id + actor.id ) jobQueueParentService.scheduleTypeSafe(deliverRejectJob, deliverRejectJobParam) diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/undo/APDeliverUndoJobProcessor.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/undo/APDeliverUndoJobProcessor.kt index d5f1fec2..70e31921 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/undo/APDeliverUndoJobProcessor.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/undo/APDeliverUndoJobProcessor.kt @@ -4,7 +4,7 @@ import dev.usbharu.hideout.activitypub.service.common.APRequestService import dev.usbharu.hideout.application.external.Transaction import dev.usbharu.hideout.core.external.job.DeliverUndoJob import dev.usbharu.hideout.core.external.job.DeliverUndoJobParam -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.service.job.JobProcessor import org.springframework.stereotype.Service @@ -12,11 +12,11 @@ import org.springframework.stereotype.Service class APDeliverUndoJobProcessor( private val deliverUndoJob: DeliverUndoJob, private val apRequestService: APRequestService, - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, private val transaction: Transaction ) : JobProcessor<DeliverUndoJobParam, DeliverUndoJob> { override suspend fun process(param: DeliverUndoJobParam): Unit = transaction.transaction { - apRequestService.apPost(param.inbox, param.undo, userQueryService.findById(param.signer)) + apRequestService.apPost(param.inbox, param.undo, actorQueryService.findById(param.signer)) } override fun job(): DeliverUndoJob = deliverUndoJob diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/undo/APSendUndoService.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/undo/APSendUndoService.kt index 827b186e..95114dd2 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/undo/APSendUndoService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/undo/APSendUndoService.kt @@ -1,8 +1,8 @@ package dev.usbharu.hideout.activitypub.service.activity.undo -import dev.usbharu.hideout.core.domain.model.user.User +import dev.usbharu.hideout.core.domain.model.actor.Actor interface APSendUndoService { - suspend fun sendUndoFollow(user: User, target: User) - suspend fun sendUndoBlock(user: User, target: User) + suspend fun sendUndoFollow(actor: Actor, target: Actor) + suspend fun sendUndoBlock(actor: Actor, target: Actor) } diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/undo/APSendUndoServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/undo/APSendUndoServiceImpl.kt index e1d4c6fd..6d0f251a 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/undo/APSendUndoServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/undo/APSendUndoServiceImpl.kt @@ -4,7 +4,7 @@ import dev.usbharu.hideout.activitypub.domain.model.Block import dev.usbharu.hideout.activitypub.domain.model.Follow import dev.usbharu.hideout.activitypub.domain.model.Undo import dev.usbharu.hideout.application.config.ApplicationConfig -import dev.usbharu.hideout.core.domain.model.user.User +import dev.usbharu.hideout.core.domain.model.actor.Actor import dev.usbharu.hideout.core.external.job.DeliverUndoJob import dev.usbharu.hideout.core.external.job.DeliverUndoJobParam import dev.usbharu.hideout.core.service.job.JobQueueParentService @@ -17,38 +17,38 @@ class APSendUndoServiceImpl( private val deliverUndoJob: DeliverUndoJob, private val applicationConfig: ApplicationConfig ) : APSendUndoService { - override suspend fun sendUndoFollow(user: User, target: User) { + override suspend fun sendUndoFollow(actor: Actor, target: Actor) { val deliverUndoJobParam = DeliverUndoJobParam( Undo( - actor = user.url, - id = "${applicationConfig.url}/undo/follow/${user.id}/${target.url}", + actor = actor.url, + id = "${applicationConfig.url}/undo/follow/${actor.id}/${target.url}", apObject = Follow( - apObject = user.url, + apObject = actor.url, actor = target.url ), published = Instant.now().toString() ), target.inbox, - user.id + actor.id ) jobQueueParentService.scheduleTypeSafe(deliverUndoJob, deliverUndoJobParam) } - override suspend fun sendUndoBlock(user: User, target: User) { + override suspend fun sendUndoBlock(actor: Actor, target: Actor) { val deliverUndoJobParam = DeliverUndoJobParam( Undo( - actor = user.url, - id = "${applicationConfig.url}/undo/block/${user.id}/${target.url}", + actor = actor.url, + id = "${applicationConfig.url}/undo/block/${actor.id}/${target.url}", apObject = Block( - apObject = user.url, + apObject = actor.url, actor = target.url, - id = "${applicationConfig.url}/block/${user.id}/${target.id}" + id = "${applicationConfig.url}/block/${actor.id}/${target.id}" ), published = Instant.now().toString() ), target.inbox, - user.id + actor.id ) jobQueueParentService.scheduleTypeSafe(deliverUndoJob, deliverUndoJobParam) diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/undo/APUndoProcessor.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/undo/APUndoProcessor.kt index f476ce36..888c31f7 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/undo/APUndoProcessor.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/undo/APUndoProcessor.kt @@ -10,7 +10,7 @@ import dev.usbharu.hideout.activitypub.service.common.ActivityPubProcessContext import dev.usbharu.hideout.activitypub.service.common.ActivityType import dev.usbharu.hideout.activitypub.service.objects.user.APUserService import dev.usbharu.hideout.application.external.Transaction -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.service.relationship.RelationshipService import org.springframework.stereotype.Service @@ -18,7 +18,7 @@ import org.springframework.stereotype.Service class APUndoProcessor( transaction: Transaction, private val apUserService: APUserService, - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, private val relationshipService: RelationshipService ) : AbstractActivityPubProcessor<Undo>(transaction) { @@ -35,8 +35,8 @@ class APUndoProcessor( val follow = undo.apObject as Follow apUserService.fetchPerson(undo.actor, follow.apObject) - val follower = userQueryService.findByUrl(undo.actor) - val target = userQueryService.findByUrl(follow.apObject) + val follower = actorQueryService.findByUrl(undo.actor) + val target = actorQueryService.findByUrl(follow.apObject) relationshipService.unfollow(follower.id, target.id) return @@ -46,7 +46,7 @@ class APUndoProcessor( val block = undo.apObject as Block val blocker = apUserService.fetchPersonWithEntity(undo.actor, block.apObject).second - val target = userQueryService.findByUrl(block.apObject) + val target = actorQueryService.findByUrl(block.apObject) relationshipService.unblock(blocker.id, target.id) return @@ -65,7 +65,7 @@ class APUndoProcessor( } val accepter = apUserService.fetchPersonWithEntity(undo.actor, acceptObject).second - val target = userQueryService.findByUrl(acceptObject) + val target = actorQueryService.findByUrl(acceptObject) relationshipService.rejectFollowRequest(accepter.id, target.id) } diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/common/APRequestService.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/common/APRequestService.kt index da3954f7..cbc478be 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/common/APRequestService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/common/APRequestService.kt @@ -1,25 +1,25 @@ package dev.usbharu.hideout.activitypub.service.common import dev.usbharu.hideout.activitypub.domain.model.objects.Object -import dev.usbharu.hideout.core.domain.model.user.User +import dev.usbharu.hideout.core.domain.model.actor.Actor interface APRequestService { - suspend fun <R : Object> apGet(url: String, signer: User? = null, responseClass: Class<R>): R + suspend fun <R : Object> apGet(url: String, signer: Actor? = null, responseClass: Class<R>): R suspend fun <T : Object, R : Object> apPost( url: String, body: T? = null, - signer: User? = null, + signer: Actor? = null, responseClass: Class<R> ): R - suspend fun <T : Object> apPost(url: String, body: T? = null, signer: User? = null): String + suspend fun <T : Object> apPost(url: String, body: T? = null, signer: Actor? = null): String } -suspend inline fun <reified R : Object> APRequestService.apGet(url: String, signer: User? = null): R = +suspend inline fun <reified R : Object> APRequestService.apGet(url: String, signer: Actor? = null): R = apGet(url, signer, R::class.java) suspend inline fun <T : Object, reified R : Object> APRequestService.apPost( url: String, body: T? = null, - signer: User? = null + signer: Actor? = null ): R = apPost(url, body, signer, R::class.java) diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/common/APRequestServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/common/APRequestServiceImpl.kt index 9721cf38..81bc968e 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/common/APRequestServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/common/APRequestServiceImpl.kt @@ -2,7 +2,7 @@ package dev.usbharu.hideout.activitypub.service.common import com.fasterxml.jackson.databind.ObjectMapper import dev.usbharu.hideout.activitypub.domain.model.objects.Object -import dev.usbharu.hideout.core.domain.model.user.User +import dev.usbharu.hideout.core.domain.model.actor.Actor import dev.usbharu.hideout.util.Base64Util import dev.usbharu.hideout.util.HttpUtil.Activity import dev.usbharu.hideout.util.RsaUtil @@ -33,7 +33,7 @@ class APRequestServiceImpl( @Qualifier("http") private val dateTimeFormatter: DateTimeFormatter, ) : APRequestService { - override suspend fun <R : Object> apGet(url: String, signer: User?, responseClass: Class<R>): R { + override suspend fun <R : Object> apGet(url: String, signer: Actor?, responseClass: Class<R>): R { logger.debug("START ActivityPub Request GET url: {}, signer: {}", url, signer?.url) val date = dateTimeFormatter.format(ZonedDateTime.now(ZoneId.of("GMT"))) val u = URL(url) @@ -57,7 +57,7 @@ class APRequestServiceImpl( private suspend fun apGetSign( date: String, u: URL, - signer: User, + signer: Actor, url: String ): HttpResponse { val headers = headers { @@ -100,14 +100,14 @@ class APRequestServiceImpl( override suspend fun <T : Object, R : Object> apPost( url: String, body: T?, - signer: User?, + signer: Actor?, responseClass: Class<R> ): R { val bodyAsText = apPost(url, body, signer) return objectMapper.readValue(bodyAsText, responseClass) } - override suspend fun <T : Object> apPost(url: String, body: T?, signer: User?): String { + override suspend fun <T : Object> apPost(url: String, body: T?, signer: Actor?): String { logger.debug("START ActivityPub Request POST url: {}, signer: {}", url, signer?.url) val requestBody = addContextIfNotNull(body) @@ -166,7 +166,7 @@ class APRequestServiceImpl( date: String, u: URL, digest: String, - signer: User, + signer: Actor, requestBody: String? ): HttpResponse { val headers = headers { diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/common/APResourceResolveService.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/common/APResourceResolveService.kt index 203d3159..70eaf063 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/common/APResourceResolveService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/common/APResourceResolveService.kt @@ -1,14 +1,14 @@ package dev.usbharu.hideout.activitypub.service.common import dev.usbharu.hideout.activitypub.domain.model.objects.Object -import dev.usbharu.hideout.core.domain.model.user.User +import dev.usbharu.hideout.core.domain.model.actor.Actor interface APResourceResolveService { - suspend fun <T : Object> resolve(url: String, clazz: Class<T>, singer: User?): T + suspend fun <T : Object> resolve(url: String, clazz: Class<T>, singer: Actor?): T suspend fun <T : Object> resolve(url: String, clazz: Class<T>, singerId: Long?): T } -suspend inline fun <reified T : Object> APResourceResolveService.resolve(url: String, singer: User?): T = +suspend inline fun <reified T : Object> APResourceResolveService.resolve(url: String, singer: Actor?): T = resolve(url, T::class.java, singer) suspend inline fun <reified T : Object> APResourceResolveService.resolve(url: String, singerId: Long?): T = diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/common/APResourceResolveServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/common/APResourceResolveServiceImpl.kt index 85099d84..ad24ec57 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/common/APResourceResolveServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/common/APResourceResolveServiceImpl.kt @@ -1,8 +1,8 @@ package dev.usbharu.hideout.activitypub.service.common import dev.usbharu.hideout.activitypub.domain.model.objects.Object -import dev.usbharu.hideout.core.domain.model.user.User -import dev.usbharu.hideout.core.domain.model.user.UserRepository +import dev.usbharu.hideout.core.domain.model.actor.Actor +import dev.usbharu.hideout.core.domain.model.actor.ActorRepository import dev.usbharu.hideout.core.service.resource.CacheManager import dev.usbharu.hideout.core.service.resource.ResolveResponse import org.springframework.stereotype.Service @@ -11,7 +11,7 @@ import java.io.InputStream @Service class APResourceResolveServiceImpl( private val apRequestService: APRequestService, - private val userRepository: UserRepository, + private val actorRepository: ActorRepository, private val cacheManager: CacheManager ) : APResourceResolveService { @@ -19,19 +19,19 @@ class APResourceResolveServiceImpl( override suspend fun <T : Object> resolve(url: String, clazz: Class<T>, singerId: Long?): T = internalResolve(url, singerId, clazz) - override suspend fun <T : Object> resolve(url: String, clazz: Class<T>, singer: User?): T = + override suspend fun <T : Object> resolve(url: String, clazz: Class<T>, singer: Actor?): T = internalResolve(url, singer, clazz) private suspend fun <T : Object> internalResolve(url: String, singerId: Long?, clazz: Class<T>): T { val key = genCacheKey(url, singerId) cacheManager.putCache(key) { - runResolve(url, singerId?.let { userRepository.findById(it) }, clazz) + runResolve(url, singerId?.let { actorRepository.findById(it) }, clazz) } return (cacheManager.getOrWait(key) as APResolveResponse<T>).objects } - private suspend fun <T : Object> internalResolve(url: String, singer: User?, clazz: Class<T>): T { + private suspend fun <T : Object> internalResolve(url: String, singer: Actor?, clazz: Class<T>): T { val key = genCacheKey(url, singer?.id) cacheManager.putCache(key) { runResolve(url, singer, clazz) @@ -39,7 +39,7 @@ class APResourceResolveServiceImpl( return (cacheManager.getOrWait(key) as APResolveResponse<T>).objects } - private suspend fun <T : Object> runResolve(url: String, singer: User?, clazz: Class<T>): ResolveResponse = + private suspend fun <T : Object> runResolve(url: String, singer: Actor?, clazz: Class<T>): ResolveResponse = APResolveResponse(apRequestService.apGet(url, singer, clazz)) private fun genCacheKey(url: String, singerId: Long?): String { diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/inbox/InboxJobProcessor.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/inbox/InboxJobProcessor.kt index ec25c727..bfaf72f1 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/inbox/InboxJobProcessor.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/inbox/InboxJobProcessor.kt @@ -10,7 +10,7 @@ import dev.usbharu.hideout.application.external.Transaction import dev.usbharu.hideout.core.domain.exception.FailedToGetResourcesException import dev.usbharu.hideout.core.external.job.InboxJob import dev.usbharu.hideout.core.external.job.InboxJobParam -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.service.job.JobProcessor import dev.usbharu.hideout.util.RsaUtil import dev.usbharu.httpsignature.common.HttpHeaders @@ -29,7 +29,7 @@ class InboxJobProcessor( private val objectMapper: ObjectMapper, private val signatureHeaderParser: SignatureHeaderParser, private val signatureVerifier: HttpSignatureVerifier, - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, private val apUserService: APUserService, private val transaction: Transaction ) : JobProcessor<InboxJobParam, InboxJob> { @@ -50,7 +50,7 @@ class InboxJobProcessor( val user = transaction.transaction { try { - userQueryService.findByKeyId(signature.keyId) + actorQueryService.findByKeyId(signature.keyId) } catch (_: FailedToGetResourcesException) { apUserService.fetchPersonWithEntity(signature.keyId).second } diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/objects/note/APNoteService.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/objects/note/APNoteService.kt index 0e5b6e14..32a542d4 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/objects/note/APNoteService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/objects/note/APNoteService.kt @@ -140,7 +140,7 @@ class APNoteServiceImpl( postService.createRemote( postBuilder.of( id = postRepository.generateId(), - userId = person.second.id, + actorId = person.second.id, text = note.content, createdAt = Instant.parse(note.published).toEpochMilli(), visibility = visibility, diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/objects/note/ApNoteJobProcessor.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/objects/note/ApNoteJobProcessor.kt index 181f869a..a9dbab74 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/objects/note/ApNoteJobProcessor.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/objects/note/ApNoteJobProcessor.kt @@ -7,7 +7,7 @@ import dev.usbharu.hideout.activitypub.service.common.APRequestService import dev.usbharu.hideout.application.external.Transaction import dev.usbharu.hideout.core.external.job.DeliverPostJob import dev.usbharu.hideout.core.external.job.DeliverPostJobParam -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.service.job.JobProcessor import org.slf4j.LoggerFactory import org.springframework.stereotype.Service @@ -16,13 +16,13 @@ import org.springframework.stereotype.Service class ApNoteJobProcessor( private val transaction: Transaction, private val objectMapper: ObjectMapper, - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, private val apRequestService: APRequestService ) : JobProcessor<DeliverPostJobParam, DeliverPostJob> { override suspend fun process(param: DeliverPostJobParam) { val create = objectMapper.readValue<Create>(param.create) transaction.transaction { - val signer = userQueryService.findByUrl(param.actor) + val signer = actorQueryService.findByUrl(param.actor) logger.debug("CreateNoteJob: actor: {} create: {} inbox: {}", param.actor, create, param.inbox) diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/objects/note/NoteApApiServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/objects/note/NoteApApiServiceImpl.kt index 079cc073..4420ceb0 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/objects/note/NoteApApiServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/objects/note/NoteApApiServiceImpl.kt @@ -44,7 +44,7 @@ class NoteApApiServiceImpl( return null } - if (followerQueryService.alreadyFollow(findById.second.userId, userId)) { + if (followerQueryService.alreadyFollow(findById.second.actorId, userId)) { return findById.first } return null diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/objects/user/APUserService.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/objects/user/APUserService.kt index a7efb238..1729c361 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/objects/user/APUserService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/objects/user/APUserService.kt @@ -9,8 +9,8 @@ import dev.usbharu.hideout.activitypub.service.common.resolve import dev.usbharu.hideout.application.config.ApplicationConfig import dev.usbharu.hideout.application.external.Transaction import dev.usbharu.hideout.core.domain.exception.FailedToGetResourcesException -import dev.usbharu.hideout.core.domain.model.user.User -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.domain.model.actor.Actor +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.service.user.RemoteUserCreateDto import dev.usbharu.hideout.core.service.user.UserService import org.springframework.stereotype.Service @@ -28,13 +28,13 @@ interface APUserService { */ suspend fun fetchPerson(url: String, targetActor: String? = null): Person - suspend fun fetchPersonWithEntity(url: String, targetActor: String? = null): Pair<Person, User> + suspend fun fetchPersonWithEntity(url: String, targetActor: String? = null): Pair<Person, Actor> } @Service class APUserServiceImpl( private val userService: UserService, - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, private val transaction: Transaction, private val applicationConfig: ApplicationConfig, private val apResourceResolveService: APResourceResolveService @@ -43,7 +43,7 @@ class APUserServiceImpl( override suspend fun getPersonByName(name: String): Person { val userEntity = transaction.transaction { - userQueryService.findByNameAndDomain(name, applicationConfig.url.host) + actorQueryService.findByNameAndDomain(name, applicationConfig.url.host) } // TODO: JOINで書き直し val userUrl = "${applicationConfig.url}/users/$name" @@ -76,9 +76,9 @@ class APUserServiceImpl( fetchPersonWithEntity(url, targetActor).first @Transactional - override suspend fun fetchPersonWithEntity(url: String, targetActor: String?): Pair<Person, User> { + override suspend fun fetchPersonWithEntity(url: String, targetActor: String?): Pair<Person, Actor> { return try { - val userEntity = userQueryService.findByUrl(url) + val userEntity = actorQueryService.findByUrl(url) val id = userEntity.url return entityToPerson(userEntity, id) to userEntity } catch (ignore: FailedToGetResourcesException) { @@ -86,7 +86,7 @@ class APUserServiceImpl( val id = person.id try { - val userEntity = userQueryService.findByUrl(id) + val userEntity = actorQueryService.findByUrl(id) return entityToPerson(userEntity, id) to userEntity } catch (_: FailedToGetResourcesException) { } @@ -111,14 +111,14 @@ class APUserServiceImpl( } private fun entityToPerson( - userEntity: User, + actorEntity: Actor, id: String ) = Person( type = emptyList(), - name = userEntity.name, + name = actorEntity.name, id = id, - preferredUsername = userEntity.name, - summary = userEntity.description, + preferredUsername = actorEntity.name, + summary = actorEntity.description, inbox = "$id/inbox", outbox = "$id/outbox", url = id, @@ -128,12 +128,12 @@ class APUserServiceImpl( url = "$id/icon.jpg" ), publicKey = Key( - id = userEntity.keyId, + id = actorEntity.keyId, owner = id, - publicKeyPem = userEntity.publicKey + publicKeyPem = actorEntity.publicKey ), endpoints = mapOf("sharedInbox" to "${applicationConfig.url}/inbox"), - followers = userEntity.followers, - following = userEntity.following + followers = actorEntity.followers, + following = actorEntity.following ) } diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/webfinger/WebFingerApiService.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/webfinger/WebFingerApiService.kt index d4af15fa..1cdd8230 100644 --- a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/webfinger/WebFingerApiService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/webfinger/WebFingerApiService.kt @@ -1,21 +1,21 @@ package dev.usbharu.hideout.activitypub.service.webfinger import dev.usbharu.hideout.application.external.Transaction -import dev.usbharu.hideout.core.domain.model.user.User -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.domain.model.actor.Actor +import dev.usbharu.hideout.core.query.ActorQueryService import org.springframework.stereotype.Service @Service interface WebFingerApiService { - suspend fun findByNameAndDomain(name: String, domain: String): User + suspend fun findByNameAndDomain(name: String, domain: String): Actor } @Service -class WebFingerApiServiceImpl(private val transaction: Transaction, private val userQueryService: UserQueryService) : +class WebFingerApiServiceImpl(private val transaction: Transaction, private val actorQueryService: ActorQueryService) : WebFingerApiService { - override suspend fun findByNameAndDomain(name: String, domain: String): User { + override suspend fun findByNameAndDomain(name: String, domain: String): Actor { return transaction.transaction { - userQueryService.findByNameAndDomain(name, domain) + actorQueryService.findByNameAndDomain(name, domain) } } } diff --git a/src/main/kotlin/dev/usbharu/hideout/application/config/SecurityConfig.kt b/src/main/kotlin/dev/usbharu/hideout/application/config/SecurityConfig.kt index 08059d2d..144379c9 100644 --- a/src/main/kotlin/dev/usbharu/hideout/application/config/SecurityConfig.kt +++ b/src/main/kotlin/dev/usbharu/hideout/application/config/SecurityConfig.kt @@ -12,7 +12,7 @@ import dev.usbharu.hideout.core.infrastructure.springframework.httpsignature.Htt import dev.usbharu.hideout.core.infrastructure.springframework.httpsignature.HttpSignatureVerifierComposite import dev.usbharu.hideout.core.infrastructure.springframework.oauth2.UserDetailsImpl import dev.usbharu.hideout.core.infrastructure.springframework.oauth2.UserDetailsServiceImpl -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.util.RsaUtil import dev.usbharu.hideout.util.hasAnyScope import dev.usbharu.httpsignature.sign.RsaSha256HttpSignatureSigner @@ -69,7 +69,7 @@ import java.util.* class SecurityConfig { @Autowired - private lateinit var userQueryService: UserQueryService + private lateinit var actorQueryService: ActorQueryService @Bean fun authenticationManager(authenticationConfiguration: AuthenticationConfiguration): AuthenticationManager? = @@ -135,7 +135,7 @@ class SecurityConfig { val signatureHeaderParser = DefaultSignatureHeaderParser() provider.setPreAuthenticatedUserDetailsService( HttpSignatureUserDetailsService( - userQueryService, + actorQueryService, HttpSignatureVerifierComposite( mapOf( "rsa-sha256" to RsaSha256HttpSignatureVerifier( diff --git a/src/main/kotlin/dev/usbharu/hideout/core/domain/model/user/Acct.kt b/src/main/kotlin/dev/usbharu/hideout/core/domain/model/actor/Acct.kt similarity index 67% rename from src/main/kotlin/dev/usbharu/hideout/core/domain/model/user/Acct.kt rename to src/main/kotlin/dev/usbharu/hideout/core/domain/model/actor/Acct.kt index f4ea0cdc..d3777741 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/domain/model/user/Acct.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/domain/model/actor/Acct.kt @@ -1,3 +1,3 @@ -package dev.usbharu.hideout.core.domain.model.user +package dev.usbharu.hideout.core.domain.model.actor data class Acct(val username: String, val domain: String? = null, val isRemote: Boolean = domain == null) diff --git a/src/main/kotlin/dev/usbharu/hideout/core/domain/model/user/User.kt b/src/main/kotlin/dev/usbharu/hideout/core/domain/model/actor/Actor.kt similarity index 97% rename from src/main/kotlin/dev/usbharu/hideout/core/domain/model/user/User.kt rename to src/main/kotlin/dev/usbharu/hideout/core/domain/model/actor/Actor.kt index 4c2ded1c..b46c377d 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/domain/model/user/User.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/domain/model/actor/Actor.kt @@ -1,4 +1,4 @@ -package dev.usbharu.hideout.core.domain.model.user +package dev.usbharu.hideout.core.domain.model.actor import dev.usbharu.hideout.application.config.ApplicationConfig import dev.usbharu.hideout.application.config.CharacterLimit @@ -6,7 +6,7 @@ import org.slf4j.LoggerFactory import org.springframework.stereotype.Component import java.time.Instant -data class User private constructor( +data class Actor private constructor( val id: Long, val name: String, val domain: String, @@ -53,7 +53,7 @@ data class User private constructor( following: String? = null, followers: String? = null, instance: Long? = null - ): User { + ): Actor { // idは0未満ではいけない require(id >= 0) { "id must be greater than or equal to 0." } @@ -129,7 +129,7 @@ data class User private constructor( "keyId must contain non-blank characters." } - return User( + return Actor( id = id, name = limitedName, domain = domain, diff --git a/src/main/kotlin/dev/usbharu/hideout/core/domain/model/actor/ActorRepository.kt b/src/main/kotlin/dev/usbharu/hideout/core/domain/model/actor/ActorRepository.kt new file mode 100644 index 00000000..39887a5e --- /dev/null +++ b/src/main/kotlin/dev/usbharu/hideout/core/domain/model/actor/ActorRepository.kt @@ -0,0 +1,14 @@ +package dev.usbharu.hideout.core.domain.model.actor + +import org.springframework.stereotype.Repository + +@Repository +interface ActorRepository { + suspend fun save(actor: Actor): Actor + + suspend fun findById(id: Long): Actor? + + suspend fun delete(id: Long) + + suspend fun nextId(): Long +} diff --git a/src/main/kotlin/dev/usbharu/hideout/core/domain/model/post/Post.kt b/src/main/kotlin/dev/usbharu/hideout/core/domain/model/post/Post.kt index e9e2f043..3a5989ab 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/domain/model/post/Post.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/domain/model/post/Post.kt @@ -5,7 +5,7 @@ import org.springframework.stereotype.Component data class Post private constructor( val id: Long, - val userId: Long, + val actorId: Long, val overview: String? = null, val text: String, val createdAt: Long, @@ -23,7 +23,7 @@ data class Post private constructor( @Suppress("FunctionMinLength", "LongParameterList") fun of( id: Long, - userId: Long, + actorId: Long, overview: String? = null, text: String, createdAt: Long, @@ -37,7 +37,7 @@ data class Post private constructor( ): Post { require(id >= 0) { "id must be greater than or equal to 0." } - require(userId >= 0) { "userId must be greater than or equal to 0." } + require(actorId >= 0) { "actorId must be greater than or equal to 0." } val limitedOverview = if ((overview?.length ?: 0) >= characterLimit.post.overview) { overview?.substring(0, characterLimit.post.overview) @@ -61,7 +61,7 @@ data class Post private constructor( return Post( id = id, - userId = userId, + actorId = actorId, overview = limitedOverview, text = limitedText, createdAt = createdAt, diff --git a/src/main/kotlin/dev/usbharu/hideout/core/domain/model/reaction/Reaction.kt b/src/main/kotlin/dev/usbharu/hideout/core/domain/model/reaction/Reaction.kt index b84c1a2e..02997373 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/domain/model/reaction/Reaction.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/domain/model/reaction/Reaction.kt @@ -1,3 +1,3 @@ package dev.usbharu.hideout.core.domain.model.reaction -data class Reaction(val id: Long, val emojiId: Long, val postId: Long, val userId: Long) +data class Reaction(val id: Long, val emojiId: Long, val postId: Long, val actorId: Long) diff --git a/src/main/kotlin/dev/usbharu/hideout/core/domain/model/relationship/Relationship.kt b/src/main/kotlin/dev/usbharu/hideout/core/domain/model/relationship/Relationship.kt index 51a3da60..0090a43a 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/domain/model/relationship/Relationship.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/domain/model/relationship/Relationship.kt @@ -3,8 +3,8 @@ package dev.usbharu.hideout.core.domain.model.relationship /** * ユーザーとの関係を表します * - * @property userId ユーザー - * @property targetUserId 相手ユーザー + * @property actorId ユーザー + * @property targetActorId 相手ユーザー * @property following フォローしているか * @property blocking ブロックしているか * @property muting ミュートしているか @@ -12,8 +12,8 @@ package dev.usbharu.hideout.core.domain.model.relationship * @property ignoreFollowRequestFromTarget フォローリクエストを無視しているか */ data class Relationship( - val userId: Long, - val targetUserId: Long, + val actorId: Long, + val targetActorId: Long, val following: Boolean, val blocking: Boolean, val muting: Boolean, diff --git a/src/main/kotlin/dev/usbharu/hideout/core/domain/model/relationship/RelationshipRepository.kt b/src/main/kotlin/dev/usbharu/hideout/core/domain/model/relationship/RelationshipRepository.kt index 4b3fc6bc..75da4e35 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/domain/model/relationship/RelationshipRepository.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/domain/model/relationship/RelationshipRepository.kt @@ -23,9 +23,9 @@ interface RelationshipRepository { /** * userIdとtargetUserIdで[Relationship]を取得します * - * @param userId 取得するユーザーID - * @param targetUserId 対象ユーザーID + * @param actorId 取得するユーザーID + * @param targetActorId 対象ユーザーID * @return 取得された[Relationship] 存在しない場合nullが返ります */ - suspend fun findByUserIdAndTargetUserId(userId: Long, targetUserId: Long): Relationship? + suspend fun findByUserIdAndTargetUserId(actorId: Long, targetActorId: Long): Relationship? } diff --git a/src/main/kotlin/dev/usbharu/hideout/core/domain/model/relationship/RelationshipRepositoryImpl.kt b/src/main/kotlin/dev/usbharu/hideout/core/domain/model/relationship/RelationshipRepositoryImpl.kt index c7e6986d..6deef1bf 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/domain/model/relationship/RelationshipRepositoryImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/domain/model/relationship/RelationshipRepositoryImpl.kt @@ -1,6 +1,6 @@ package dev.usbharu.hideout.core.domain.model.relationship -import dev.usbharu.hideout.core.infrastructure.exposedrepository.Users +import dev.usbharu.hideout.core.infrastructure.exposedrepository.Actors import org.jetbrains.exposed.dao.id.LongIdTable import org.jetbrains.exposed.sql.* import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq @@ -12,15 +12,15 @@ class RelationshipRepositoryImpl : RelationshipRepository { val singleOrNull = Relationships .select { - (Relationships.userId eq relationship.userId) - .and(Relationships.targetUserId eq relationship.targetUserId) + (Relationships.actorId eq relationship.actorId) + .and(Relationships.targetActorId eq relationship.targetActorId) } .singleOrNull() if (singleOrNull == null) { Relationships.insert { - it[userId] = relationship.userId - it[targetUserId] = relationship.targetUserId + it[actorId] = relationship.actorId + it[targetActorId] = relationship.targetActorId it[following] = relationship.following it[blocking] = relationship.blocking it[muting] = relationship.muting @@ -30,8 +30,8 @@ class RelationshipRepositoryImpl : RelationshipRepository { } else { Relationships .update({ - (Relationships.userId eq relationship.userId) - .and(Relationships.targetUserId eq relationship.targetUserId) + (Relationships.actorId eq relationship.actorId) + .and(Relationships.targetActorId eq relationship.targetActorId) }) { it[following] = relationship.following it[blocking] = relationship.blocking @@ -45,23 +45,23 @@ class RelationshipRepositoryImpl : RelationshipRepository { override suspend fun delete(relationship: Relationship) { Relationships.deleteWhere { - (Relationships.userId eq relationship.userId) - .and(Relationships.targetUserId eq relationship.targetUserId) + (Relationships.actorId eq relationship.actorId) + .and(Relationships.targetActorId eq relationship.targetActorId) } } - override suspend fun findByUserIdAndTargetUserId(userId: Long, targetUserId: Long): Relationship? { + override suspend fun findByUserIdAndTargetUserId(actorId: Long, targetActorId: Long): Relationship? { return Relationships.select { - (Relationships.userId eq userId) - .and(Relationships.targetUserId eq targetUserId) + (Relationships.actorId eq actorId) + .and(Relationships.targetActorId eq targetActorId) }.singleOrNull() ?.toRelationships() } } fun ResultRow.toRelationships(): Relationship = Relationship( - userId = this[Relationships.userId], - targetUserId = this[Relationships.targetUserId], + actorId = this[Relationships.actorId], + targetActorId = this[Relationships.targetActorId], following = this[Relationships.following], blocking = this[Relationships.blocking], muting = this[Relationships.muting], @@ -70,8 +70,8 @@ fun ResultRow.toRelationships(): Relationship = Relationship( ) object Relationships : LongIdTable("relationships") { - val userId = long("user_id").references(Users.id) - val targetUserId = long("target_user_id").references(Users.id) + val actorId = long("actor_id").references(Actors.id) + val targetActorId = long("target_actor_id").references(Actors.id) val following = bool("following") val blocking = bool("blocking") val muting = bool("muting") @@ -79,6 +79,6 @@ object Relationships : LongIdTable("relationships") { val ignoreFollowRequestFromTarget = bool("ignore_follow_request") init { - uniqueIndex(userId, targetUserId) + uniqueIndex(actorId, targetActorId) } } diff --git a/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timeline/Timeline.kt b/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timeline/Timeline.kt index 5a08816e..cc9b181e 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timeline/Timeline.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timeline/Timeline.kt @@ -13,7 +13,7 @@ data class Timeline( val userId: Long, val timelineId: Long, val postId: Long, - val postUserId: Long, + val postActorId: Long, val createdAt: Long, val replyId: Long?, val repostId: Long?, diff --git a/src/main/kotlin/dev/usbharu/hideout/core/domain/model/user/UserRepository.kt b/src/main/kotlin/dev/usbharu/hideout/core/domain/model/user/UserRepository.kt deleted file mode 100644 index f37d45fe..00000000 --- a/src/main/kotlin/dev/usbharu/hideout/core/domain/model/user/UserRepository.kt +++ /dev/null @@ -1,14 +0,0 @@ -package dev.usbharu.hideout.core.domain.model.user - -import org.springframework.stereotype.Repository - -@Repository -interface UserRepository { - suspend fun save(user: User): User - - suspend fun findById(id: Long): User? - - suspend fun delete(id: Long) - - suspend fun nextId(): Long -} diff --git a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposed/PostResultRowMapper.kt b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposed/PostResultRowMapper.kt index 8505a44d..88b4e50c 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposed/PostResultRowMapper.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposed/PostResultRowMapper.kt @@ -12,7 +12,7 @@ class PostResultRowMapper(private val postBuilder: Post.PostBuilder) : ResultRow override fun map(resultRow: ResultRow): Post { return postBuilder.of( id = resultRow[Posts.id], - userId = resultRow[Posts.userId], + actorId = resultRow[Posts.actorId], overview = resultRow[Posts.overview], text = resultRow[Posts.text], createdAt = resultRow[Posts.createdAt], diff --git a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposed/UserQueryMapper.kt b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposed/UserQueryMapper.kt index 7361815c..c63239d5 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposed/UserQueryMapper.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposed/UserQueryMapper.kt @@ -2,11 +2,11 @@ package dev.usbharu.hideout.core.infrastructure.exposed import dev.usbharu.hideout.application.infrastructure.exposed.QueryMapper import dev.usbharu.hideout.application.infrastructure.exposed.ResultRowMapper -import dev.usbharu.hideout.core.domain.model.user.User +import dev.usbharu.hideout.core.domain.model.actor.Actor import org.jetbrains.exposed.sql.Query import org.springframework.stereotype.Component @Component -class UserQueryMapper(private val userResultRowMapper: ResultRowMapper<User>) : QueryMapper<User> { - override fun map(query: Query): List<User> = query.map(userResultRowMapper::map) +class UserQueryMapper(private val actorResultRowMapper: ResultRowMapper<Actor>) : QueryMapper<Actor> { + override fun map(query: Query): List<Actor> = query.map(actorResultRowMapper::map) } diff --git a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposed/UserResultRowMapper.kt b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposed/UserResultRowMapper.kt index bad247f3..a6cdd816 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposed/UserResultRowMapper.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposed/UserResultRowMapper.kt @@ -1,32 +1,32 @@ package dev.usbharu.hideout.core.infrastructure.exposed import dev.usbharu.hideout.application.infrastructure.exposed.ResultRowMapper -import dev.usbharu.hideout.core.domain.model.user.User -import dev.usbharu.hideout.core.infrastructure.exposedrepository.Users +import dev.usbharu.hideout.core.domain.model.actor.Actor +import dev.usbharu.hideout.core.infrastructure.exposedrepository.Actors import org.jetbrains.exposed.sql.ResultRow import org.springframework.stereotype.Component import java.time.Instant @Component -class UserResultRowMapper(private val userBuilder: User.UserBuilder) : ResultRowMapper<User> { - override fun map(resultRow: ResultRow): User { - return userBuilder.of( - id = resultRow[Users.id], - name = resultRow[Users.name], - domain = resultRow[Users.domain], - screenName = resultRow[Users.screenName], - description = resultRow[Users.description], - password = resultRow[Users.password], - inbox = resultRow[Users.inbox], - outbox = resultRow[Users.outbox], - url = resultRow[Users.url], - publicKey = resultRow[Users.publicKey], - privateKey = resultRow[Users.privateKey], - createdAt = Instant.ofEpochMilli((resultRow[Users.createdAt])), - keyId = resultRow[Users.keyId], - followers = resultRow[Users.followers], - following = resultRow[Users.following], - instance = resultRow[Users.instance] +class UserResultRowMapper(private val actorBuilder: Actor.UserBuilder) : ResultRowMapper<Actor> { + override fun map(resultRow: ResultRow): Actor { + return actorBuilder.of( + id = resultRow[Actors.id], + name = resultRow[Actors.name], + domain = resultRow[Actors.domain], + screenName = resultRow[Actors.screenName], + description = resultRow[Actors.description], + password = resultRow[Actors.password], + inbox = resultRow[Actors.inbox], + outbox = resultRow[Actors.outbox], + url = resultRow[Actors.url], + publicKey = resultRow[Actors.publicKey], + privateKey = resultRow[Actors.privateKey], + createdAt = Instant.ofEpochMilli((resultRow[Actors.createdAt])), + keyId = resultRow[Actors.keyId], + followers = resultRow[Actors.followers], + following = resultRow[Actors.following], + instance = resultRow[Actors.instance] ) } } diff --git a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedquery/ActorQueryServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedquery/ActorQueryServiceImpl.kt new file mode 100644 index 00000000..6dab78c2 --- /dev/null +++ b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedquery/ActorQueryServiceImpl.kt @@ -0,0 +1,60 @@ +package dev.usbharu.hideout.core.infrastructure.exposedquery + +import dev.usbharu.hideout.application.infrastructure.exposed.QueryMapper +import dev.usbharu.hideout.application.infrastructure.exposed.ResultRowMapper +import dev.usbharu.hideout.core.domain.exception.FailedToGetResourcesException +import dev.usbharu.hideout.core.domain.model.actor.Actor +import dev.usbharu.hideout.core.infrastructure.exposedrepository.Actors +import dev.usbharu.hideout.core.query.ActorQueryService +import dev.usbharu.hideout.util.singleOr +import org.jetbrains.exposed.sql.and +import org.jetbrains.exposed.sql.select +import org.jetbrains.exposed.sql.selectAll +import org.slf4j.LoggerFactory +import org.springframework.stereotype.Repository + +@Repository +class ActorQueryServiceImpl( + private val actorResultRowMapper: ResultRowMapper<Actor>, + private val actorQueryMapper: QueryMapper<Actor> +) : ActorQueryService { + + private val logger = LoggerFactory.getLogger(ActorQueryServiceImpl::class.java) + + override suspend fun findAll(limit: Int, offset: Long): List<Actor> = + Actors.selectAll().limit(limit, offset).let(actorQueryMapper::map) + + override suspend fun findById(id: Long): Actor = Actors.select { Actors.id eq id } + .singleOr { FailedToGetResourcesException("id: $id is duplicate or does not exist.", it) } + .let(actorResultRowMapper::map) + + override suspend fun findByName(name: String): List<Actor> = + Actors.select { Actors.name eq name }.let(actorQueryMapper::map) + + override suspend fun findByNameAndDomain(name: String, domain: String): Actor = + Actors + .select { Actors.name eq name and (Actors.domain eq domain) } + .singleOr { + FailedToGetResourcesException("name: $name,domain: $domain is duplicate or does not exist.", it) + } + .let(actorResultRowMapper::map) + + override suspend fun findByUrl(url: String): Actor { + logger.trace("findByUrl url: $url") + return Actors.select { Actors.url eq url } + .singleOr { FailedToGetResourcesException("url: $url is duplicate or does not exist.", it) } + .let(actorResultRowMapper::map) + } + + override suspend fun findByIds(ids: List<Long>): List<Actor> = + Actors.select { Actors.id inList ids }.let(actorQueryMapper::map) + + override suspend fun existByNameAndDomain(name: String, domain: String): Boolean = + Actors.select { Actors.name eq name and (Actors.domain eq domain) }.empty().not() + + override suspend fun findByKeyId(keyId: String): Actor { + return Actors.select { Actors.keyId eq keyId } + .singleOr { FailedToGetResourcesException("keyId: $keyId is duplicate or does not exist.", it) } + .let(actorResultRowMapper::map) + } +} diff --git a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedquery/FollowerQueryServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedquery/FollowerQueryServiceImpl.kt index df5acb77..f7161b2e 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedquery/FollowerQueryServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedquery/FollowerQueryServiceImpl.kt @@ -1,24 +1,24 @@ package dev.usbharu.hideout.core.infrastructure.exposedquery +import dev.usbharu.hideout.core.domain.model.actor.Actor import dev.usbharu.hideout.core.domain.model.relationship.RelationshipRepository -import dev.usbharu.hideout.core.domain.model.user.User +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.query.FollowerQueryService import dev.usbharu.hideout.core.query.RelationshipQueryService -import dev.usbharu.hideout.core.query.UserQueryService import org.springframework.stereotype.Repository @Repository class FollowerQueryServiceImpl( private val relationshipQueryService: RelationshipQueryService, - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, private val relationshipRepository: RelationshipRepository ) : FollowerQueryService { - override suspend fun findFollowersById(id: Long): List<User> { - return userQueryService.findByIds( - relationshipQueryService.findByTargetIdAndFollowing(id, true).map { it.userId } + override suspend fun findFollowersById(id: Long): List<Actor> { + return actorQueryService.findByIds( + relationshipQueryService.findByTargetIdAndFollowing(id, true).map { it.actorId } ) } - override suspend fun alreadyFollow(userId: Long, followerId: Long): Boolean = - relationshipRepository.findByUserIdAndTargetUserId(followerId, userId)?.following ?: false + override suspend fun alreadyFollow(actorId: Long, followerId: Long): Boolean = + relationshipRepository.findByUserIdAndTargetUserId(followerId, actorId)?.following ?: false } diff --git a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedquery/ReactionQueryServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedquery/ReactionQueryServiceImpl.kt index 2f710361..b7bd1642 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedquery/ReactionQueryServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedquery/ReactionQueryServiceImpl.kt @@ -6,44 +6,46 @@ import dev.usbharu.hideout.core.infrastructure.exposedrepository.Reactions import dev.usbharu.hideout.core.infrastructure.exposedrepository.toReaction import dev.usbharu.hideout.core.query.ReactionQueryService import dev.usbharu.hideout.util.singleOr -import org.jetbrains.exposed.sql.* import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq +import org.jetbrains.exposed.sql.and +import org.jetbrains.exposed.sql.deleteWhere +import org.jetbrains.exposed.sql.select import org.springframework.stereotype.Repository @Repository class ReactionQueryServiceImpl : ReactionQueryService { - override suspend fun findByPostId(postId: Long, userId: Long?): List<Reaction> { + override suspend fun findByPostId(postId: Long, actorId: Long?): List<Reaction> { return Reactions.select { Reactions.postId.eq(postId) }.map { it.toReaction() } } @Suppress("FunctionMaxLength") - override suspend fun findByPostIdAndUserIdAndEmojiId(postId: Long, userId: Long, emojiId: Long): Reaction { + override suspend fun findByPostIdAndActorIdAndEmojiId(postId: Long, actorId: Long, emojiId: Long): Reaction { return Reactions .select { - Reactions.postId.eq(postId).and(Reactions.userId.eq(userId)).and( + Reactions.postId.eq(postId).and(Reactions.actorId.eq(actorId)).and( Reactions.emojiId.eq(emojiId) ) } .singleOr { FailedToGetResourcesException( - "postId: $postId,userId: $userId,emojiId: $emojiId is duplicate or does not exist.", + "postId: $postId,userId: $actorId,emojiId: $emojiId is duplicate or does not exist.", it ) } .toReaction() } - override suspend fun reactionAlreadyExist(postId: Long, userId: Long, emojiId: Long): Boolean { + override suspend fun reactionAlreadyExist(postId: Long, actorId: Long, emojiId: Long): Boolean { return Reactions.select { - Reactions.postId.eq(postId).and(Reactions.userId.eq(userId)).and( + Reactions.postId.eq(postId).and(Reactions.actorId.eq(actorId)).and( Reactions.emojiId.eq(emojiId) ) }.empty().not() } - override suspend fun deleteByPostIdAndUserId(postId: Long, userId: Long) { - Reactions.deleteWhere { Reactions.postId.eq(postId).and(Reactions.userId.eq(userId)) } + override suspend fun deleteByPostIdAndActorId(postId: Long, actorId: Long) { + Reactions.deleteWhere { Reactions.postId.eq(postId).and(Reactions.actorId.eq(actorId)) } } } diff --git a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedquery/RelationshipQueryServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedquery/RelationshipQueryServiceImpl.kt index f1a122c9..f4f31633 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedquery/RelationshipQueryServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedquery/RelationshipQueryServiceImpl.kt @@ -11,6 +11,6 @@ import org.springframework.stereotype.Service @Service class RelationshipQueryServiceImpl : RelationshipQueryService { override suspend fun findByTargetIdAndFollowing(targetId: Long, following: Boolean): List<Relationship> = - Relationships.select { Relationships.targetUserId eq targetId and (Relationships.following eq following) } + Relationships.select { Relationships.targetActorId eq targetId and (Relationships.following eq following) } .map { it.toRelationships() } } diff --git a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedquery/UserQueryServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedquery/UserQueryServiceImpl.kt deleted file mode 100644 index e2a580e8..00000000 --- a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedquery/UserQueryServiceImpl.kt +++ /dev/null @@ -1,60 +0,0 @@ -package dev.usbharu.hideout.core.infrastructure.exposedquery - -import dev.usbharu.hideout.application.infrastructure.exposed.QueryMapper -import dev.usbharu.hideout.application.infrastructure.exposed.ResultRowMapper -import dev.usbharu.hideout.core.domain.exception.FailedToGetResourcesException -import dev.usbharu.hideout.core.domain.model.user.User -import dev.usbharu.hideout.core.infrastructure.exposedrepository.Users -import dev.usbharu.hideout.core.query.UserQueryService -import dev.usbharu.hideout.util.singleOr -import org.jetbrains.exposed.sql.and -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.selectAll -import org.slf4j.LoggerFactory -import org.springframework.stereotype.Repository - -@Repository -class UserQueryServiceImpl( - private val userResultRowMapper: ResultRowMapper<User>, - private val userQueryMapper: QueryMapper<User> -) : UserQueryService { - - private val logger = LoggerFactory.getLogger(UserQueryServiceImpl::class.java) - - override suspend fun findAll(limit: Int, offset: Long): List<User> = - Users.selectAll().limit(limit, offset).let(userQueryMapper::map) - - override suspend fun findById(id: Long): User = Users.select { Users.id eq id } - .singleOr { FailedToGetResourcesException("id: $id is duplicate or does not exist.", it) } - .let(userResultRowMapper::map) - - override suspend fun findByName(name: String): List<User> = - Users.select { Users.name eq name }.let(userQueryMapper::map) - - override suspend fun findByNameAndDomain(name: String, domain: String): User = - Users - .select { Users.name eq name and (Users.domain eq domain) } - .singleOr { - FailedToGetResourcesException("name: $name,domain: $domain is duplicate or does not exist.", it) - } - .let(userResultRowMapper::map) - - override suspend fun findByUrl(url: String): User { - logger.trace("findByUrl url: $url") - return Users.select { Users.url eq url } - .singleOr { FailedToGetResourcesException("url: $url is duplicate or does not exist.", it) } - .let(userResultRowMapper::map) - } - - override suspend fun findByIds(ids: List<Long>): List<User> = - Users.select { Users.id inList ids }.let(userQueryMapper::map) - - override suspend fun existByNameAndDomain(name: String, domain: String): Boolean = - Users.select { Users.name eq name and (Users.domain eq domain) }.empty().not() - - override suspend fun findByKeyId(keyId: String): User { - return Users.select { Users.keyId eq keyId } - .singleOr { FailedToGetResourcesException("keyId: $keyId is duplicate or does not exist.", it) } - .let(userResultRowMapper::map) - } -} diff --git a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/ActorRepositoryImpl.kt b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/ActorRepositoryImpl.kt new file mode 100644 index 00000000..d5988971 --- /dev/null +++ b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/ActorRepositoryImpl.kt @@ -0,0 +1,100 @@ +package dev.usbharu.hideout.core.infrastructure.exposedrepository + +import dev.usbharu.hideout.application.infrastructure.exposed.ResultRowMapper +import dev.usbharu.hideout.application.service.id.IdGenerateService +import dev.usbharu.hideout.core.domain.model.actor.Actor +import dev.usbharu.hideout.core.domain.model.actor.ActorRepository +import org.jetbrains.exposed.sql.* +import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq +import org.springframework.stereotype.Repository + +@Repository +class ActorRepositoryImpl( + private val idGenerateService: IdGenerateService, + private val actorResultRowMapper: ResultRowMapper<Actor> +) : + ActorRepository { + + override suspend fun save(actor: Actor): Actor { + val singleOrNull = Actors.select { Actors.id eq actor.id }.empty() + if (singleOrNull) { + Actors.insert { + it[id] = actor.id + it[name] = actor.name + it[domain] = actor.domain + it[screenName] = actor.screenName + it[description] = actor.description + it[password] = actor.password + it[inbox] = actor.inbox + it[outbox] = actor.outbox + it[url] = actor.url + it[createdAt] = actor.createdAt.toEpochMilli() + it[publicKey] = actor.publicKey + it[privateKey] = actor.privateKey + it[keyId] = actor.keyId + it[following] = actor.following + it[followers] = actor.followers + it[instance] = actor.instance + } + } else { + Actors.update({ Actors.id eq actor.id }) { + it[name] = actor.name + it[domain] = actor.domain + it[screenName] = actor.screenName + it[description] = actor.description + it[password] = actor.password + it[inbox] = actor.inbox + it[outbox] = actor.outbox + it[url] = actor.url + it[createdAt] = actor.createdAt.toEpochMilli() + it[publicKey] = actor.publicKey + it[privateKey] = actor.privateKey + it[keyId] = actor.keyId + it[following] = actor.following + it[followers] = actor.followers + it[instance] = actor.instance + } + } + return actor + } + + override suspend fun findById(id: Long): Actor? = + Actors.select { Actors.id eq id }.singleOrNull()?.let(actorResultRowMapper::map) + + override suspend fun delete(id: Long) { + Actors.deleteWhere { Actors.id.eq(id) } + } + + override suspend fun nextId(): Long = idGenerateService.generateId() +} + +object Actors : Table("users") { + val id: Column<Long> = long("id") + val name: Column<String> = varchar("name", length = 300) + val domain: Column<String> = varchar("domain", length = 1000) + val screenName: Column<String> = varchar("screen_name", length = 300) + val description: Column<String> = varchar( + "description", + length = 10000 + ) + val password: Column<String?> = varchar("password", length = 255).nullable() + val inbox: Column<String> = varchar("inbox", length = 1000).uniqueIndex() + val outbox: Column<String> = varchar("outbox", length = 1000).uniqueIndex() + val url: Column<String> = varchar("url", length = 1000).uniqueIndex() + val publicKey: Column<String> = varchar("public_key", length = 10000) + val privateKey: Column<String?> = varchar( + "private_key", + length = 10000 + ).nullable() + val createdAt: Column<Long> = long("created_at") + val keyId = varchar("key_id", length = 1000) + val following = varchar("following", length = 1000).nullable() + val followers = varchar("followers", length = 1000).nullable() + val instance = long("instance").references(Instance.id).nullable() + + override val primaryKey: PrimaryKey = PrimaryKey(id) + + init { + uniqueIndex(name, domain) + } +} diff --git a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/ExposedTimelineRepository.kt b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/ExposedTimelineRepository.kt index ee372e1c..a2b3c186 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/ExposedTimelineRepository.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/ExposedTimelineRepository.kt @@ -22,7 +22,7 @@ class ExposedTimelineRepository(private val idGenerateService: IdGenerateService it[userId] = timeline.userId it[timelineId] = timeline.timelineId it[postId] = timeline.postId - it[postUserId] = timeline.postUserId + it[postUserId] = timeline.postActorId it[createdAt] = timeline.createdAt it[replyId] = timeline.replyId it[repostId] = timeline.repostId @@ -37,7 +37,7 @@ class ExposedTimelineRepository(private val idGenerateService: IdGenerateService it[userId] = timeline.userId it[timelineId] = timeline.timelineId it[postId] = timeline.postId - it[postUserId] = timeline.postUserId + it[postUserId] = timeline.postActorId it[createdAt] = timeline.createdAt it[replyId] = timeline.replyId it[repostId] = timeline.repostId @@ -57,7 +57,7 @@ class ExposedTimelineRepository(private val idGenerateService: IdGenerateService this[Timelines.userId] = it.userId this[Timelines.timelineId] = it.timelineId this[Timelines.postId] = it.postId - this[Timelines.postUserId] = it.postUserId + this[Timelines.postUserId] = it.postActorId this[Timelines.createdAt] = it.createdAt this[Timelines.replyId] = it.replyId this[Timelines.repostId] = it.repostId @@ -84,7 +84,7 @@ fun ResultRow.toTimeline(): Timeline { userId = this[Timelines.userId], timelineId = this[Timelines.timelineId], postId = this[Timelines.postId], - postUserId = this[Timelines.postUserId], + postActorId = this[Timelines.postUserId], createdAt = this[Timelines.createdAt], replyId = this[Timelines.replyId], repostId = this[Timelines.repostId], diff --git a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/PostRepositoryImpl.kt b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/PostRepositoryImpl.kt index 1de54ad8..d71f0cab 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/PostRepositoryImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/PostRepositoryImpl.kt @@ -23,7 +23,7 @@ class PostRepositoryImpl( if (singleOrNull == null) { Posts.insert { it[id] = post.id - it[userId] = post.userId + it[actorId] = post.actorId it[overview] = post.overview it[text] = post.text it[createdAt] = post.createdAt @@ -47,7 +47,7 @@ class PostRepositoryImpl( this[PostsMedia.mediaId] = it } Posts.update({ Posts.id eq post.id }) { - it[userId] = post.userId + it[actorId] = post.actorId it[overview] = post.overview it[text] = post.text it[createdAt] = post.createdAt @@ -75,7 +75,7 @@ class PostRepositoryImpl( object Posts : Table() { val id: Column<Long> = long("id") - val userId: Column<Long> = long("user_id").references(Users.id) + val actorId: Column<Long> = long("actor_id").references(Actors.id) val overview: Column<String?> = varchar("overview", 100).nullable() val text: Column<String> = varchar("text", 3000) val createdAt: Column<Long> = long("created_at") diff --git a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/ReactionRepositoryImpl.kt b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/ReactionRepositoryImpl.kt index e6bcf355..a94abda4 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/ReactionRepositoryImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/ReactionRepositoryImpl.kt @@ -21,13 +21,13 @@ class ReactionRepositoryImpl( it[id] = reaction.id it[emojiId] = reaction.emojiId it[postId] = reaction.postId - it[userId] = reaction.userId + it[actorId] = reaction.actorId } } else { Reactions.update({ Reactions.id eq reaction.id }) { it[emojiId] = reaction.emojiId it[postId] = reaction.postId - it[userId] = reaction.userId + it[actorId] = reaction.actorId } } return reaction @@ -37,7 +37,7 @@ class ReactionRepositoryImpl( Reactions.deleteWhere { id.eq(reaction.id) .and(postId.eq(reaction.postId)) - .and(userId.eq(reaction.postId)) + .and(actorId.eq(reaction.postId)) .and(emojiId.eq(reaction.emojiId)) } return reaction @@ -49,16 +49,16 @@ fun ResultRow.toReaction(): Reaction { this[Reactions.id].value, this[Reactions.emojiId], this[Reactions.postId], - this[Reactions.userId] + this[Reactions.actorId] ) } object Reactions : LongIdTable("reactions") { val emojiId: Column<Long> = long("emoji_id") val postId: Column<Long> = long("post_id").references(Posts.id) - val userId: Column<Long> = long("user_id").references(Users.id) + val actorId: Column<Long> = long("actor_id").references(Actors.id) init { - uniqueIndex(emojiId, postId, userId) + uniqueIndex(emojiId, postId, actorId) } } diff --git a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/UserRepositoryImpl.kt b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/UserRepositoryImpl.kt deleted file mode 100644 index b4adbaad..00000000 --- a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/UserRepositoryImpl.kt +++ /dev/null @@ -1,100 +0,0 @@ -package dev.usbharu.hideout.core.infrastructure.exposedrepository - -import dev.usbharu.hideout.application.infrastructure.exposed.ResultRowMapper -import dev.usbharu.hideout.application.service.id.IdGenerateService -import dev.usbharu.hideout.core.domain.model.user.User -import dev.usbharu.hideout.core.domain.model.user.UserRepository -import org.jetbrains.exposed.sql.* -import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq -import org.springframework.stereotype.Repository - -@Repository -class UserRepositoryImpl( - private val idGenerateService: IdGenerateService, - private val userResultRowMapper: ResultRowMapper<User> -) : - UserRepository { - - override suspend fun save(user: User): User { - val singleOrNull = Users.select { Users.id eq user.id }.empty() - if (singleOrNull) { - Users.insert { - it[id] = user.id - it[name] = user.name - it[domain] = user.domain - it[screenName] = user.screenName - it[description] = user.description - it[password] = user.password - it[inbox] = user.inbox - it[outbox] = user.outbox - it[url] = user.url - it[createdAt] = user.createdAt.toEpochMilli() - it[publicKey] = user.publicKey - it[privateKey] = user.privateKey - it[keyId] = user.keyId - it[following] = user.following - it[followers] = user.followers - it[instance] = user.instance - } - } else { - Users.update({ Users.id eq user.id }) { - it[name] = user.name - it[domain] = user.domain - it[screenName] = user.screenName - it[description] = user.description - it[password] = user.password - it[inbox] = user.inbox - it[outbox] = user.outbox - it[url] = user.url - it[createdAt] = user.createdAt.toEpochMilli() - it[publicKey] = user.publicKey - it[privateKey] = user.privateKey - it[keyId] = user.keyId - it[following] = user.following - it[followers] = user.followers - it[instance] = user.instance - } - } - return user - } - - override suspend fun findById(id: Long): User? = - Users.select { Users.id eq id }.singleOrNull()?.let(userResultRowMapper::map) - - override suspend fun delete(id: Long) { - Users.deleteWhere { Users.id.eq(id) } - } - - override suspend fun nextId(): Long = idGenerateService.generateId() -} - -object Users : Table("users") { - val id: Column<Long> = long("id") - val name: Column<String> = varchar("name", length = 300) - val domain: Column<String> = varchar("domain", length = 1000) - val screenName: Column<String> = varchar("screen_name", length = 300) - val description: Column<String> = varchar( - "description", - length = 10000 - ) - val password: Column<String?> = varchar("password", length = 255).nullable() - val inbox: Column<String> = varchar("inbox", length = 1000).uniqueIndex() - val outbox: Column<String> = varchar("outbox", length = 1000).uniqueIndex() - val url: Column<String> = varchar("url", length = 1000).uniqueIndex() - val publicKey: Column<String> = varchar("public_key", length = 10000) - val privateKey: Column<String?> = varchar( - "private_key", - length = 10000 - ).nullable() - val createdAt: Column<Long> = long("created_at") - val keyId = varchar("key_id", length = 1000) - val following = varchar("following", length = 1000).nullable() - val followers = varchar("followers", length = 1000).nullable() - val instance = long("instance").references(Instance.id).nullable() - - override val primaryKey: PrimaryKey = PrimaryKey(id) - - init { - uniqueIndex(name, domain) - } -} diff --git a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/springframework/httpsignature/HttpSignatureUserDetailsService.kt b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/springframework/httpsignature/HttpSignatureUserDetailsService.kt index a75fe934..8c891da3 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/springframework/httpsignature/HttpSignatureUserDetailsService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/springframework/httpsignature/HttpSignatureUserDetailsService.kt @@ -3,7 +3,7 @@ package dev.usbharu.hideout.core.infrastructure.springframework.httpsignature import dev.usbharu.hideout.application.external.Transaction import dev.usbharu.hideout.core.domain.exception.FailedToGetResourcesException import dev.usbharu.hideout.core.domain.exception.HttpSignatureVerifyException -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.util.RsaUtil import dev.usbharu.httpsignature.common.HttpMethod import dev.usbharu.httpsignature.common.HttpRequest @@ -20,7 +20,7 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken class HttpSignatureUserDetailsService( - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, private val httpSignatureVerifier: HttpSignatureVerifier, private val transaction: Transaction, private val httpSignatureHeaderParser: SignatureHeaderParser @@ -35,7 +35,7 @@ class HttpSignatureUserDetailsService( val keyId = token.principal as String val findByKeyId = transaction.transaction { try { - userQueryService.findByKeyId(keyId) + actorQueryService.findByKeyId(keyId) } catch (e: FailedToGetResourcesException) { throw UsernameNotFoundException("User not found", e) } diff --git a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/springframework/oauth2/UserDetailsServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/springframework/oauth2/UserDetailsServiceImpl.kt index b8ac029c..7a6fa0ba 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/springframework/oauth2/UserDetailsServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/springframework/oauth2/UserDetailsServiceImpl.kt @@ -2,7 +2,7 @@ package dev.usbharu.hideout.core.infrastructure.springframework.oauth2 import dev.usbharu.hideout.application.config.ApplicationConfig import dev.usbharu.hideout.application.external.Transaction -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.query.ActorQueryService import kotlinx.coroutines.runBlocking import org.springframework.security.core.userdetails.UserDetails import org.springframework.security.core.userdetails.UserDetailsService @@ -11,7 +11,7 @@ import org.springframework.stereotype.Service @Service class UserDetailsServiceImpl( - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, private val applicationConfig: ApplicationConfig, private val transaction: Transaction ) : @@ -21,7 +21,7 @@ class UserDetailsServiceImpl( throw UsernameNotFoundException("$username not found") } transaction.transaction { - val findById = userQueryService.findByNameAndDomain(username, applicationConfig.url.host) + val findById = actorQueryService.findByNameAndDomain(username, applicationConfig.url.host) UserDetailsImpl( id = findById.id, username = findById.name, diff --git a/src/main/kotlin/dev/usbharu/hideout/core/query/ActorQueryService.kt b/src/main/kotlin/dev/usbharu/hideout/core/query/ActorQueryService.kt new file mode 100644 index 00000000..05b79e25 --- /dev/null +++ b/src/main/kotlin/dev/usbharu/hideout/core/query/ActorQueryService.kt @@ -0,0 +1,16 @@ +package dev.usbharu.hideout.core.query + +import dev.usbharu.hideout.core.domain.model.actor.Actor +import org.springframework.stereotype.Repository + +@Repository +interface ActorQueryService { + suspend fun findAll(limit: Int, offset: Long): List<Actor> + suspend fun findById(id: Long): Actor + suspend fun findByName(name: String): List<Actor> + suspend fun findByNameAndDomain(name: String, domain: String): Actor + suspend fun findByUrl(url: String): Actor + suspend fun findByIds(ids: List<Long>): List<Actor> + suspend fun existByNameAndDomain(name: String, domain: String): Boolean + suspend fun findByKeyId(keyId: String): Actor +} diff --git a/src/main/kotlin/dev/usbharu/hideout/core/query/FollowerQueryService.kt b/src/main/kotlin/dev/usbharu/hideout/core/query/FollowerQueryService.kt index 8d3d5bb4..18b98a47 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/query/FollowerQueryService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/query/FollowerQueryService.kt @@ -1,9 +1,9 @@ package dev.usbharu.hideout.core.query -import dev.usbharu.hideout.core.domain.model.user.User +import dev.usbharu.hideout.core.domain.model.actor.Actor @Deprecated("Use RelationshipQueryService") interface FollowerQueryService { - suspend fun findFollowersById(id: Long): List<User> - suspend fun alreadyFollow(userId: Long, followerId: Long): Boolean + suspend fun findFollowersById(id: Long): List<Actor> + suspend fun alreadyFollow(actorId: Long, followerId: Long): Boolean } diff --git a/src/main/kotlin/dev/usbharu/hideout/core/query/ReactionQueryService.kt b/src/main/kotlin/dev/usbharu/hideout/core/query/ReactionQueryService.kt index 0c378c58..602e0a76 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/query/ReactionQueryService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/query/ReactionQueryService.kt @@ -5,12 +5,12 @@ import org.springframework.stereotype.Repository @Repository interface ReactionQueryService { - suspend fun findByPostId(postId: Long, userId: Long? = null): List<Reaction> + suspend fun findByPostId(postId: Long, actorId: Long? = null): List<Reaction> @Suppress("FunctionMaxLength") - suspend fun findByPostIdAndUserIdAndEmojiId(postId: Long, userId: Long, emojiId: Long): Reaction + suspend fun findByPostIdAndActorIdAndEmojiId(postId: Long, actorId: Long, emojiId: Long): Reaction - suspend fun reactionAlreadyExist(postId: Long, userId: Long, emojiId: Long): Boolean + suspend fun reactionAlreadyExist(postId: Long, actorId: Long, emojiId: Long): Boolean - suspend fun deleteByPostIdAndUserId(postId: Long, userId: Long) + suspend fun deleteByPostIdAndActorId(postId: Long, actorId: Long) } diff --git a/src/main/kotlin/dev/usbharu/hideout/core/query/UserQueryService.kt b/src/main/kotlin/dev/usbharu/hideout/core/query/UserQueryService.kt deleted file mode 100644 index 9b78ae4e..00000000 --- a/src/main/kotlin/dev/usbharu/hideout/core/query/UserQueryService.kt +++ /dev/null @@ -1,16 +0,0 @@ -package dev.usbharu.hideout.core.query - -import dev.usbharu.hideout.core.domain.model.user.User -import org.springframework.stereotype.Repository - -@Repository -interface UserQueryService { - suspend fun findAll(limit: Int, offset: Long): List<User> - suspend fun findById(id: Long): User - suspend fun findByName(name: String): List<User> - suspend fun findByNameAndDomain(name: String, domain: String): User - suspend fun findByUrl(url: String): User - suspend fun findByIds(ids: List<Long>): List<User> - suspend fun existByNameAndDomain(name: String, domain: String): Boolean - suspend fun findByKeyId(keyId: String): User -} diff --git a/src/main/kotlin/dev/usbharu/hideout/core/service/follow/SendFollowDto.kt b/src/main/kotlin/dev/usbharu/hideout/core/service/follow/SendFollowDto.kt index 53b55c00..c6134b97 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/service/follow/SendFollowDto.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/service/follow/SendFollowDto.kt @@ -1,5 +1,5 @@ package dev.usbharu.hideout.core.service.follow -import dev.usbharu.hideout.core.domain.model.user.User +import dev.usbharu.hideout.core.domain.model.actor.Actor -data class SendFollowDto(val userId: User, val followTargetUserId: User) +data class SendFollowDto(val actorId: Actor, val followTargetActorId: Actor) diff --git a/src/main/kotlin/dev/usbharu/hideout/core/service/post/PostServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/core/service/post/PostServiceImpl.kt index 2e2c6c0c..a5bb1d47 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/service/post/PostServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/service/post/PostServiceImpl.kt @@ -2,9 +2,9 @@ package dev.usbharu.hideout.core.service.post import dev.usbharu.hideout.activitypub.service.activity.create.ApSendCreateService import dev.usbharu.hideout.core.domain.exception.UserNotFoundException +import dev.usbharu.hideout.core.domain.model.actor.ActorRepository import dev.usbharu.hideout.core.domain.model.post.Post import dev.usbharu.hideout.core.domain.model.post.PostRepository -import dev.usbharu.hideout.core.domain.model.user.UserRepository import dev.usbharu.hideout.core.query.PostQueryService import dev.usbharu.hideout.core.service.timeline.TimelineService import org.jetbrains.exposed.exceptions.ExposedSQLException @@ -16,7 +16,7 @@ import java.time.Instant @Service class PostServiceImpl( private val postRepository: PostRepository, - private val userRepository: UserRepository, + private val actorRepository: ActorRepository, private val timelineService: TimelineService, private val postQueryService: PostQueryService, private val postBuilder: Post.PostBuilder, @@ -32,7 +32,7 @@ class PostServiceImpl( } override suspend fun createRemote(post: Post): Post { - logger.info("START Create Remote Post user: {}, remote url: {}", post.userId, post.apId) + logger.info("START Create Remote Post user: {}, remote url: {}", post.actorId, post.apId) val createdPost = internalCreate(post, false) logger.info("SUCCESS Create Remote Post url: {}", createdPost.url) return createdPost @@ -55,11 +55,11 @@ class PostServiceImpl( } private suspend fun internalCreate(post: PostCreateDto, isLocal: Boolean): Post { - val user = userRepository.findById(post.userId) ?: throw UserNotFoundException("${post.userId} was not found") + val user = actorRepository.findById(post.userId) ?: throw UserNotFoundException("${post.userId} was not found") val id = postRepository.generateId() val createPost = postBuilder.of( id = id, - userId = post.userId, + actorId = post.userId, overview = post.overview, text = post.text, createdAt = Instant.now().toEpochMilli(), diff --git a/src/main/kotlin/dev/usbharu/hideout/core/service/reaction/ReactionService.kt b/src/main/kotlin/dev/usbharu/hideout/core/service/reaction/ReactionService.kt index 3e00918a..333deb1d 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/service/reaction/ReactionService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/service/reaction/ReactionService.kt @@ -4,7 +4,7 @@ import org.springframework.stereotype.Service @Service interface ReactionService { - suspend fun receiveReaction(name: String, domain: String, userId: Long, postId: Long) - suspend fun sendReaction(name: String, userId: Long, postId: Long) - suspend fun removeReaction(userId: Long, postId: Long) + suspend fun receiveReaction(name: String, domain: String, actorId: Long, postId: Long) + suspend fun sendReaction(name: String, actorId: Long, postId: Long) + suspend fun removeReaction(actorId: Long, postId: Long) } diff --git a/src/main/kotlin/dev/usbharu/hideout/core/service/reaction/ReactionServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/core/service/reaction/ReactionServiceImpl.kt index 1ab87448..1e9be539 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/service/reaction/ReactionServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/service/reaction/ReactionServiceImpl.kt @@ -16,34 +16,34 @@ class ReactionServiceImpl( private val apReactionService: APReactionService, private val reactionQueryService: ReactionQueryService ) : ReactionService { - override suspend fun receiveReaction(name: String, domain: String, userId: Long, postId: Long) { - if (reactionQueryService.reactionAlreadyExist(postId, userId, 0).not()) { + override suspend fun receiveReaction(name: String, domain: String, actorId: Long, postId: Long) { + if (reactionQueryService.reactionAlreadyExist(postId, actorId, 0).not()) { try { reactionRepository.save( - Reaction(reactionRepository.generateId(), 0, postId, userId) + Reaction(reactionRepository.generateId(), 0, postId, actorId) ) } catch (_: ExposedSQLException) { } } } - override suspend fun sendReaction(name: String, userId: Long, postId: Long) { + override suspend fun sendReaction(name: String, actorId: Long, postId: Long) { try { val findByPostIdAndUserIdAndEmojiId = - reactionQueryService.findByPostIdAndUserIdAndEmojiId(postId, userId, 0) + reactionQueryService.findByPostIdAndActorIdAndEmojiId(postId, actorId, 0) apReactionService.removeReaction(findByPostIdAndUserIdAndEmojiId) reactionRepository.delete(findByPostIdAndUserIdAndEmojiId) } catch (_: FailedToGetResourcesException) { } - val reaction = Reaction(reactionRepository.generateId(), 0, postId, userId) + val reaction = Reaction(reactionRepository.generateId(), 0, postId, actorId) reactionRepository.save(reaction) apReactionService.reaction(reaction) } - override suspend fun removeReaction(userId: Long, postId: Long) { + override suspend fun removeReaction(actorId: Long, postId: Long) { try { val findByPostIdAndUserIdAndEmojiId = - reactionQueryService.findByPostIdAndUserIdAndEmojiId(postId, userId, 0) + reactionQueryService.findByPostIdAndActorIdAndEmojiId(postId, actorId, 0) reactionRepository.delete(findByPostIdAndUserIdAndEmojiId) apReactionService.removeReaction(findByPostIdAndUserIdAndEmojiId) } catch (_: FailedToGetResourcesException) { diff --git a/src/main/kotlin/dev/usbharu/hideout/core/service/relationship/RelationshipService.kt b/src/main/kotlin/dev/usbharu/hideout/core/service/relationship/RelationshipService.kt index 9032bd2e..9226de60 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/service/relationship/RelationshipService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/service/relationship/RelationshipService.kt @@ -1,22 +1,22 @@ package dev.usbharu.hideout.core.service.relationship interface RelationshipService { - suspend fun followRequest(userId: Long, targetId: Long) - suspend fun block(userId: Long, targetId: Long) + suspend fun followRequest(actorId: Long, targetId: Long) + suspend fun block(actorId: Long, targetId: Long) /** * フォローリクエストを承認します - * [userId]が[targetId]からのフォローリクエストを承認します + * [actorId]が[targetId]からのフォローリクエストを承認します * - * @param userId 承認操作をするユーザー + * @param actorId 承認操作をするユーザー * @param targetId 承認するフォローリクエストを送ってきたユーザー * @param force 強制的にAcceptアクティビティを発行する */ - suspend fun acceptFollowRequest(userId: Long, targetId: Long, force: Boolean = false) - suspend fun rejectFollowRequest(userId: Long, targetId: Long) - suspend fun ignoreFollowRequest(userId: Long, targetId: Long) - suspend fun unfollow(userId: Long, targetId: Long) - suspend fun unblock(userId: Long, targetId: Long) - suspend fun mute(userId: Long, targetId: Long) - suspend fun unmute(userId: Long, targetId: Long) + suspend fun acceptFollowRequest(actorId: Long, targetId: Long, force: Boolean = false) + suspend fun rejectFollowRequest(actorId: Long, targetId: Long) + suspend fun ignoreFollowRequest(actorId: Long, targetId: Long) + suspend fun unfollow(actorId: Long, targetId: Long) + suspend fun unblock(actorId: Long, targetId: Long) + suspend fun mute(actorId: Long, targetId: Long) + suspend fun unmute(actorId: Long, targetId: Long) } diff --git a/src/main/kotlin/dev/usbharu/hideout/core/service/relationship/RelationshipServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/core/service/relationship/RelationshipServiceImpl.kt index a94332f9..9bddbb1a 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/service/relationship/RelationshipServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/service/relationship/RelationshipServiceImpl.kt @@ -7,10 +7,10 @@ import dev.usbharu.hideout.activitypub.service.activity.reject.ApSendRejectServi import dev.usbharu.hideout.activitypub.service.activity.undo.APSendUndoService import dev.usbharu.hideout.application.config.ApplicationConfig import dev.usbharu.hideout.core.domain.exception.FailedToGetResourcesException +import dev.usbharu.hideout.core.domain.model.actor.Actor import dev.usbharu.hideout.core.domain.model.relationship.Relationship import dev.usbharu.hideout.core.domain.model.relationship.RelationshipRepository -import dev.usbharu.hideout.core.domain.model.user.User -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.service.follow.SendFollowDto import org.slf4j.LoggerFactory import org.springframework.stereotype.Service @@ -18,7 +18,7 @@ import org.springframework.stereotype.Service @Service class RelationshipServiceImpl( private val applicationConfig: ApplicationConfig, - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, private val relationshipRepository: RelationshipRepository, private val apSendFollowService: APSendFollowService, private val apSendBlockService: APSendBlockService, @@ -26,14 +26,14 @@ class RelationshipServiceImpl( private val apSendRejectService: ApSendRejectService, private val apSendUndoService: APSendUndoService ) : RelationshipService { - override suspend fun followRequest(userId: Long, targetId: Long) { - logger.info("START Follow Request userId: {} targetId: {}", userId, targetId) + override suspend fun followRequest(actorId: Long, targetId: Long) { + logger.info("START Follow Request userId: {} targetId: {}", actorId, targetId) val relationship = - relationshipRepository.findByUserIdAndTargetUserId(userId, targetId)?.copy(followRequest = true) + relationshipRepository.findByUserIdAndTargetUserId(actorId, targetId)?.copy(followRequest = true) ?: Relationship( - userId = userId, - targetUserId = targetId, + actorId = actorId, + targetActorId = targetId, following = false, blocking = false, muting = false, @@ -41,9 +41,9 @@ class RelationshipServiceImpl( ignoreFollowRequestFromTarget = false ) - val inverseRelationship = relationshipRepository.findByUserIdAndTargetUserId(targetId, userId) ?: Relationship( - userId = targetId, - targetUserId = userId, + val inverseRelationship = relationshipRepository.findByUserIdAndTargetUserId(targetId, actorId) ?: Relationship( + actorId = targetId, + targetActorId = actorId, following = false, blocking = false, muting = false, @@ -52,22 +52,22 @@ class RelationshipServiceImpl( ) if (inverseRelationship.blocking) { - logger.debug("FAILED Blocked by target. userId: {} targetId: {}", userId, targetId) + logger.debug("FAILED Blocked by target. userId: {} targetId: {}", actorId, targetId) return } if (relationship.blocking) { - logger.debug("FAILED Blocking user. userId: {} targetId: {}", userId, targetId) + logger.debug("FAILED Blocking user. userId: {} targetId: {}", actorId, targetId) return } if (inverseRelationship.ignoreFollowRequestFromTarget) { - logger.debug("SUCCESS Ignore Follow Request. userId: {} targetId: {}", userId, targetId) + logger.debug("SUCCESS Ignore Follow Request. userId: {} targetId: {}", actorId, targetId) return } if (relationship.following) { - logger.debug("SUCCESS User already follow. userId: {} targetId: {}", userId, targetId) - acceptFollowRequest(targetId, userId, true) + logger.debug("SUCCESS User already follow. userId: {} targetId: {}", actorId, targetId) + acceptFollowRequest(targetId, actorId, true) return } @@ -76,21 +76,21 @@ class RelationshipServiceImpl( val remoteUser = isRemoteUser(targetId) if (remoteUser != null) { - val user = userQueryService.findById(userId) + val user = actorQueryService.findById(actorId) apSendFollowService.sendFollow(SendFollowDto(user, remoteUser)) } else { // TODO: フォロー許可制ユーザーを実装したら消す - acceptFollowRequest(targetId, userId) + acceptFollowRequest(targetId, actorId) } - logger.info("SUCCESS Follow Request userId: {} targetId: {}", userId, targetId) + logger.info("SUCCESS Follow Request userId: {} targetId: {}", actorId, targetId) } - override suspend fun block(userId: Long, targetId: Long) { - val relationship = relationshipRepository.findByUserIdAndTargetUserId(userId, targetId) + override suspend fun block(actorId: Long, targetId: Long) { + val relationship = relationshipRepository.findByUserIdAndTargetUserId(actorId, targetId) ?.copy(blocking = true, followRequest = false, following = false) ?: Relationship( - userId = userId, - targetUserId = targetId, + actorId = actorId, + targetActorId = targetId, following = false, blocking = true, muting = false, @@ -98,7 +98,7 @@ class RelationshipServiceImpl( ignoreFollowRequestFromTarget = false ) - val inverseRelationship = relationshipRepository.findByUserIdAndTargetUserId(targetId, userId) + val inverseRelationship = relationshipRepository.findByUserIdAndTargetUserId(targetId, actorId) ?.copy(followRequest = false, following = false) relationshipRepository.save(relationship) @@ -109,19 +109,19 @@ class RelationshipServiceImpl( val remoteUser = isRemoteUser(targetId) if (remoteUser != null) { - val user = userQueryService.findById(userId) + val user = actorQueryService.findById(actorId) apSendBlockService.sendBlock(user, remoteUser) } } - override suspend fun acceptFollowRequest(userId: Long, targetId: Long, force: Boolean) { - logger.info("START Accept follow request userId: {} targetId: {}", userId, targetId) + override suspend fun acceptFollowRequest(actorId: Long, targetId: Long, force: Boolean) { + logger.info("START Accept follow request userId: {} targetId: {}", actorId, targetId) - val relationship = relationshipRepository.findByUserIdAndTargetUserId(targetId, userId) + val relationship = relationshipRepository.findByUserIdAndTargetUserId(targetId, actorId) - val inverseRelationship = relationshipRepository.findByUserIdAndTargetUserId(userId, targetId) ?: Relationship( - userId = targetId, - targetUserId = userId, + val inverseRelationship = relationshipRepository.findByUserIdAndTargetUserId(actorId, targetId) ?: Relationship( + actorId = targetId, + targetActorId = actorId, following = false, blocking = false, muting = false, @@ -130,26 +130,26 @@ class RelationshipServiceImpl( ) if (relationship == null) { - logger.warn("FAILED Follow Request Not Found. (Relationship) userId: {} targetId: {}", userId, targetId) + logger.warn("FAILED Follow Request Not Found. (Relationship) userId: {} targetId: {}", actorId, targetId) return } if (relationship.followRequest.not() && force.not()) { - logger.warn("FAILED Follow Request Not Found. (Follow Request) userId: {} targetId: {}", userId, targetId) + logger.warn("FAILED Follow Request Not Found. (Follow Request) userId: {} targetId: {}", actorId, targetId) return } if (relationship.blocking) { - logger.warn("FAILED Blocking user userId: {} targetId: {}", userId, targetId) + logger.warn("FAILED Blocking user userId: {} targetId: {}", actorId, targetId) throw IllegalStateException( - "Cannot accept a follow request from a blocked user. userId: $userId targetId: $targetId" + "Cannot accept a follow request from a blocked user. userId: $actorId targetId: $targetId" ) } if (inverseRelationship.blocking) { - logger.warn("FAILED BLocked by user userId: {} targetId: {}", userId, targetId) + logger.warn("FAILED BLocked by user userId: {} targetId: {}", actorId, targetId) throw IllegalStateException( - "Cannot accept a follow request from a blocking user. userId: $userId targetId: $targetId" + "Cannot accept a follow request from a blocking user. userId: $actorId targetId: $targetId" ) } @@ -160,21 +160,21 @@ class RelationshipServiceImpl( val remoteUser = isRemoteUser(targetId) if (remoteUser != null) { - val user = userQueryService.findById(userId) + val user = actorQueryService.findById(actorId) apSendAcceptService.sendAcceptFollow(user, remoteUser) } } - override suspend fun rejectFollowRequest(userId: Long, targetId: Long) { - val relationship = relationshipRepository.findByUserIdAndTargetUserId(targetId, userId) + override suspend fun rejectFollowRequest(actorId: Long, targetId: Long) { + val relationship = relationshipRepository.findByUserIdAndTargetUserId(targetId, actorId) if (relationship == null) { - logger.warn("FAILED Follow Request Not Found. (Relationship) userId: {} targetId: {}", userId, targetId) + logger.warn("FAILED Follow Request Not Found. (Relationship) userId: {} targetId: {}", actorId, targetId) return } if (relationship.followRequest.not() && relationship.following.not()) { - logger.warn("FAILED Follow Request Not Found. (Follow Request) userId: {} targetId: {}", userId, targetId) + logger.warn("FAILED Follow Request Not Found. (Follow Request) userId: {} targetId: {}", actorId, targetId) return } @@ -185,17 +185,17 @@ class RelationshipServiceImpl( val remoteUser = isRemoteUser(targetId) if (remoteUser != null) { - val user = userQueryService.findById(userId) + val user = actorQueryService.findById(actorId) apSendRejectService.sendRejectFollow(user, remoteUser) } } - override suspend fun ignoreFollowRequest(userId: Long, targetId: Long) { - val relationship = relationshipRepository.findByUserIdAndTargetUserId(userId, targetId) + override suspend fun ignoreFollowRequest(actorId: Long, targetId: Long) { + val relationship = relationshipRepository.findByUserIdAndTargetUserId(actorId, targetId) ?.copy(ignoreFollowRequestFromTarget = true) ?: Relationship( - userId = userId, - targetUserId = targetId, + actorId = actorId, + targetActorId = targetId, following = false, blocking = false, muting = false, @@ -206,16 +206,16 @@ class RelationshipServiceImpl( relationshipRepository.save(relationship) } - override suspend fun unfollow(userId: Long, targetId: Long) { - val relationship = relationshipRepository.findByUserIdAndTargetUserId(userId, targetId) + override suspend fun unfollow(actorId: Long, targetId: Long) { + val relationship = relationshipRepository.findByUserIdAndTargetUserId(actorId, targetId) if (relationship == null) { - logger.warn("FAILED Unfollow. (Relationship) userId: {} targetId: {}", userId, targetId) + logger.warn("FAILED Unfollow. (Relationship) userId: {} targetId: {}", actorId, targetId) return } if (relationship.following.not()) { - logger.warn("SUCCESS User already unfollow. userId: {} targetId: {}", userId, targetId) + logger.warn("SUCCESS User already unfollow. userId: {} targetId: {}", actorId, targetId) return } @@ -226,21 +226,21 @@ class RelationshipServiceImpl( val remoteUser = isRemoteUser(targetId) if (remoteUser != null) { - val user = userQueryService.findById(userId) + val user = actorQueryService.findById(actorId) apSendUndoService.sendUndoFollow(user, remoteUser) } } - override suspend fun unblock(userId: Long, targetId: Long) { - val relationship = relationshipRepository.findByUserIdAndTargetUserId(userId, targetId) + override suspend fun unblock(actorId: Long, targetId: Long) { + val relationship = relationshipRepository.findByUserIdAndTargetUserId(actorId, targetId) if (relationship == null) { - logger.warn("FAILED Unblock. (Relationship) userId: {} targetId: {}", userId, targetId) + logger.warn("FAILED Unblock. (Relationship) userId: {} targetId: {}", actorId, targetId) return } if (relationship.blocking.not()) { - logger.warn("SUCCESS User is not blocking. userId: {] targetId: {}", userId, targetId) + logger.warn("SUCCESS User is not blocking. userId: {] targetId: {}", actorId, targetId) return } @@ -249,16 +249,16 @@ class RelationshipServiceImpl( val remoteUser = isRemoteUser(targetId) if (remoteUser != null) { - val user = userQueryService.findById(userId) + val user = actorQueryService.findById(actorId) apSendUndoService.sendUndoBlock(user, remoteUser) } } - override suspend fun mute(userId: Long, targetId: Long) { - val relationship = relationshipRepository.findByUserIdAndTargetUserId(userId, targetId)?.copy(muting = true) + override suspend fun mute(actorId: Long, targetId: Long) { + val relationship = relationshipRepository.findByUserIdAndTargetUserId(actorId, targetId)?.copy(muting = true) ?: Relationship( - userId = userId, - targetUserId = targetId, + actorId = actorId, + targetActorId = targetId, following = false, blocking = false, muting = true, @@ -269,21 +269,21 @@ class RelationshipServiceImpl( relationshipRepository.save(relationship) } - override suspend fun unmute(userId: Long, targetId: Long) { - val relationship = relationshipRepository.findByUserIdAndTargetUserId(userId, targetId)?.copy(muting = false) + override suspend fun unmute(actorId: Long, targetId: Long) { + val relationship = relationshipRepository.findByUserIdAndTargetUserId(actorId, targetId)?.copy(muting = false) if (relationship == null) { - logger.warn("FAILED Mute. (Relationship) userId: {} targetId: {}", userId, targetId) + logger.warn("FAILED Mute. (Relationship) userId: {} targetId: {}", actorId, targetId) return } relationshipRepository.save(relationship) } - private suspend fun isRemoteUser(userId: Long): User? { + private suspend fun isRemoteUser(userId: Long): Actor? { logger.trace("isRemoteUser({})", userId) val user = try { - userQueryService.findById(userId) + actorQueryService.findById(userId) } catch (e: FailedToGetResourcesException) { logger.warn("User not found.", e) throw IllegalStateException("User not found.", e) diff --git a/src/main/kotlin/dev/usbharu/hideout/core/service/timeline/TimelineService.kt b/src/main/kotlin/dev/usbharu/hideout/core/service/timeline/TimelineService.kt index 73958fb4..e53e327d 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/service/timeline/TimelineService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/service/timeline/TimelineService.kt @@ -4,22 +4,22 @@ import dev.usbharu.hideout.core.domain.model.post.Post import dev.usbharu.hideout.core.domain.model.post.Visibility import dev.usbharu.hideout.core.domain.model.timeline.Timeline import dev.usbharu.hideout.core.domain.model.timeline.TimelineRepository +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.query.FollowerQueryService -import dev.usbharu.hideout.core.query.UserQueryService import org.slf4j.LoggerFactory import org.springframework.stereotype.Service @Service class TimelineService( private val followerQueryService: FollowerQueryService, - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, private val timelineRepository: TimelineRepository ) { suspend fun publishTimeline(post: Post, isLocal: Boolean) { - val findFollowersById = followerQueryService.findFollowersById(post.userId).toMutableList() + val findFollowersById = followerQueryService.findFollowersById(post.actorId).toMutableList() if (isLocal) { // 自分自身も含める必要がある - val user = userQueryService.findById(post.userId) + val user = actorQueryService.findById(post.actorId) findFollowersById.add(user) } val timelines = findFollowersById.map { @@ -28,7 +28,7 @@ class TimelineService( userId = it.id, timelineId = 0, postId = post.id, - postUserId = post.userId, + postActorId = post.actorId, createdAt = post.createdAt, replyId = post.replyId, repostId = post.repostId, @@ -46,7 +46,7 @@ class TimelineService( userId = 0, timelineId = 0, postId = post.id, - postUserId = post.userId, + postActorId = post.actorId, createdAt = post.createdAt, replyId = post.replyId, repostId = post.repostId, diff --git a/src/main/kotlin/dev/usbharu/hideout/core/service/user/UserAuthServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/core/service/user/UserAuthServiceImpl.kt index 1bb4599a..5ec5d4be 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/service/user/UserAuthServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/service/user/UserAuthServiceImpl.kt @@ -1,6 +1,6 @@ package dev.usbharu.hideout.core.service.user -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.query.ActorQueryService import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder import org.springframework.stereotype.Service import java.security.* @@ -8,13 +8,13 @@ import java.util.* @Service class UserAuthServiceImpl( - val userQueryService: UserQueryService + val actorQueryService: ActorQueryService ) : UserAuthService { override fun hash(password: String): String = BCryptPasswordEncoder().encode(password) override suspend fun usernameAlreadyUse(username: String): Boolean { - userQueryService.findByName(username) + actorQueryService.findByName(username) return true } diff --git a/src/main/kotlin/dev/usbharu/hideout/core/service/user/UserService.kt b/src/main/kotlin/dev/usbharu/hideout/core/service/user/UserService.kt index a9c0de2d..6ef40b6e 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/service/user/UserService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/service/user/UserService.kt @@ -1,6 +1,6 @@ package dev.usbharu.hideout.core.service.user -import dev.usbharu.hideout.core.domain.model.user.User +import dev.usbharu.hideout.core.domain.model.actor.Actor import org.springframework.stereotype.Service @Service @@ -8,7 +8,7 @@ interface UserService { suspend fun usernameAlreadyUse(username: String): Boolean - suspend fun createLocalUser(user: UserCreateDto): User + suspend fun createLocalUser(user: UserCreateDto): Actor - suspend fun createRemoteUser(user: RemoteUserCreateDto): User + suspend fun createRemoteUser(user: RemoteUserCreateDto): Actor } diff --git a/src/main/kotlin/dev/usbharu/hideout/core/service/user/UserServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/core/service/user/UserServiceImpl.kt index b7bb12cf..aa7b0f48 100644 --- a/src/main/kotlin/dev/usbharu/hideout/core/service/user/UserServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/core/service/user/UserServiceImpl.kt @@ -1,9 +1,9 @@ package dev.usbharu.hideout.core.service.user import dev.usbharu.hideout.application.config.ApplicationConfig -import dev.usbharu.hideout.core.domain.model.user.User -import dev.usbharu.hideout.core.domain.model.user.UserRepository -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.domain.model.actor.Actor +import dev.usbharu.hideout.core.domain.model.actor.ActorRepository +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.service.instance.InstanceService import org.jetbrains.exposed.exceptions.ExposedSQLException import org.slf4j.LoggerFactory @@ -13,26 +13,26 @@ import java.time.Instant @Service class UserServiceImpl( - private val userRepository: UserRepository, + private val actorRepository: ActorRepository, private val userAuthService: UserAuthService, - private val userQueryService: UserQueryService, - private val userBuilder: User.UserBuilder, + private val actorQueryService: ActorQueryService, + private val actorBuilder: Actor.UserBuilder, private val applicationConfig: ApplicationConfig, private val instanceService: InstanceService ) : UserService { override suspend fun usernameAlreadyUse(username: String): Boolean { - val findByNameAndDomain = userQueryService.findByNameAndDomain(username, applicationConfig.url.host) + val findByNameAndDomain = actorQueryService.findByNameAndDomain(username, applicationConfig.url.host) return findByNameAndDomain != null } - override suspend fun createLocalUser(user: UserCreateDto): User { - val nextId = userRepository.nextId() + override suspend fun createLocalUser(user: UserCreateDto): Actor { + val nextId = actorRepository.nextId() val hashedPassword = userAuthService.hash(user.password) val keyPair = userAuthService.generateKeyPair() val userUrl = "${applicationConfig.url}/users/${user.name}" - val userEntity = userBuilder.of( + val userEntity = actorBuilder.of( id = nextId, name = user.name, domain = applicationConfig.url.host, @@ -49,11 +49,11 @@ class UserServiceImpl( followers = "$userUrl/followers", keyId = "$userUrl#pubkey" ) - return userRepository.save(userEntity) + return actorRepository.save(userEntity) } @Transactional - override suspend fun createRemoteUser(user: RemoteUserCreateDto): User { + override suspend fun createRemoteUser(user: RemoteUserCreateDto): Actor { logger.info("START Create New remote user. name: {} url: {}", user.name, user.url) @Suppress("TooGenericExceptionCaught") val instance = try { @@ -63,8 +63,8 @@ class UserServiceImpl( null } - val nextId = userRepository.nextId() - val userEntity = userBuilder.of( + val nextId = actorRepository.nextId() + val userEntity = actorBuilder.of( id = nextId, name = user.name, domain = user.domain, @@ -81,12 +81,12 @@ class UserServiceImpl( instance = instance?.id ) return try { - val save = userRepository.save(userEntity) + val save = actorRepository.save(userEntity) logger.warn("SUCCESS Create New remote user. id: {} name: {} url: {}", userEntity.id, user.name, user.url) save } catch (_: ExposedSQLException) { logger.warn("FAILED User already exists. name: {} url: {}", user.name, user.url) - userQueryService.findByUrl(user.url) + actorQueryService.findByUrl(user.url) } } diff --git a/src/main/kotlin/dev/usbharu/hideout/mastodon/infrastructure/exposedquery/StatusQueryServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/mastodon/infrastructure/exposedquery/StatusQueryServiceImpl.kt index 9c5b46fe..9f636b34 100644 --- a/src/main/kotlin/dev/usbharu/hideout/mastodon/infrastructure/exposedquery/StatusQueryServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/mastodon/infrastructure/exposedquery/StatusQueryServiceImpl.kt @@ -24,7 +24,7 @@ class StatusQueryServiceImpl : StatusQueryService { val mediaIdSet = mutableSetOf<Long>() mediaIdSet.addAll(statusQueries.flatMap { it.mediaIds }) val postMap = Posts - .leftJoin(Users) + .leftJoin(Actors) .select { Posts.id inList postIdSet } .associate { it[Posts.id] to toStatus(it) } val mediaMap = Media.select { Media.id inList mediaIdSet } @@ -57,9 +57,9 @@ class StatusQueryServiceImpl : StatusQueryService { ): List<Status> { val query = Posts .leftJoin(PostsMedia) - .leftJoin(Users) + .leftJoin(Actors) .leftJoin(Media) - .select { Posts.userId eq accountId }.limit(20) + .select { Posts.actorId eq accountId }.limit(20) if (maxId != null) { query.andWhere { Posts.id eq maxId } @@ -120,7 +120,7 @@ class StatusQueryServiceImpl : StatusQueryService { private suspend fun findByPostIdsWithMedia(ids: List<Long>): List<Status> { val pairs = Posts .leftJoin(PostsMedia) - .leftJoin(Users) + .leftJoin(Actors) .leftJoin(Media) .select { Posts.id inList ids } .groupBy { it[Posts.id] } @@ -141,24 +141,24 @@ private fun toStatus(it: ResultRow) = Status( uri = it[Posts.apId], createdAt = Instant.ofEpochMilli(it[Posts.createdAt]).toString(), account = Account( - id = it[Users.id].toString(), - username = it[Users.name], - acct = "${it[Users.name]}@${it[Users.domain]}", - url = it[Users.url], - displayName = it[Users.screenName], - note = it[Users.description], - avatar = it[Users.url] + "/icon.jpg", - avatarStatic = it[Users.url] + "/icon.jpg", - header = it[Users.url] + "/header.jpg", - headerStatic = it[Users.url] + "/header.jpg", + id = it[Actors.id].toString(), + username = it[Actors.name], + acct = "${it[Actors.name]}@${it[Actors.domain]}", + url = it[Actors.url], + displayName = it[Actors.screenName], + note = it[Actors.description], + avatar = it[Actors.url] + "/icon.jpg", + avatarStatic = it[Actors.url] + "/icon.jpg", + header = it[Actors.url] + "/header.jpg", + headerStatic = it[Actors.url] + "/header.jpg", locked = false, fields = emptyList(), emojis = emptyList(), bot = false, group = false, discoverable = true, - createdAt = Instant.ofEpochMilli(it[Users.createdAt]).toString(), - lastStatusAt = Instant.ofEpochMilli(it[Users.createdAt]).toString(), + createdAt = Instant.ofEpochMilli(it[Actors.createdAt]).toString(), + lastStatusAt = Instant.ofEpochMilli(it[Actors.createdAt]).toString(), statusesCount = 0, followersCount = 0, followingCount = 0, diff --git a/src/main/kotlin/dev/usbharu/hideout/mastodon/service/account/AccountApiService.kt b/src/main/kotlin/dev/usbharu/hideout/mastodon/service/account/AccountApiService.kt index f639afc8..7a19b065 100644 --- a/src/main/kotlin/dev/usbharu/hideout/mastodon/service/account/AccountApiService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/mastodon/service/account/AccountApiService.kt @@ -194,8 +194,8 @@ class AccountApiServiceImpl( private suspend fun fetchRelationship(userid: Long, targetId: Long): Relationship { val relationship = relationshipRepository.findByUserIdAndTargetUserId(userid, targetId) ?: dev.usbharu.hideout.core.domain.model.relationship.Relationship( - userId = userid, - targetUserId = targetId, + actorId = userid, + targetActorId = targetId, following = false, blocking = false, muting = false, @@ -205,8 +205,8 @@ class AccountApiServiceImpl( val inverseRelationship = relationshipRepository.findByUserIdAndTargetUserId(targetId, userid) ?: dev.usbharu.hideout.core.domain.model.relationship.Relationship( - userId = targetId, - targetUserId = userid, + actorId = targetId, + targetActorId = userid, following = false, blocking = false, muting = false, diff --git a/src/main/kotlin/dev/usbharu/hideout/mastodon/service/account/AccountService.kt b/src/main/kotlin/dev/usbharu/hideout/mastodon/service/account/AccountService.kt index 72050167..0cdc4c2a 100644 --- a/src/main/kotlin/dev/usbharu/hideout/mastodon/service/account/AccountService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/mastodon/service/account/AccountService.kt @@ -1,7 +1,7 @@ package dev.usbharu.hideout.mastodon.service.account import dev.usbharu.hideout.application.config.ApplicationConfig -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.domain.mastodon.model.generated.Account import org.springframework.stereotype.Service @@ -12,11 +12,11 @@ interface AccountService { @Service class AccountServiceImpl( - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, private val applicationConfig: ApplicationConfig ) : AccountService { override suspend fun findById(id: Long): Account { - val findById = userQueryService.findById(id) + val findById = actorQueryService.findById(id) val userUrl = applicationConfig.url.toString() + "/users/" + findById.id.toString() return Account( diff --git a/src/main/kotlin/dev/usbharu/hideout/mastodon/service/status/StatusesApiService.kt b/src/main/kotlin/dev/usbharu/hideout/mastodon/service/status/StatusesApiService.kt index 198681ce..eac73698 100644 --- a/src/main/kotlin/dev/usbharu/hideout/mastodon/service/status/StatusesApiService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/mastodon/service/status/StatusesApiService.kt @@ -4,8 +4,8 @@ import dev.usbharu.hideout.application.external.Transaction import dev.usbharu.hideout.core.domain.exception.FailedToGetResourcesException import dev.usbharu.hideout.core.domain.model.media.MediaRepository import dev.usbharu.hideout.core.domain.model.media.toMediaAttachments +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.query.PostQueryService -import dev.usbharu.hideout.core.query.UserQueryService import dev.usbharu.hideout.core.service.post.PostCreateDto import dev.usbharu.hideout.core.service.post.PostService import dev.usbharu.hideout.domain.mastodon.model.generated.Status @@ -30,7 +30,7 @@ class StatsesApiServiceImpl( private val postService: PostService, private val accountService: AccountService, private val postQueryService: PostQueryService, - private val userQueryService: UserQueryService, + private val actorQueryService: ActorQueryService, private val mediaRepository: MediaRepository, private val transaction: Transaction ) : @@ -55,7 +55,7 @@ class StatsesApiServiceImpl( val replyUser = if (post.replyId != null) { try { - userQueryService.findById(postQueryService.findById(post.replyId).userId).id + actorQueryService.findById(postQueryService.findById(post.replyId).actorId).id } catch (ignore: FailedToGetResourcesException) { null } diff --git a/src/main/kotlin/dev/usbharu/hideout/util/AcctUtil.kt b/src/main/kotlin/dev/usbharu/hideout/util/AcctUtil.kt index a0f1a09b..a9043fa1 100644 --- a/src/main/kotlin/dev/usbharu/hideout/util/AcctUtil.kt +++ b/src/main/kotlin/dev/usbharu/hideout/util/AcctUtil.kt @@ -1,6 +1,6 @@ package dev.usbharu.hideout.util -import dev.usbharu.hideout.core.domain.model.user.Acct +import dev.usbharu.hideout.core.domain.model.actor.Acct object AcctUtil { fun parse(string: String): Acct { diff --git a/src/test/kotlin/dev/usbharu/hideout/activitypub/interfaces/api/actor/UserAPControllerImplTest.kt b/src/test/kotlin/dev/usbharu/hideout/activitypub/interfaces/api/actor/ActorAPControllerImplTest.kt similarity index 99% rename from src/test/kotlin/dev/usbharu/hideout/activitypub/interfaces/api/actor/UserAPControllerImplTest.kt rename to src/test/kotlin/dev/usbharu/hideout/activitypub/interfaces/api/actor/ActorAPControllerImplTest.kt index 5d7bab4d..14283127 100644 --- a/src/test/kotlin/dev/usbharu/hideout/activitypub/interfaces/api/actor/UserAPControllerImplTest.kt +++ b/src/test/kotlin/dev/usbharu/hideout/activitypub/interfaces/api/actor/ActorAPControllerImplTest.kt @@ -23,7 +23,7 @@ import org.springframework.test.web.servlet.post import org.springframework.test.web.servlet.setup.MockMvcBuilders @ExtendWith(MockitoExtension::class) -class UserAPControllerImplTest { +class ActorAPControllerImplTest { private lateinit var mockMvc: MockMvc diff --git a/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/accept/APDeliverAcceptJobProcessorTest.kt b/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/accept/APDeliverAcceptJobProcessorTest.kt index 4eeded48..f26cd135 100644 --- a/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/accept/APDeliverAcceptJobProcessorTest.kt +++ b/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/accept/APDeliverAcceptJobProcessorTest.kt @@ -5,7 +5,7 @@ import dev.usbharu.hideout.activitypub.domain.model.Follow import dev.usbharu.hideout.activitypub.service.common.APRequestService import dev.usbharu.hideout.core.external.job.DeliverAcceptJob import dev.usbharu.hideout.core.external.job.DeliverAcceptJobParam -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.query.ActorQueryService import kotlinx.coroutines.test.runTest import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Test @@ -25,7 +25,7 @@ class APDeliverAcceptJobProcessorTest { private lateinit var apRequestService: APRequestService @Mock - private lateinit var userQueryService: UserQueryService + private lateinit var actorQueryService: ActorQueryService @Mock private lateinit var deliverAcceptJob: DeliverAcceptJob @@ -40,7 +40,7 @@ class APDeliverAcceptJobProcessorTest { fun `process apPostが発行される`() = runTest { val user = UserBuilder.localUserOf() - whenever(userQueryService.findById(eq(1))).doReturn(user) + whenever(actorQueryService.findById(eq(1))).doReturn(user) val accept = Accept( apObject = Follow( diff --git a/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/accept/ApAcceptProcessorTest.kt b/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/accept/ApAcceptProcessorTest.kt index b9015e1d..793a65b6 100644 --- a/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/accept/ApAcceptProcessorTest.kt +++ b/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/accept/ApAcceptProcessorTest.kt @@ -7,7 +7,7 @@ import dev.usbharu.hideout.activitypub.domain.model.Like import dev.usbharu.hideout.activitypub.service.common.ActivityPubProcessContext import dev.usbharu.hideout.activitypub.service.common.ActivityType import dev.usbharu.hideout.application.config.ActivityPubConfig -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.service.relationship.RelationshipService import dev.usbharu.httpsignature.common.HttpHeaders import dev.usbharu.httpsignature.common.HttpMethod @@ -34,7 +34,7 @@ import java.net.URL class ApAcceptProcessorTest { @Mock - private lateinit var userQueryService: UserQueryService + private lateinit var actorQueryService: ActorQueryService @Mock private lateinit var relationshipService: RelationshipService @@ -67,9 +67,9 @@ class ApAcceptProcessorTest { ) val user = UserBuilder.localUserOf() - whenever(userQueryService.findByUrl(eq("https://example.com"))).doReturn(user) + whenever(actorQueryService.findByUrl(eq("https://example.com"))).doReturn(user) val remoteUser = UserBuilder.remoteUserOf() - whenever(userQueryService.findByUrl(eq("https://remote.example.com"))).doReturn(remoteUser) + whenever(actorQueryService.findByUrl(eq("https://remote.example.com"))).doReturn(remoteUser) apAcceptProcessor.internalProcess(activity) diff --git a/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/block/APDeliverBlockJobProcessorTest.kt b/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/block/APDeliverBlockJobProcessorTest.kt index 55e52ff9..1451ad4b 100644 --- a/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/block/APDeliverBlockJobProcessorTest.kt +++ b/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/block/APDeliverBlockJobProcessorTest.kt @@ -4,7 +4,7 @@ import dev.usbharu.hideout.activitypub.domain.model.Block import dev.usbharu.hideout.activitypub.domain.model.Follow import dev.usbharu.hideout.activitypub.domain.model.Reject import dev.usbharu.hideout.activitypub.service.common.APRequestService -import dev.usbharu.hideout.core.domain.model.user.UserRepository +import dev.usbharu.hideout.core.domain.model.actor.ActorRepository import dev.usbharu.hideout.core.external.job.DeliverBlockJob import dev.usbharu.hideout.core.external.job.DeliverBlockJobParam import kotlinx.coroutines.test.runTest @@ -26,7 +26,7 @@ class APDeliverBlockJobProcessorTest { private lateinit var apRequestService: APRequestService @Mock - private lateinit var userRepository: UserRepository + private lateinit var actorRepository: ActorRepository @Spy private val transaction = TestTransaction @@ -40,7 +40,7 @@ class APDeliverBlockJobProcessorTest { @Test fun `process rejectとblockがapPostされる`() = runTest { val user = UserBuilder.localUserOf() - whenever(userRepository.findById(eq(user.id))).doReturn(user) + whenever(actorRepository.findById(eq(user.id))).doReturn(user) val block = Block( diff --git a/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/create/ApSendCreateServiceImplTest.kt b/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/create/ApSendCreateServiceImplTest.kt index 01975882..c2f4f87e 100644 --- a/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/create/ApSendCreateServiceImplTest.kt +++ b/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/create/ApSendCreateServiceImplTest.kt @@ -7,8 +7,8 @@ import dev.usbharu.hideout.activitypub.service.objects.note.APNoteServiceImpl import dev.usbharu.hideout.application.config.ActivityPubConfig import dev.usbharu.hideout.application.config.ApplicationConfig import dev.usbharu.hideout.core.external.job.DeliverPostJob +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.query.FollowerQueryService -import dev.usbharu.hideout.core.query.UserQueryService import dev.usbharu.hideout.core.service.job.JobQueueParentService import kotlinx.coroutines.test.runTest import org.junit.jupiter.api.Test @@ -36,7 +36,7 @@ class ApSendCreateServiceImplTest { private lateinit var jobQueueParentService: JobQueueParentService @Mock - private lateinit var userQueryService: UserQueryService + private lateinit var actorQueryService: ActorQueryService @Mock private lateinit var noteQueryService: NoteQueryService @@ -50,7 +50,7 @@ class ApSendCreateServiceImplTest { @Test fun `createNote 正常なPostでCreateのジョブを発行できる`() = runTest { val post = PostBuilder.of() - val user = UserBuilder.localUserOf(id = post.userId) + val user = UserBuilder.localUserOf(id = post.actorId) val note = Note( id = post.apId, attributedTo = user.url, @@ -67,8 +67,8 @@ class ApSendCreateServiceImplTest { UserBuilder.remoteUserOf() ) - whenever(followerQueryService.findFollowersById(eq(post.userId))).doReturn(followers) - whenever(userQueryService.findById(eq(post.userId))).doReturn(user) + whenever(followerQueryService.findFollowersById(eq(post.actorId))).doReturn(followers) + whenever(actorQueryService.findById(eq(post.actorId))).doReturn(user) whenever(noteQueryService.findById(eq(post.id))).doReturn(note to post) apSendCreateServiceImpl.createNote(post) diff --git a/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/follow/APSendFollowServiceImplTest.kt b/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/follow/APSendFollowServiceImplTest.kt index 0fe5f689..0c9f266c 100644 --- a/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/follow/APSendFollowServiceImplTest.kt +++ b/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/follow/APSendFollowServiceImplTest.kt @@ -24,13 +24,13 @@ class APSendFollowServiceImplTest { apSendFollowServiceImpl.sendFollow(sendFollowDto) val value = Follow( - apObject = sendFollowDto.followTargetUserId.url, - actor = sendFollowDto.userId.url + apObject = sendFollowDto.followTargetActorId.url, + actor = sendFollowDto.actorId.url ) verify(apRequestService, times(1)).apPost( - eq(sendFollowDto.followTargetUserId.inbox), + eq(sendFollowDto.followTargetActorId.inbox), eq(value), - eq(sendFollowDto.userId) + eq(sendFollowDto.actorId) ) } } diff --git a/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/like/APReactionServiceImplTest.kt b/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/like/APReactionServiceImplTest.kt index beffd8e0..0dd3ae9a 100644 --- a/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/like/APReactionServiceImplTest.kt +++ b/src/test/kotlin/dev/usbharu/hideout/activitypub/service/activity/like/APReactionServiceImplTest.kt @@ -35,7 +35,7 @@ class APReactionServiceImplTest { val jobQueueParentService = mock<JobQueueParentService>() val apReactionServiceImpl = APReactionServiceImpl( jobQueueParentService = jobQueueParentService, - userQueryService = mock(), + actorQueryService = mock(), followerQueryService = followerQueryService, postQueryService = postQueryService, objectMapper = objectMapper @@ -46,7 +46,7 @@ class APReactionServiceImplTest { id = TwitterSnowflakeIdGenerateService.generateId(), emojiId = 0, postId = post.id, - userId = user.id + actorId = user.id ) ) @@ -72,7 +72,7 @@ class APReactionServiceImplTest { val jobQueueParentService = mock<JobQueueParentService>() val apReactionServiceImpl = APReactionServiceImpl( jobQueueParentService = jobQueueParentService, - userQueryService = mock(), + actorQueryService = mock(), followerQueryService = followerQueryService, postQueryService = postQueryService, objectMapper = objectMapper @@ -83,7 +83,7 @@ class APReactionServiceImplTest { id = TwitterSnowflakeIdGenerateService.generateId(), emojiId = 0, postId = post.id, - userId = user.id + actorId = user.id ) ) diff --git a/src/test/kotlin/dev/usbharu/hideout/activitypub/service/common/APResourceResolveServiceImplTest.kt b/src/test/kotlin/dev/usbharu/hideout/activitypub/service/common/APResourceResolveServiceImplTest.kt index 5f167d6b..37623edd 100644 --- a/src/test/kotlin/dev/usbharu/hideout/activitypub/service/common/APResourceResolveServiceImplTest.kt +++ b/src/test/kotlin/dev/usbharu/hideout/activitypub/service/common/APResourceResolveServiceImplTest.kt @@ -1,6 +1,6 @@ package dev.usbharu.hideout.activitypub.service.common -import dev.usbharu.hideout.core.domain.model.user.UserRepository +import dev.usbharu.hideout.core.domain.model.actor.ActorRepository import dev.usbharu.hideout.core.service.resource.InMemoryCacheManager import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll @@ -20,10 +20,10 @@ class APResourceResolveServiceImplTest { fun `単純な一回のリクエスト`() = runTest { - val userRepository = mock<UserRepository>() + val actorRepository = mock<ActorRepository>() val user = UserBuilder.localUserOf() - whenever(userRepository.findById(any())) doReturn user + whenever(actorRepository.findById(any())) doReturn user val apRequestService = mock<APRequestService> { onBlocking { @@ -37,7 +37,7 @@ class APResourceResolveServiceImplTest { ) } val apResourceResolveService = - APResourceResolveServiceImpl(apRequestService, userRepository, InMemoryCacheManager()) + APResourceResolveServiceImpl(apRequestService, actorRepository, InMemoryCacheManager()) apResourceResolveService.resolve<APObject>("https", 0) @@ -48,10 +48,10 @@ class APResourceResolveServiceImplTest { fun 複数回の同じリクエストが重複して発行されない() = runTest { - val userRepository = mock<UserRepository>() + val actorRepository = mock<ActorRepository>() val user = UserBuilder.localUserOf() - whenever(userRepository.findById(any())) doReturn user + whenever(actorRepository.findById(any())) doReturn user val apRequestService = mock<APRequestService> { onBlocking { @@ -65,7 +65,7 @@ class APResourceResolveServiceImplTest { ) } val apResourceResolveService = - APResourceResolveServiceImpl(apRequestService, userRepository, InMemoryCacheManager()) + APResourceResolveServiceImpl(apRequestService, actorRepository, InMemoryCacheManager()) apResourceResolveService.resolve<APObject>("https", 0) apResourceResolveService.resolve<APObject>("https", 0) @@ -83,10 +83,10 @@ class APResourceResolveServiceImplTest { fun 複数回の同じリクエストが同時に発行されても重複して発行されない() = runTest { - val userRepository = mock<UserRepository>() + val actorRepository = mock<ActorRepository>() val user = UserBuilder.localUserOf() - whenever(userRepository.findById(any())) doReturn user + whenever(actorRepository.findById(any())) doReturn user val apRequestService = mock<APRequestService> { @@ -101,7 +101,7 @@ class APResourceResolveServiceImplTest { ) } val apResourceResolveService = - APResourceResolveServiceImpl(apRequestService, userRepository, InMemoryCacheManager()) + APResourceResolveServiceImpl(apRequestService, actorRepository, InMemoryCacheManager()) repeat(10) { awaitAll( @@ -129,10 +129,10 @@ class APResourceResolveServiceImplTest { @Test fun 関係のないリクエストは発行する() = runTest { - val userRepository = mock<UserRepository>() + val actorRepository = mock<ActorRepository>() val user = UserBuilder.localUserOf() - whenever(userRepository.findById(any())).doReturn( + whenever(actorRepository.findById(any())).doReturn( user ) @@ -149,7 +149,7 @@ class APResourceResolveServiceImplTest { } val apResourceResolveService = - APResourceResolveServiceImpl(apRequestService, userRepository, InMemoryCacheManager()) + APResourceResolveServiceImpl(apRequestService, actorRepository, InMemoryCacheManager()) apResourceResolveService.resolve<APObject>("abcd", 0) apResourceResolveService.resolve<APObject>("1234", 0) diff --git a/src/test/kotlin/dev/usbharu/hideout/activitypub/service/objects/note/APNoteServiceImplTest.kt b/src/test/kotlin/dev/usbharu/hideout/activitypub/service/objects/note/APNoteServiceImplTest.kt index b8713816..f7415589 100644 --- a/src/test/kotlin/dev/usbharu/hideout/activitypub/service/objects/note/APNoteServiceImplTest.kt +++ b/src/test/kotlin/dev/usbharu/hideout/activitypub/service/objects/note/APNoteServiceImplTest.kt @@ -16,8 +16,8 @@ import dev.usbharu.hideout.application.service.id.TwitterSnowflakeIdGenerateServ import dev.usbharu.hideout.core.domain.exception.FailedToGetResourcesException import dev.usbharu.hideout.core.domain.model.post.Post import dev.usbharu.hideout.core.domain.model.post.PostRepository +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.query.PostQueryService -import dev.usbharu.hideout.core.query.UserQueryService import dev.usbharu.hideout.core.service.post.PostService import io.ktor.client.* import io.ktor.client.call.* @@ -51,9 +51,9 @@ class APNoteServiceImplTest { val url = "https://example.com/note" val post = PostBuilder.of() - val user = UserBuilder.localUserOf(id = post.userId) - val userQueryService = mock<UserQueryService> { - onBlocking { findById(eq(post.userId)) } doReturn user + val user = UserBuilder.localUserOf(id = post.actorId) + val actorQueryService = mock<ActorQueryService> { + onBlocking { findById(eq(post.actorId)) } doReturn user } val expected = Note( id = post.apId, @@ -92,9 +92,9 @@ class APNoteServiceImplTest { val postQueryService = mock<PostQueryService> { onBlocking { findByApId(eq(post.apId)) } doReturn post } - val user = UserBuilder.localUserOf(id = post.userId) - val userQueryService = mock<UserQueryService> { - onBlocking { findById(eq(post.userId)) } doReturn user + val user = UserBuilder.localUserOf(id = post.actorId) + val actorQueryService = mock<ActorQueryService> { + onBlocking { findById(eq(post.actorId)) } doReturn user } val note = Note( id = post.apId, @@ -167,9 +167,9 @@ class APNoteServiceImplTest { val postQueryService = mock<PostQueryService> { onBlocking { findByApId(eq(post.apId)) } doReturn post } - val user = UserBuilder.localUserOf(id = post.userId) - val userQueryService = mock<UserQueryService> { - onBlocking { findById(eq(post.userId)) } doReturn user + val user = UserBuilder.localUserOf(id = post.actorId) + val actorQueryService = mock<ActorQueryService> { + onBlocking { findById(eq(post.actorId)) } doReturn user } val note = Note( id = post.apId, @@ -299,7 +299,7 @@ class APNoteServiceImplTest { val user = UserBuilder.localUserOf() val post = PostBuilder.of(userId = user.id) - val userQueryService = mock<UserQueryService> { + val actorQueryService = mock<ActorQueryService> { onBlocking { findById(eq(user.id)) } doReturn user } val note = Note( diff --git a/src/test/kotlin/dev/usbharu/hideout/core/service/post/PostServiceImplTest.kt b/src/test/kotlin/dev/usbharu/hideout/core/service/post/PostServiceImplTest.kt index e9d17e68..9ebbae81 100644 --- a/src/test/kotlin/dev/usbharu/hideout/core/service/post/PostServiceImplTest.kt +++ b/src/test/kotlin/dev/usbharu/hideout/core/service/post/PostServiceImplTest.kt @@ -2,9 +2,9 @@ package dev.usbharu.hideout.core.service.post import dev.usbharu.hideout.activitypub.service.activity.create.ApSendCreateService import dev.usbharu.hideout.application.config.CharacterLimit +import dev.usbharu.hideout.core.domain.model.actor.ActorRepository import dev.usbharu.hideout.core.domain.model.post.Post import dev.usbharu.hideout.core.domain.model.post.PostRepository -import dev.usbharu.hideout.core.domain.model.user.UserRepository import dev.usbharu.hideout.core.query.PostQueryService import dev.usbharu.hideout.core.service.timeline.TimelineService import kotlinx.coroutines.test.runTest @@ -31,7 +31,7 @@ class PostServiceImplTest { private lateinit var postRepository: PostRepository @Mock - private lateinit var userRepository: UserRepository + private lateinit var actorRepository: ActorRepository @Mock private lateinit var timelineService: TimelineService @@ -56,7 +56,7 @@ class PostServiceImplTest { whenever(postRepository.save(eq(post))).doReturn(true) whenever(postRepository.generateId()).doReturn(post.id) - whenever(userRepository.findById(eq(post.userId))).doReturn(UserBuilder.localUserOf(id = post.userId)) + whenever(actorRepository.findById(eq(post.actorId))).doReturn(UserBuilder.localUserOf(id = post.actorId)) whenever(timelineService.publishTimeline(eq(post), eq(true))).doReturn(Unit) mockStatic(Instant::class.java, Mockito.CALLS_REAL_METHODS).use { @@ -69,7 +69,7 @@ class PostServiceImplTest { post.visibility, post.repostId, post.replyId, - post.userId, + post.actorId, post.mediaIds ) ) diff --git a/src/test/kotlin/dev/usbharu/hideout/core/service/reaction/ReactionServiceImplTest.kt b/src/test/kotlin/dev/usbharu/hideout/core/service/reaction/ReactionServiceImplTest.kt index e3cf0ddd..89e4feae 100644 --- a/src/test/kotlin/dev/usbharu/hideout/core/service/reaction/ReactionServiceImplTest.kt +++ b/src/test/kotlin/dev/usbharu/hideout/core/service/reaction/ReactionServiceImplTest.kt @@ -37,20 +37,20 @@ class ReactionServiceImplTest { val post = PostBuilder.of() - whenever(reactionQueryService.reactionAlreadyExist(eq(post.id), eq(post.userId), eq(0))).doReturn(false) + whenever(reactionQueryService.reactionAlreadyExist(eq(post.id), eq(post.actorId), eq(0))).doReturn(false) val generateId = TwitterSnowflakeIdGenerateService.generateId() whenever(reactionRepository.generateId()).doReturn(generateId) - reactionServiceImpl.receiveReaction("❤", "example.com", post.userId, post.id) + reactionServiceImpl.receiveReaction("❤", "example.com", post.actorId, post.id) - verify(reactionRepository, times(1)).save(eq(Reaction(generateId, 0, post.id, post.userId))) + verify(reactionRepository, times(1)).save(eq(Reaction(generateId, 0, post.id, post.actorId))) } @Test fun `receiveReaction リアクションが既に作成されていることを検知出来ずに例外が発生した場合は何もしない`() = runTest { val post = PostBuilder.of() - whenever(reactionQueryService.reactionAlreadyExist(eq(post.id), eq(post.userId), eq(0))).doReturn(false) + whenever(reactionQueryService.reactionAlreadyExist(eq(post.id), eq(post.actorId), eq(0))).doReturn(false) val generateId = TwitterSnowflakeIdGenerateService.generateId() whenever( reactionRepository.save( @@ -59,7 +59,7 @@ class ReactionServiceImplTest { id = generateId, emojiId = 0, postId = post.id, - userId = post.userId + actorId = post.actorId ) ) ) @@ -71,17 +71,17 @@ class ReactionServiceImplTest { } whenever(reactionRepository.generateId()).doReturn(generateId) - reactionServiceImpl.receiveReaction("❤", "example.com", post.userId, post.id) + reactionServiceImpl.receiveReaction("❤", "example.com", post.actorId, post.id) - verify(reactionRepository, times(1)).save(eq(Reaction(generateId, 0, post.id, post.userId))) + verify(reactionRepository, times(1)).save(eq(Reaction(generateId, 0, post.id, post.actorId))) } @Test fun `receiveReaction リアクションが既に作成されている場合は何もしない`() = runTest() { val post = PostBuilder.of() - whenever(reactionQueryService.reactionAlreadyExist(eq(post.id), eq(post.userId), eq(0))).doReturn(true) + whenever(reactionQueryService.reactionAlreadyExist(eq(post.id), eq(post.actorId), eq(0))).doReturn(true) - reactionServiceImpl.receiveReaction("❤", "example.com", post.userId, post.id) + reactionServiceImpl.receiveReaction("❤", "example.com", post.actorId, post.id) verify(reactionRepository, never()).save(any()) } @@ -89,47 +89,47 @@ class ReactionServiceImplTest { @Test fun `sendReaction リアクションが存在しないとき保存して配送する`() = runTest { val post = PostBuilder.of() - whenever(reactionQueryService.findByPostIdAndUserIdAndEmojiId(eq(post.id), eq(post.userId), eq(0))).doThrow( + whenever(reactionQueryService.findByPostIdAndActorIdAndEmojiId(eq(post.id), eq(post.actorId), eq(0))).doThrow( FailedToGetResourcesException::class ) val generateId = TwitterSnowflakeIdGenerateService.generateId() whenever(reactionRepository.generateId()).doReturn(generateId) - reactionServiceImpl.sendReaction("❤", post.userId, post.id) + reactionServiceImpl.sendReaction("❤", post.actorId, post.id) - verify(reactionRepository, times(1)).save(eq(Reaction(generateId, 0, post.id, post.userId))) - verify(apReactionService, times(1)).reaction(eq(Reaction(generateId, 0, post.id, post.userId))) + verify(reactionRepository, times(1)).save(eq(Reaction(generateId, 0, post.id, post.actorId))) + verify(apReactionService, times(1)).reaction(eq(Reaction(generateId, 0, post.id, post.actorId))) } @Test fun `sendReaction リアクションが存在するときは削除して保存して配送する`() = runTest { val post = PostBuilder.of() val id = TwitterSnowflakeIdGenerateService.generateId() - whenever(reactionQueryService.findByPostIdAndUserIdAndEmojiId(eq(post.id), eq(post.userId), eq(0))).doReturn( - Reaction(id, 0, post.id, post.userId) + whenever(reactionQueryService.findByPostIdAndActorIdAndEmojiId(eq(post.id), eq(post.actorId), eq(0))).doReturn( + Reaction(id, 0, post.id, post.actorId) ) val generateId = TwitterSnowflakeIdGenerateService.generateId() whenever(reactionRepository.generateId()).doReturn(generateId) - reactionServiceImpl.sendReaction("❤", post.userId, post.id) + reactionServiceImpl.sendReaction("❤", post.actorId, post.id) - verify(reactionRepository, times(1)).delete(eq(Reaction(id, 0, post.id, post.userId))) - verify(reactionRepository, times(1)).save(eq(Reaction(generateId, 0, post.id, post.userId))) - verify(apReactionService, times(1)).removeReaction(eq(Reaction(id, 0, post.id, post.userId))) - verify(apReactionService, times(1)).reaction(eq(Reaction(generateId, 0, post.id, post.userId))) + verify(reactionRepository, times(1)).delete(eq(Reaction(id, 0, post.id, post.actorId))) + verify(reactionRepository, times(1)).save(eq(Reaction(generateId, 0, post.id, post.actorId))) + verify(apReactionService, times(1)).removeReaction(eq(Reaction(id, 0, post.id, post.actorId))) + verify(apReactionService, times(1)).reaction(eq(Reaction(generateId, 0, post.id, post.actorId))) } @Test fun `removeReaction リアクションが存在する場合削除して配送`() = runTest { val post = PostBuilder.of() - whenever(reactionQueryService.findByPostIdAndUserIdAndEmojiId(eq(post.id), eq(post.userId), eq(0))).doReturn( - Reaction(0, 0, post.id, post.userId) + whenever(reactionQueryService.findByPostIdAndActorIdAndEmojiId(eq(post.id), eq(post.actorId), eq(0))).doReturn( + Reaction(0, 0, post.id, post.actorId) ) - reactionServiceImpl.removeReaction(post.userId, post.id) + reactionServiceImpl.removeReaction(post.actorId, post.id) - verify(reactionRepository, times(1)).delete(eq(Reaction(0, 0, post.id, post.userId))) - verify(apReactionService, times(1)).removeReaction(eq(Reaction(0, 0, post.id, post.userId))) + verify(reactionRepository, times(1)).delete(eq(Reaction(0, 0, post.id, post.actorId))) + verify(apReactionService, times(1)).removeReaction(eq(Reaction(0, 0, post.id, post.actorId))) } } diff --git a/src/test/kotlin/dev/usbharu/hideout/core/service/relationship/RelationshipServiceImplTest.kt b/src/test/kotlin/dev/usbharu/hideout/core/service/relationship/RelationshipServiceImplTest.kt index be2fca26..8598aae1 100644 --- a/src/test/kotlin/dev/usbharu/hideout/core/service/relationship/RelationshipServiceImplTest.kt +++ b/src/test/kotlin/dev/usbharu/hideout/core/service/relationship/RelationshipServiceImplTest.kt @@ -8,7 +8,7 @@ import dev.usbharu.hideout.activitypub.service.activity.undo.APSendUndoService import dev.usbharu.hideout.application.config.ApplicationConfig import dev.usbharu.hideout.core.domain.model.relationship.Relationship import dev.usbharu.hideout.core.domain.model.relationship.RelationshipRepository -import dev.usbharu.hideout.core.query.UserQueryService +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.service.follow.SendFollowDto import kotlinx.coroutines.test.runTest import org.junit.jupiter.api.Test @@ -29,7 +29,7 @@ class RelationshipServiceImplTest { private val applicationConfig = ApplicationConfig(URL("https://example.com")) @Mock - private lateinit var userQueryService: UserQueryService + private lateinit var actorQueryService: ActorQueryService @Mock private lateinit var relationshipRepository: RelationshipRepository @@ -54,15 +54,15 @@ class RelationshipServiceImplTest { @Test fun `followRequest ローカルの場合followRequestフラグがtrueで永続化される`() = runTest { - whenever(userQueryService.findById(eq(5678))).doReturn(UserBuilder.localUserOf(domain = "example.com")) + whenever(actorQueryService.findById(eq(5678))).doReturn(UserBuilder.localUserOf(domain = "example.com")) relationshipServiceImpl.followRequest(1234, 5678) verify(relationshipRepository, times(1)).save( eq( Relationship( - userId = 1234, - targetUserId = 5678, + actorId = 1234, + targetActorId = 5678, following = false, blocking = false, muting = false, @@ -76,17 +76,17 @@ class RelationshipServiceImplTest { @Test fun `followRequest リモートの場合Followアクティビティが配送される`() = runTest { val localUser = UserBuilder.localUserOf(domain = "example.com") - whenever(userQueryService.findById(eq(1234))).doReturn(localUser) + whenever(actorQueryService.findById(eq(1234))).doReturn(localUser) val remoteUser = UserBuilder.remoteUserOf(domain = "remote.example.com") - whenever(userQueryService.findById(eq(5678))).doReturn(remoteUser) + whenever(actorQueryService.findById(eq(5678))).doReturn(remoteUser) relationshipServiceImpl.followRequest(1234, 5678) verify(relationshipRepository, times(1)).save( eq( Relationship( - userId = 1234, - targetUserId = 5678, + actorId = 1234, + targetActorId = 5678, following = false, blocking = false, muting = false, @@ -104,8 +104,8 @@ class RelationshipServiceImplTest { whenever(relationshipRepository.findByUserIdAndTargetUserId(eq(1234), eq(5678))).doReturn(null) whenever(relationshipRepository.findByUserIdAndTargetUserId(eq(5678), eq(1234))).doReturn( Relationship( - userId = 5678, - targetUserId = 1234, + actorId = 5678, + targetActorId = 1234, following = false, blocking = true, muting = false, @@ -123,8 +123,8 @@ class RelationshipServiceImplTest { fun `followRequest ブロックしている場合フォローリクエスト出来ない`() = runTest { whenever(relationshipRepository.findByUserIdAndTargetUserId(eq(1234), eq(5678))).doReturn( Relationship( - userId = 1234, - targetUserId = 5678, + actorId = 1234, + targetActorId = 5678, following = false, blocking = true, muting = false, @@ -141,13 +141,13 @@ class RelationshipServiceImplTest { @Test fun `followRequest 既にフォローしている場合は念の為フォロー承認を自動で行う`() = runTest { val remoteUser = UserBuilder.remoteUserOf(domain = "remote.example.com") - whenever(userQueryService.findById(eq(1234))).doReturn(remoteUser) + whenever(actorQueryService.findById(eq(1234))).doReturn(remoteUser) val localUser = UserBuilder.localUserOf(domain = "example.com") - whenever(userQueryService.findById(eq(5678))).doReturn(localUser) + whenever(actorQueryService.findById(eq(5678))).doReturn(localUser) whenever(relationshipRepository.findByUserIdAndTargetUserId(eq(1234), eq(5678))).doReturn( Relationship( - userId = 1234, - targetUserId = 5678, + actorId = 1234, + targetActorId = 5678, following = true, blocking = false, muting = false, @@ -161,8 +161,8 @@ class RelationshipServiceImplTest { verify(relationshipRepository, times(1)).save( eq( Relationship( - userId = 1234, - targetUserId = 5678, + actorId = 1234, + targetActorId = 5678, following = true, blocking = false, muting = false, @@ -180,8 +180,8 @@ class RelationshipServiceImplTest { fun `followRequest フォローリクエスト無視の場合は無視する`() = runTest { whenever(relationshipRepository.findByUserIdAndTargetUserId(eq(1234), eq(5678))).doReturn( Relationship( - userId = 1234, - targetUserId = 5678, + actorId = 1234, + targetActorId = 5678, following = false, blocking = false, muting = false, @@ -192,8 +192,8 @@ class RelationshipServiceImplTest { whenever(relationshipRepository.findByUserIdAndTargetUserId(eq(5678), eq(1234))).doReturn( Relationship( - userId = 5678, - targetUserId = 1234, + actorId = 5678, + targetActorId = 1234, following = false, blocking = false, muting = false, @@ -209,15 +209,15 @@ class RelationshipServiceImplTest { @Test fun `block ローカルユーザーの場合永続化される`() = runTest { - whenever(userQueryService.findById(eq(5678))).doReturn(UserBuilder.localUserOf(domain = "example.com")) + whenever(actorQueryService.findById(eq(5678))).doReturn(UserBuilder.localUserOf(domain = "example.com")) relationshipServiceImpl.block(1234, 5678) verify(relationshipRepository, times(1)).save( eq( Relationship( - userId = 1234, - targetUserId = 5678, + actorId = 1234, + targetActorId = 5678, following = false, blocking = true, muting = false, @@ -231,17 +231,17 @@ class RelationshipServiceImplTest { @Test fun `block リモートユーザーの場合永続化されて配送される`() = runTest { val localUser = UserBuilder.localUserOf(domain = "example.com") - whenever(userQueryService.findById(eq(1234))).doReturn(localUser) + whenever(actorQueryService.findById(eq(1234))).doReturn(localUser) val remoteUser = UserBuilder.remoteUserOf(domain = "remote.example.com") - whenever(userQueryService.findById(eq(5678))).doReturn(remoteUser) + whenever(actorQueryService.findById(eq(5678))).doReturn(remoteUser) relationshipServiceImpl.block(1234, 5678) verify(relationshipRepository, times(1)).save( eq( Relationship( - userId = 1234, - targetUserId = 5678, + actorId = 1234, + targetActorId = 5678, following = false, blocking = true, muting = false, @@ -256,12 +256,12 @@ class RelationshipServiceImplTest { @Test fun `acceptFollowRequest ローカルユーザーの場合永続化される`() = runTest { - whenever(userQueryService.findById(eq(5678))).doReturn(UserBuilder.localUserOf(domain = "example.com")) + whenever(actorQueryService.findById(eq(5678))).doReturn(UserBuilder.localUserOf(domain = "example.com")) whenever(relationshipRepository.findByUserIdAndTargetUserId(eq(5678), eq(1234))).doReturn( Relationship( - userId = 5678, - targetUserId = 1234, + actorId = 5678, + targetActorId = 1234, following = false, blocking = false, muting = false, @@ -274,8 +274,8 @@ class RelationshipServiceImplTest { verify(relationshipRepository, times(1)).save( Relationship( - userId = 5678, - targetUserId = 1234, + actorId = 5678, + targetActorId = 1234, following = true, blocking = false, muting = false, @@ -290,14 +290,14 @@ class RelationshipServiceImplTest { @Test fun `acceptFollowRequest リモートユーザーの場合永続化されて配送される`() = runTest { val localUser = UserBuilder.localUserOf(domain = "example.com") - whenever(userQueryService.findById(eq(1234))).doReturn(localUser) + whenever(actorQueryService.findById(eq(1234))).doReturn(localUser) val remoteUser = UserBuilder.remoteUserOf(domain = "remote.example.com") - whenever(userQueryService.findById(eq(5678))).doReturn(remoteUser) + whenever(actorQueryService.findById(eq(5678))).doReturn(remoteUser) whenever(relationshipRepository.findByUserIdAndTargetUserId(eq(5678), eq(1234))).doReturn( Relationship( - userId = 5678, - targetUserId = 1234, + actorId = 5678, + targetActorId = 1234, following = false, blocking = false, muting = false, @@ -311,8 +311,8 @@ class RelationshipServiceImplTest { verify(relationshipRepository, times(1)).save( eq( Relationship( - userId = 5678, - targetUserId = 1234, + actorId = 5678, + targetActorId = 1234, following = true, blocking = false, muting = false, @@ -347,7 +347,7 @@ class RelationshipServiceImplTest { @Test fun `acceptFollowRequest フォローリクエストが存在せずforceがtrueのときフォローを承認する`() = runTest { - whenever(userQueryService.findById(eq(5678))).doReturn(UserBuilder.remoteUserOf(domain = "remote.example.com")) + whenever(actorQueryService.findById(eq(5678))).doReturn(UserBuilder.remoteUserOf(domain = "remote.example.com")) whenever(relationshipRepository.findByUserIdAndTargetUserId(eq(5678), eq(1234))).doReturn( Relationship( @@ -360,8 +360,8 @@ class RelationshipServiceImplTest { verify(relationshipRepository, times(1)).save( eq( Relationship( - userId = 5678, - targetUserId = 1234, + actorId = 5678, + targetActorId = 1234, following = true, blocking = false, muting = false, @@ -410,12 +410,12 @@ class RelationshipServiceImplTest { @Test fun `rejectFollowRequest ローカルユーザーの場合永続化される`() = runTest { - whenever(userQueryService.findById(eq(5678))).doReturn(UserBuilder.localUserOf(domain = "example.com")) + whenever(actorQueryService.findById(eq(5678))).doReturn(UserBuilder.localUserOf(domain = "example.com")) whenever(relationshipRepository.findByUserIdAndTargetUserId(eq(5678), eq(1234))).doReturn( Relationship( - userId = 5678, - targetUserId = 1234, + actorId = 5678, + targetActorId = 1234, following = false, blocking = false, muting = false, @@ -429,8 +429,8 @@ class RelationshipServiceImplTest { verify(relationshipRepository, times(1)).save( eq( Relationship( - userId = 5678, - targetUserId = 1234, + actorId = 5678, + targetActorId = 1234, following = false, blocking = false, muting = false, @@ -446,15 +446,15 @@ class RelationshipServiceImplTest { @Test fun `rejectFollowRequest リモートユーザーの場合永続化されて配送される`() = runTest { val localUser = UserBuilder.localUserOf(domain = "example.com") - whenever(userQueryService.findById(eq(1234))).doReturn(localUser) + whenever(actorQueryService.findById(eq(1234))).doReturn(localUser) val remoteUser = UserBuilder.remoteUserOf(domain = "remote.example.com") - whenever(userQueryService.findById(eq(5678))).doReturn(remoteUser) + whenever(actorQueryService.findById(eq(5678))).doReturn(remoteUser) whenever(relationshipRepository.findByUserIdAndTargetUserId(eq(5678), eq(1234))).doReturn( Relationship( - userId = 5678, - targetUserId = 1234, + actorId = 5678, + targetActorId = 1234, following = false, blocking = false, muting = false, @@ -468,8 +468,8 @@ class RelationshipServiceImplTest { verify(relationshipRepository, times(1)).save( eq( Relationship( - userId = 5678, - targetUserId = 1234, + actorId = 5678, + targetActorId = 1234, following = false, blocking = false, muting = false, @@ -494,8 +494,8 @@ class RelationshipServiceImplTest { fun `rejectFollowRequest フォローリクエストが存在しない場合何もしない`() = runTest { whenever(relationshipRepository.findByUserIdAndTargetUserId(eq(5678), eq(1234))).doReturn( Relationship( - userId = 5678, - targetUserId = 1234, + actorId = 5678, + targetActorId = 1234, following = false, blocking = false, muting = false, @@ -516,8 +516,8 @@ class RelationshipServiceImplTest { verify(relationshipRepository, times(1)).save( eq( Relationship( - userId = 1234, - targetUserId = 5678, + actorId = 1234, + targetActorId = 5678, following = false, blocking = false, muting = false, @@ -530,11 +530,11 @@ class RelationshipServiceImplTest { @Test fun `unfollow ローカルユーザーの場合永続化される`() = runTest { - whenever(userQueryService.findById(eq(5678))).doReturn(UserBuilder.localUserOf(domain = "example.com")) + whenever(actorQueryService.findById(eq(5678))).doReturn(UserBuilder.localUserOf(domain = "example.com")) whenever(relationshipRepository.findByUserIdAndTargetUserId(eq(1234), eq(5678))).doReturn( Relationship( - userId = 1234, - targetUserId = 5678, + actorId = 1234, + targetActorId = 5678, following = true, blocking = false, muting = false, @@ -548,8 +548,8 @@ class RelationshipServiceImplTest { verify(relationshipRepository, times(1)).save( eq( Relationship( - userId = 1234, - targetUserId = 5678, + actorId = 1234, + targetActorId = 5678, following = false, blocking = false, muting = false, @@ -565,15 +565,15 @@ class RelationshipServiceImplTest { @Test fun `unfollow リモートユーザー場合永続化されて配送される`() = runTest { val localUser = UserBuilder.localUserOf(domain = "example.com") - whenever(userQueryService.findById(eq(1234))).doReturn(localUser) + whenever(actorQueryService.findById(eq(1234))).doReturn(localUser) val remoteUser = UserBuilder.remoteUserOf(domain = "remote.example.com") - whenever(userQueryService.findById(eq(5678))).doReturn(remoteUser) + whenever(actorQueryService.findById(eq(5678))).doReturn(remoteUser) whenever(relationshipRepository.findByUserIdAndTargetUserId(eq(1234), eq(5678))).doReturn( Relationship( - userId = 1234, - targetUserId = 5678, + actorId = 1234, + targetActorId = 5678, following = true, blocking = false, muting = false, @@ -587,8 +587,8 @@ class RelationshipServiceImplTest { verify(relationshipRepository, times(1)).save( eq( Relationship( - userId = 1234, - targetUserId = 5678, + actorId = 1234, + targetActorId = 5678, following = false, blocking = false, muting = false, @@ -612,8 +612,8 @@ class RelationshipServiceImplTest { fun `unfollow フォローしていなかった場合は何もしない`() = runTest { whenever(relationshipRepository.findByUserIdAndTargetUserId(eq(1234), eq(5678))).doReturn( Relationship( - userId = 1234, - targetUserId = 5678, + actorId = 1234, + targetActorId = 5678, following = false, blocking = false, muting = false, @@ -629,11 +629,11 @@ class RelationshipServiceImplTest { @Test fun `unblock ローカルユーザーの場合永続化される`() = runTest { - whenever(userQueryService.findById(eq(5678))).doReturn(UserBuilder.localUserOf(domain = "example.com")) + whenever(actorQueryService.findById(eq(5678))).doReturn(UserBuilder.localUserOf(domain = "example.com")) whenever(relationshipRepository.findByUserIdAndTargetUserId(eq(1234), eq(5678))).doReturn( Relationship( - userId = 1234, - targetUserId = 5678, + actorId = 1234, + targetActorId = 5678, following = false, blocking = true, muting = false, @@ -647,8 +647,8 @@ class RelationshipServiceImplTest { verify(relationshipRepository, times(1)).save( eq( Relationship( - userId = 1234, - targetUserId = 5678, + actorId = 1234, + targetActorId = 5678, following = false, blocking = false, muting = false, @@ -664,15 +664,15 @@ class RelationshipServiceImplTest { @Test fun `unblock リモートユーザーの場合永続化されて配送される`() = runTest { val localUser = UserBuilder.localUserOf(domain = "example.com") - whenever(userQueryService.findById(eq(1234))).doReturn(localUser) + whenever(actorQueryService.findById(eq(1234))).doReturn(localUser) val remoteUser = UserBuilder.remoteUserOf(domain = "remote.example.com") - whenever(userQueryService.findById(eq(5678))).doReturn(remoteUser) + whenever(actorQueryService.findById(eq(5678))).doReturn(remoteUser) whenever(relationshipRepository.findByUserIdAndTargetUserId(eq(1234), eq(5678))).doReturn( Relationship( - userId = 1234, - targetUserId = 5678, + actorId = 1234, + targetActorId = 5678, following = false, blocking = true, muting = false, @@ -711,8 +711,8 @@ class RelationshipServiceImplTest { fun `unblock ブロックしていない場合は何もしない`() = runTest { whenever(relationshipRepository.findByUserIdAndTargetUserId(eq(1234), eq(5678))).doReturn( Relationship( - userId = 1234, - targetUserId = 5678, + actorId = 1234, + targetActorId = 5678, following = false, blocking = false, muting = false, @@ -733,8 +733,8 @@ class RelationshipServiceImplTest { verify(relationshipRepository, times(1)).save( eq( Relationship( - userId = 1234, - targetUserId = 5678, + actorId = 1234, + targetActorId = 5678, following = false, blocking = false, muting = true, @@ -750,8 +750,8 @@ class RelationshipServiceImplTest { whenever(relationshipRepository.findByUserIdAndTargetUserId(eq(1234), eq(5678))).doReturn( Relationship( - userId = 1234, - targetUserId = 5678, + actorId = 1234, + targetActorId = 5678, following = false, blocking = false, muting = true, @@ -765,8 +765,8 @@ class RelationshipServiceImplTest { verify(relationshipRepository, times(1)).save( eq( Relationship( - userId = 1234, - targetUserId = 5678, + actorId = 1234, + targetActorId = 5678, following = false, blocking = false, muting = false, diff --git a/src/test/kotlin/dev/usbharu/hideout/core/service/timeline/TimelineServiceTest.kt b/src/test/kotlin/dev/usbharu/hideout/core/service/timeline/TimelineServiceTest.kt index 4302a2ad..29b195ae 100644 --- a/src/test/kotlin/dev/usbharu/hideout/core/service/timeline/TimelineServiceTest.kt +++ b/src/test/kotlin/dev/usbharu/hideout/core/service/timeline/TimelineServiceTest.kt @@ -1,12 +1,12 @@ package dev.usbharu.hideout.core.service.timeline import dev.usbharu.hideout.application.service.id.TwitterSnowflakeIdGenerateService +import dev.usbharu.hideout.core.domain.model.actor.Actor import dev.usbharu.hideout.core.domain.model.post.Visibility import dev.usbharu.hideout.core.domain.model.timeline.Timeline import dev.usbharu.hideout.core.domain.model.timeline.TimelineRepository -import dev.usbharu.hideout.core.domain.model.user.User +import dev.usbharu.hideout.core.query.ActorQueryService import dev.usbharu.hideout.core.query.FollowerQueryService -import dev.usbharu.hideout.core.query.UserQueryService import kotlinx.coroutines.test.runTest import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Test @@ -27,7 +27,7 @@ class TimelineServiceTest { private lateinit var followerQueryService: FollowerQueryService @Mock - private lateinit var userQueryService: UserQueryService + private lateinit var actorQueryService: ActorQueryService @Mock private lateinit var timelineRepository: TimelineRepository @@ -41,11 +41,11 @@ class TimelineServiceTest { @Test fun `publishTimeline ローカルの投稿はローカルのフォロワーと投稿者のタイムラインに追加される`() = runTest { val post = PostBuilder.of() - val listOf = listOf<User>(UserBuilder.localUserOf(), UserBuilder.localUserOf()) - val localUserOf = UserBuilder.localUserOf(id = post.userId) + val listOf = listOf<Actor>(UserBuilder.localUserOf(), UserBuilder.localUserOf()) + val localUserOf = UserBuilder.localUserOf(id = post.actorId) - whenever(followerQueryService.findFollowersById(eq(post.userId))).doReturn(listOf) - whenever(userQueryService.findById(eq(post.userId))).doReturn(localUserOf) + whenever(followerQueryService.findFollowersById(eq(post.actorId))).doReturn(listOf) + whenever(actorQueryService.findById(eq(post.actorId))).doReturn(localUserOf) whenever(timelineRepository.generateId()).doReturn(TwitterSnowflakeIdGenerateService.generateId()) @@ -54,15 +54,15 @@ class TimelineServiceTest { verify(timelineRepository).saveAll(capture(captor)) val timelineList = captor.value - assertThat(timelineList).hasSize(4).anyMatch { it.userId == post.userId } + assertThat(timelineList).hasSize(4).anyMatch { it.userId == post.actorId } } @Test fun `publishTimeline リモートの投稿はローカルのフォロワーのタイムラインに追加される`() = runTest { val post = PostBuilder.of() - val listOf = listOf<User>(UserBuilder.localUserOf(), UserBuilder.localUserOf()) + val listOf = listOf<Actor>(UserBuilder.localUserOf(), UserBuilder.localUserOf()) - whenever(followerQueryService.findFollowersById(eq(post.userId))).doReturn(listOf) + whenever(followerQueryService.findFollowersById(eq(post.actorId))).doReturn(listOf) whenever(timelineRepository.generateId()).doReturn(TwitterSnowflakeIdGenerateService.generateId()) @@ -77,9 +77,9 @@ class TimelineServiceTest { @Test fun `publishTimeline パブリック投稿はパブリックタイムラインにも追加される`() = runTest { val post = PostBuilder.of() - val listOf = listOf<User>(UserBuilder.localUserOf(), UserBuilder.localUserOf()) + val listOf = listOf<Actor>(UserBuilder.localUserOf(), UserBuilder.localUserOf()) - whenever(followerQueryService.findFollowersById(eq(post.userId))).doReturn(listOf) + whenever(followerQueryService.findFollowersById(eq(post.actorId))).doReturn(listOf) whenever(timelineRepository.generateId()).doReturn(TwitterSnowflakeIdGenerateService.generateId()) @@ -94,9 +94,9 @@ class TimelineServiceTest { @Test fun `publishTimeline パブリック投稿ではない場合はローカルのフォロワーのみに追加される`() = runTest { val post = PostBuilder.of(visibility = Visibility.UNLISTED) - val listOf = listOf<User>(UserBuilder.localUserOf(), UserBuilder.localUserOf()) + val listOf = listOf<Actor>(UserBuilder.localUserOf(), UserBuilder.localUserOf()) - whenever(followerQueryService.findFollowersById(eq(post.userId))).doReturn(listOf) + whenever(followerQueryService.findFollowersById(eq(post.actorId))).doReturn(listOf) whenever(timelineRepository.generateId()).doReturn(TwitterSnowflakeIdGenerateService.generateId()) diff --git a/src/test/kotlin/dev/usbharu/hideout/core/service/user/UserServiceTest.kt b/src/test/kotlin/dev/usbharu/hideout/core/service/user/ActorServiceTest.kt similarity index 81% rename from src/test/kotlin/dev/usbharu/hideout/core/service/user/UserServiceTest.kt rename to src/test/kotlin/dev/usbharu/hideout/core/service/user/ActorServiceTest.kt index c524a0f5..f8f14410 100644 --- a/src/test/kotlin/dev/usbharu/hideout/core/service/user/UserServiceTest.kt +++ b/src/test/kotlin/dev/usbharu/hideout/core/service/user/ActorServiceTest.kt @@ -4,9 +4,9 @@ package dev.usbharu.hideout.core.service.user import dev.usbharu.hideout.application.config.ApplicationConfig import dev.usbharu.hideout.application.config.CharacterLimit +import dev.usbharu.hideout.core.domain.model.actor.Actor +import dev.usbharu.hideout.core.domain.model.actor.ActorRepository import dev.usbharu.hideout.core.domain.model.post.Post -import dev.usbharu.hideout.core.domain.model.user.User -import dev.usbharu.hideout.core.domain.model.user.UserRepository import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runTest import org.junit.jupiter.api.Test @@ -18,13 +18,13 @@ import java.security.KeyPairGenerator import kotlin.test.assertEquals import kotlin.test.assertNull -class UserServiceTest { - val userBuilder = User.UserBuilder(CharacterLimit(), ApplicationConfig(URL("https://example.com"))) +class ActorServiceTest { + val actorBuilder = Actor.UserBuilder(CharacterLimit(), ApplicationConfig(URL("https://example.com"))) val postBuilder = Post.PostBuilder(CharacterLimit()) @Test fun `createLocalUser ローカルユーザーを作成できる`() = runTest { - val userRepository = mock<UserRepository> { + val actorRepository = mock<ActorRepository> { onBlocking { nextId() } doReturn 110001L } val generateKeyPair = KeyPairGenerator.getInstance("RSA").generateKeyPair() @@ -34,17 +34,17 @@ class UserServiceTest { } val userService = UserServiceImpl( - userRepository, + actorRepository, userAuthService, mock(), - userBuilder, + actorBuilder, testApplicationConfig, mock() ) userService.createLocalUser(UserCreateDto("test", "testUser", "XXXXXXXXXXXXX", "test")) - verify(userRepository, times(1)).save(any()) - argumentCaptor<User> { - verify(userRepository, times(1)).save(capture()) + verify(actorRepository, times(1)).save(any()) + argumentCaptor<Actor> { + verify(actorRepository, times(1)).save(capture()) assertEquals("test", firstValue.name) assertEquals("testUser", firstValue.screenName) assertEquals("XXXXXXXXXXXXX", firstValue.description) @@ -62,11 +62,11 @@ class UserServiceTest { @Test fun `createRemoteUser リモートユーザーを作成できる`() = runTest { - val userRepository = mock<UserRepository> { + val actorRepository = mock<ActorRepository> { onBlocking { nextId() } doReturn 113345L } val userService = - UserServiceImpl(userRepository, mock(), mock(), userBuilder, testApplicationConfig, mock()) + UserServiceImpl(actorRepository, mock(), mock(), actorBuilder, testApplicationConfig, mock()) val user = RemoteUserCreateDto( name = "test", domain = "remote.example.com", @@ -82,9 +82,9 @@ class UserServiceTest { sharedInbox = null ) userService.createRemoteUser(user) - verify(userRepository, times(1)).save(any()) - argumentCaptor<User> { - verify(userRepository, times(1)).save(capture()) + verify(actorRepository, times(1)).save(any()) + argumentCaptor<Actor> { + verify(actorRepository, times(1)).save(capture()) assertEquals("test", firstValue.name) assertEquals("testUser", firstValue.screenName) assertEquals("test user", firstValue.description) diff --git a/src/test/kotlin/dev/usbharu/hideout/mastodon/service/account/AccountApiServiceImplTest.kt b/src/test/kotlin/dev/usbharu/hideout/mastodon/service/account/AccountApiServiceImplTest.kt index 19834065..d10e4e77 100644 --- a/src/test/kotlin/dev/usbharu/hideout/mastodon/service/account/AccountApiServiceImplTest.kt +++ b/src/test/kotlin/dev/usbharu/hideout/mastodon/service/account/AccountApiServiceImplTest.kt @@ -1,8 +1,8 @@ package dev.usbharu.hideout.mastodon.service.account import dev.usbharu.hideout.application.external.Transaction +import dev.usbharu.hideout.core.domain.model.actor.ActorRepository import dev.usbharu.hideout.core.domain.model.relationship.RelationshipRepository -import dev.usbharu.hideout.core.domain.model.user.UserRepository import dev.usbharu.hideout.core.query.FollowerQueryService import dev.usbharu.hideout.core.service.relationship.RelationshipService import dev.usbharu.hideout.core.service.user.UserService @@ -31,7 +31,7 @@ class AccountApiServiceImplTest { private lateinit var userService: UserService @Mock - private lateinit var userRepository: UserRepository + private lateinit var actorRepository: ActorRepository @Mock private lateinit var followerQueryService: FollowerQueryService @@ -204,8 +204,8 @@ class AccountApiServiceImplTest { whenever(relationshipRepository.findByUserIdAndTargetUserId(eq(loginUser), eq(userId))).doReturn( dev.usbharu.hideout.core.domain.model.relationship.Relationship( - userId = loginUser, - targetUserId = userId, + actorId = loginUser, + targetActorId = userId, following = true, blocking = false, muting = false, @@ -239,8 +239,8 @@ class AccountApiServiceImplTest { whenever(relationshipRepository.findByUserIdAndTargetUserId(eq(followeeId), eq(userId))).doReturn( dev.usbharu.hideout.core.domain.model.relationship.Relationship( - userId = followeeId, - targetUserId = userId, + actorId = followeeId, + targetActorId = userId, following = true, blocking = false, muting = false, @@ -250,8 +250,8 @@ class AccountApiServiceImplTest { ) whenever(relationshipRepository.findByUserIdAndTargetUserId(eq(userId), eq(followeeId))).doReturn( dev.usbharu.hideout.core.domain.model.relationship.Relationship( - userId = userId, - targetUserId = followeeId, + actorId = userId, + targetActorId = followeeId, following = true, blocking = false, muting = false, diff --git a/src/test/kotlin/utils/PostBuilder.kt b/src/test/kotlin/utils/PostBuilder.kt index afe32938..d69c9d70 100644 --- a/src/test/kotlin/utils/PostBuilder.kt +++ b/src/test/kotlin/utils/PostBuilder.kt @@ -24,7 +24,7 @@ object PostBuilder { ): Post { return postBuilder.of( id = id, - userId = userId, + actorId = userId, overview = overview, text = text, createdAt = createdAt, diff --git a/src/test/kotlin/utils/UserBuilder.kt b/src/test/kotlin/utils/UserBuilder.kt index b62a3cb5..c22fa9a7 100644 --- a/src/test/kotlin/utils/UserBuilder.kt +++ b/src/test/kotlin/utils/UserBuilder.kt @@ -3,13 +3,13 @@ package utils import dev.usbharu.hideout.application.config.ApplicationConfig import dev.usbharu.hideout.application.config.CharacterLimit import dev.usbharu.hideout.application.service.id.TwitterSnowflakeIdGenerateService -import dev.usbharu.hideout.core.domain.model.user.User +import dev.usbharu.hideout.core.domain.model.actor.Actor import kotlinx.coroutines.runBlocking import java.net.URL import java.time.Instant object UserBuilder { - private val userBuilder = User.UserBuilder(CharacterLimit(), ApplicationConfig(URL("https://example.com"))) + private val actorBuilder = Actor.UserBuilder(CharacterLimit(), ApplicationConfig(URL("https://example.com"))) private val idGenerator = TwitterSnowflakeIdGenerateService @@ -29,8 +29,8 @@ object UserBuilder { keyId: String = "https://$domain/users/$id#pubkey", followers: String = "https://$domain/users/$id/followers", following: String = "https://$domain/users/$id/following" - ): User { - return userBuilder.of( + ): Actor { + return actorBuilder.of( id = id, name = name, domain = domain, @@ -63,8 +63,8 @@ object UserBuilder { keyId: String = "https://$domain/$id#pubkey", followers: String = "https://$domain/$id/followers", following: String = "https://$domain/$id/following" - ): User { - return userBuilder.of( + ): Actor { + return actorBuilder.of( id = id, name = name, domain = domain,