mirror of https://github.com/usbharu/Hideout.git
feat: ミュート等ができるように
This commit is contained in:
parent
a939dd5f30
commit
1245165516
|
@ -0,0 +1,19 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.core.application.relationship.acceptfollowrequest
|
||||||
|
|
||||||
|
data class AcceptFollowRequest(val sourceActorId: Long)
|
|
@ -0,0 +1,58 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.core.application.relationship.acceptfollowrequest
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.block.UserBlockApplicationService
|
||||||
|
import dev.usbharu.hideout.core.application.shared.AbstractApplicationService
|
||||||
|
import dev.usbharu.hideout.core.application.shared.CommandExecutor
|
||||||
|
import dev.usbharu.hideout.core.application.shared.Transaction
|
||||||
|
import dev.usbharu.hideout.core.application.shared.UserDetailGettableCommandExecutor
|
||||||
|
import dev.usbharu.hideout.core.domain.model.actor.ActorId
|
||||||
|
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.userdetails.UserDetailRepository
|
||||||
|
import org.slf4j.LoggerFactory
|
||||||
|
import org.springframework.stereotype.Service
|
||||||
|
|
||||||
|
@Service
|
||||||
|
class UserAcceptFollowRequestApplicationService(
|
||||||
|
private val relationshipRepository: RelationshipRepository,
|
||||||
|
transaction: Transaction,
|
||||||
|
private val actorRepository: ActorRepository,
|
||||||
|
private val userDetailRepository: UserDetailRepository,
|
||||||
|
) :
|
||||||
|
AbstractApplicationService<AcceptFollowRequest, Unit>(transaction, logger) {
|
||||||
|
companion object {
|
||||||
|
private val logger = LoggerFactory.getLogger(UserBlockApplicationService::class.java)
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun internalExecute(command: AcceptFollowRequest, executor: CommandExecutor) {
|
||||||
|
require(executor is UserDetailGettableCommandExecutor)
|
||||||
|
|
||||||
|
val userDetail = userDetailRepository.findById(executor.userDetailId)!!
|
||||||
|
val actor = actorRepository.findById(userDetail.actorId)!!
|
||||||
|
|
||||||
|
val targetId = ActorId(command.sourceActorId)
|
||||||
|
|
||||||
|
val relationship = relationshipRepository.findByActorIdAndTargetId(targetId, actor.id)
|
||||||
|
?: throw Exception("Follow request not found")
|
||||||
|
|
||||||
|
relationship.acceptFollowRequest()
|
||||||
|
|
||||||
|
relationshipRepository.save(relationship)
|
||||||
|
}
|
||||||
|
}
|
|
@ -14,6 +14,6 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package dev.usbharu.hideout.core.application.relationship
|
package dev.usbharu.hideout.core.application.relationship.block
|
||||||
|
|
||||||
data class Block(val targetActorId: Long)
|
data class Block(val targetActorId: Long)
|
|
@ -14,7 +14,7 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package dev.usbharu.hideout.core.application.relationship
|
package dev.usbharu.hideout.core.application.relationship.block
|
||||||
|
|
||||||
import dev.usbharu.hideout.core.application.shared.AbstractApplicationService
|
import dev.usbharu.hideout.core.application.shared.AbstractApplicationService
|
||||||
import dev.usbharu.hideout.core.application.shared.CommandExecutor
|
import dev.usbharu.hideout.core.application.shared.CommandExecutor
|
|
@ -14,6 +14,6 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package dev.usbharu.hideout.core.application.relationship
|
package dev.usbharu.hideout.core.application.relationship.followrequest
|
||||||
|
|
||||||
data class FollowRequest(val targetActorId: Long)
|
data class FollowRequest(val targetActorId: Long)
|
|
@ -14,7 +14,7 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package dev.usbharu.hideout.core.application.relationship
|
package dev.usbharu.hideout.core.application.relationship.followrequest
|
||||||
|
|
||||||
import dev.usbharu.hideout.core.application.shared.AbstractApplicationService
|
import dev.usbharu.hideout.core.application.shared.AbstractApplicationService
|
||||||
import dev.usbharu.hideout.core.application.shared.CommandExecutor
|
import dev.usbharu.hideout.core.application.shared.CommandExecutor
|
|
@ -14,6 +14,6 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package dev.usbharu.hideout.core.application.relationship
|
package dev.usbharu.hideout.core.application.relationship.get
|
||||||
|
|
||||||
data class GetRelationship(val targetActorId: Long)
|
data class GetRelationship(val targetActorId: Long)
|
|
@ -14,7 +14,7 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package dev.usbharu.hideout.core.application.relationship
|
package dev.usbharu.hideout.core.application.relationship.get
|
||||||
|
|
||||||
import dev.usbharu.hideout.core.application.shared.AbstractApplicationService
|
import dev.usbharu.hideout.core.application.shared.AbstractApplicationService
|
||||||
import dev.usbharu.hideout.core.application.shared.CommandExecutor
|
import dev.usbharu.hideout.core.application.shared.CommandExecutor
|
|
@ -14,7 +14,7 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package dev.usbharu.hideout.core.application.relationship
|
package dev.usbharu.hideout.core.application.relationship.get
|
||||||
|
|
||||||
import dev.usbharu.hideout.core.domain.model.actorinstancerelationship.ActorInstanceRelationship
|
import dev.usbharu.hideout.core.domain.model.actorinstancerelationship.ActorInstanceRelationship
|
||||||
import dev.usbharu.hideout.core.domain.model.relationship.Relationship
|
import dev.usbharu.hideout.core.domain.model.relationship.Relationship
|
||||||
|
@ -38,7 +38,7 @@ data class Relationship(
|
||||||
relationship: Relationship,
|
relationship: Relationship,
|
||||||
relationship2: Relationship,
|
relationship2: Relationship,
|
||||||
actorInstanceRelationship: ActorInstanceRelationship,
|
actorInstanceRelationship: ActorInstanceRelationship,
|
||||||
): dev.usbharu.hideout.core.application.relationship.Relationship {
|
): dev.usbharu.hideout.core.application.relationship.get.Relationship {
|
||||||
return Relationship(
|
return Relationship(
|
||||||
relationship.actorId.id,
|
relationship.actorId.id,
|
||||||
relationship.targetActorId.id,
|
relationship.targetActorId.id,
|
|
@ -0,0 +1,19 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.core.application.relationship.mute
|
||||||
|
|
||||||
|
data class Mute(val targetActorId: Long)
|
|
@ -0,0 +1,60 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.core.application.relationship.mute
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.block.UserBlockApplicationService
|
||||||
|
import dev.usbharu.hideout.core.application.shared.AbstractApplicationService
|
||||||
|
import dev.usbharu.hideout.core.application.shared.CommandExecutor
|
||||||
|
import dev.usbharu.hideout.core.application.shared.Transaction
|
||||||
|
import dev.usbharu.hideout.core.application.shared.UserDetailGettableCommandExecutor
|
||||||
|
import dev.usbharu.hideout.core.domain.model.actor.ActorId
|
||||||
|
import dev.usbharu.hideout.core.domain.model.actor.ActorRepository
|
||||||
|
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.userdetails.UserDetailRepository
|
||||||
|
import org.slf4j.LoggerFactory
|
||||||
|
import org.springframework.stereotype.Service
|
||||||
|
|
||||||
|
@Service
|
||||||
|
class UserMuteApplicationService(
|
||||||
|
private val relationshipRepository: RelationshipRepository,
|
||||||
|
transaction: Transaction,
|
||||||
|
private val actorRepository: ActorRepository,
|
||||||
|
private val userDetailRepository: UserDetailRepository,
|
||||||
|
) :
|
||||||
|
AbstractApplicationService<Mute, Unit>(transaction, logger) {
|
||||||
|
companion object {
|
||||||
|
private val logger = LoggerFactory.getLogger(UserBlockApplicationService::class.java)
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun internalExecute(command: Mute, executor: CommandExecutor) {
|
||||||
|
require(executor is UserDetailGettableCommandExecutor)
|
||||||
|
|
||||||
|
val userDetail = userDetailRepository.findById(executor.userDetailId)!!
|
||||||
|
val actor = actorRepository.findById(userDetail.actorId)!!
|
||||||
|
|
||||||
|
val targetId = ActorId(command.targetActorId)
|
||||||
|
val relationship = relationshipRepository.findByActorIdAndTargetId(actor.id, targetId) ?: Relationship.default(
|
||||||
|
actor.id,
|
||||||
|
targetId
|
||||||
|
)
|
||||||
|
|
||||||
|
relationship.mute()
|
||||||
|
|
||||||
|
relationshipRepository.save(relationship)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.core.application.relationship.rejectfollowrequest
|
||||||
|
|
||||||
|
data class RejectFollowRequest(val sourceActorId: Long)
|
|
@ -0,0 +1,58 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.core.application.relationship.rejectfollowrequest
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.block.UserBlockApplicationService
|
||||||
|
import dev.usbharu.hideout.core.application.shared.AbstractApplicationService
|
||||||
|
import dev.usbharu.hideout.core.application.shared.CommandExecutor
|
||||||
|
import dev.usbharu.hideout.core.application.shared.Transaction
|
||||||
|
import dev.usbharu.hideout.core.application.shared.UserDetailGettableCommandExecutor
|
||||||
|
import dev.usbharu.hideout.core.domain.model.actor.ActorId
|
||||||
|
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.userdetails.UserDetailRepository
|
||||||
|
import org.slf4j.LoggerFactory
|
||||||
|
import org.springframework.stereotype.Service
|
||||||
|
|
||||||
|
@Service
|
||||||
|
class UserRejectFollowRequestApplicationService(
|
||||||
|
private val relationshipRepository: RelationshipRepository,
|
||||||
|
transaction: Transaction,
|
||||||
|
private val actorRepository: ActorRepository,
|
||||||
|
private val userDetailRepository: UserDetailRepository,
|
||||||
|
) :
|
||||||
|
AbstractApplicationService<RejectFollowRequest, Unit>(transaction, logger) {
|
||||||
|
companion object {
|
||||||
|
private val logger = LoggerFactory.getLogger(UserBlockApplicationService::class.java)
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun internalExecute(command: RejectFollowRequest, executor: CommandExecutor) {
|
||||||
|
require(executor is UserDetailGettableCommandExecutor)
|
||||||
|
|
||||||
|
val userDetail = userDetailRepository.findById(executor.userDetailId)!!
|
||||||
|
val actor = actorRepository.findById(userDetail.actorId)!!
|
||||||
|
|
||||||
|
val targetId = ActorId(command.sourceActorId)
|
||||||
|
|
||||||
|
val relationship = relationshipRepository.findByActorIdAndTargetId(targetId, actor.id)
|
||||||
|
?: throw Exception("Follow request not found")
|
||||||
|
|
||||||
|
relationship.rejectFollowRequest()
|
||||||
|
|
||||||
|
relationshipRepository.save(relationship)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.core.application.relationship.removefromfollowers
|
||||||
|
|
||||||
|
data class RemoveFromFollowers(val targetActorId: Long)
|
|
@ -0,0 +1,60 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.core.application.relationship.removefromfollowers
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.block.UserBlockApplicationService
|
||||||
|
import dev.usbharu.hideout.core.application.shared.AbstractApplicationService
|
||||||
|
import dev.usbharu.hideout.core.application.shared.CommandExecutor
|
||||||
|
import dev.usbharu.hideout.core.application.shared.Transaction
|
||||||
|
import dev.usbharu.hideout.core.application.shared.UserDetailGettableCommandExecutor
|
||||||
|
import dev.usbharu.hideout.core.domain.model.actor.ActorId
|
||||||
|
import dev.usbharu.hideout.core.domain.model.actor.ActorRepository
|
||||||
|
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.userdetails.UserDetailRepository
|
||||||
|
import org.slf4j.LoggerFactory
|
||||||
|
import org.springframework.stereotype.Service
|
||||||
|
|
||||||
|
@Service
|
||||||
|
class UserRemoveFromFollowersApplicationService(
|
||||||
|
private val relationshipRepository: RelationshipRepository,
|
||||||
|
transaction: Transaction,
|
||||||
|
private val actorRepository: ActorRepository,
|
||||||
|
private val userDetailRepository: UserDetailRepository,
|
||||||
|
) :
|
||||||
|
AbstractApplicationService<RemoveFromFollowers, Unit>(transaction, logger) {
|
||||||
|
companion object {
|
||||||
|
private val logger = LoggerFactory.getLogger(UserBlockApplicationService::class.java)
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun internalExecute(command: RemoveFromFollowers, executor: CommandExecutor) {
|
||||||
|
require(executor is UserDetailGettableCommandExecutor)
|
||||||
|
|
||||||
|
val userDetail = userDetailRepository.findById(executor.userDetailId)!!
|
||||||
|
val actor = actorRepository.findById(userDetail.actorId)!!
|
||||||
|
|
||||||
|
val targetId = ActorId(command.targetActorId)
|
||||||
|
val relationship = relationshipRepository.findByActorIdAndTargetId(targetId, actor.id) ?: Relationship.default(
|
||||||
|
targetId,
|
||||||
|
actor.id
|
||||||
|
)
|
||||||
|
|
||||||
|
relationship.unfollow()
|
||||||
|
|
||||||
|
relationshipRepository.save(relationship)
|
||||||
|
}
|
||||||
|
}
|
|
@ -14,6 +14,6 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package dev.usbharu.hideout.core.application.relationship
|
package dev.usbharu.hideout.core.application.relationship.unblock
|
||||||
|
|
||||||
data class Unblock(val targetActorId: Long)
|
data class Unblock(val targetActorId: Long)
|
|
@ -14,8 +14,9 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package dev.usbharu.hideout.core.application.relationship
|
package dev.usbharu.hideout.core.application.relationship.unblock
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.block.UserBlockApplicationService
|
||||||
import dev.usbharu.hideout.core.application.shared.AbstractApplicationService
|
import dev.usbharu.hideout.core.application.shared.AbstractApplicationService
|
||||||
import dev.usbharu.hideout.core.application.shared.CommandExecutor
|
import dev.usbharu.hideout.core.application.shared.CommandExecutor
|
||||||
import dev.usbharu.hideout.core.application.shared.Transaction
|
import dev.usbharu.hideout.core.application.shared.Transaction
|
|
@ -0,0 +1,19 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.core.application.relationship.unfollow
|
||||||
|
|
||||||
|
data class Unfollow(val targetActorId: Long)
|
|
@ -0,0 +1,60 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.core.application.relationship.unfollow
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.block.UserBlockApplicationService
|
||||||
|
import dev.usbharu.hideout.core.application.shared.AbstractApplicationService
|
||||||
|
import dev.usbharu.hideout.core.application.shared.CommandExecutor
|
||||||
|
import dev.usbharu.hideout.core.application.shared.Transaction
|
||||||
|
import dev.usbharu.hideout.core.application.shared.UserDetailGettableCommandExecutor
|
||||||
|
import dev.usbharu.hideout.core.domain.model.actor.ActorId
|
||||||
|
import dev.usbharu.hideout.core.domain.model.actor.ActorRepository
|
||||||
|
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.userdetails.UserDetailRepository
|
||||||
|
import org.slf4j.LoggerFactory
|
||||||
|
import org.springframework.stereotype.Service
|
||||||
|
|
||||||
|
@Service
|
||||||
|
class UserUnfollowApplicationService(
|
||||||
|
private val relationshipRepository: RelationshipRepository,
|
||||||
|
transaction: Transaction,
|
||||||
|
private val actorRepository: ActorRepository,
|
||||||
|
private val userDetailRepository: UserDetailRepository,
|
||||||
|
) :
|
||||||
|
AbstractApplicationService<Unfollow, Unit>(transaction, logger) {
|
||||||
|
companion object {
|
||||||
|
private val logger = LoggerFactory.getLogger(UserBlockApplicationService::class.java)
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun internalExecute(command: Unfollow, executor: CommandExecutor) {
|
||||||
|
require(executor is UserDetailGettableCommandExecutor)
|
||||||
|
|
||||||
|
val userDetail = userDetailRepository.findById(executor.userDetailId)!!
|
||||||
|
val actor = actorRepository.findById(userDetail.actorId)!!
|
||||||
|
|
||||||
|
val targetId = ActorId(command.targetActorId)
|
||||||
|
val relationship = relationshipRepository.findByActorIdAndTargetId(actor.id, targetId) ?: Relationship.default(
|
||||||
|
actor.id,
|
||||||
|
targetId
|
||||||
|
)
|
||||||
|
|
||||||
|
relationship.unfollow()
|
||||||
|
|
||||||
|
relationshipRepository.save(relationship)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.core.application.relationship.unmute
|
||||||
|
|
||||||
|
data class Unmute(val targetActorId: Long)
|
|
@ -0,0 +1,60 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.core.application.relationship.unmute
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.block.UserBlockApplicationService
|
||||||
|
import dev.usbharu.hideout.core.application.shared.AbstractApplicationService
|
||||||
|
import dev.usbharu.hideout.core.application.shared.CommandExecutor
|
||||||
|
import dev.usbharu.hideout.core.application.shared.Transaction
|
||||||
|
import dev.usbharu.hideout.core.application.shared.UserDetailGettableCommandExecutor
|
||||||
|
import dev.usbharu.hideout.core.domain.model.actor.ActorId
|
||||||
|
import dev.usbharu.hideout.core.domain.model.actor.ActorRepository
|
||||||
|
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.userdetails.UserDetailRepository
|
||||||
|
import org.slf4j.LoggerFactory
|
||||||
|
import org.springframework.stereotype.Service
|
||||||
|
|
||||||
|
@Service
|
||||||
|
class UserUnmuteApplicationService(
|
||||||
|
private val relationshipRepository: RelationshipRepository,
|
||||||
|
transaction: Transaction,
|
||||||
|
private val actorRepository: ActorRepository,
|
||||||
|
private val userDetailRepository: UserDetailRepository,
|
||||||
|
) :
|
||||||
|
AbstractApplicationService<Unmute, Unit>(transaction, logger) {
|
||||||
|
companion object {
|
||||||
|
private val logger = LoggerFactory.getLogger(UserBlockApplicationService::class.java)
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun internalExecute(command: Unmute, executor: CommandExecutor) {
|
||||||
|
require(executor is UserDetailGettableCommandExecutor)
|
||||||
|
|
||||||
|
val userDetail = userDetailRepository.findById(executor.userDetailId)!!
|
||||||
|
val actor = actorRepository.findById(userDetail.actorId)!!
|
||||||
|
|
||||||
|
val targetId = ActorId(command.targetActorId)
|
||||||
|
val relationship = relationshipRepository.findByActorIdAndTargetId(actor.id, targetId) ?: Relationship.default(
|
||||||
|
actor.id,
|
||||||
|
targetId
|
||||||
|
)
|
||||||
|
|
||||||
|
relationship.unmute()
|
||||||
|
|
||||||
|
relationshipRepository.save(relationship)
|
||||||
|
}
|
||||||
|
}
|
|
@ -18,14 +18,32 @@ package dev.usbharu.hideout.mastodon.interfaces.api
|
||||||
|
|
||||||
import dev.usbharu.hideout.core.application.actor.GetUserDetail
|
import dev.usbharu.hideout.core.application.actor.GetUserDetail
|
||||||
import dev.usbharu.hideout.core.application.actor.GetUserDetailApplicationService
|
import dev.usbharu.hideout.core.application.actor.GetUserDetailApplicationService
|
||||||
import dev.usbharu.hideout.core.application.relationship.*
|
import dev.usbharu.hideout.core.application.relationship.acceptfollowrequest.AcceptFollowRequest
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.acceptfollowrequest.UserAcceptFollowRequestApplicationService
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.block.Block
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.block.UserBlockApplicationService
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.followrequest.FollowRequest
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.followrequest.UserFollowRequestApplicationService
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.get.GetRelationship
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.get.GetRelationshipApplicationService
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.mute.Mute
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.mute.UserMuteApplicationService
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.rejectfollowrequest.RejectFollowRequest
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.rejectfollowrequest.UserRejectFollowRequestApplicationService
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.removefromfollowers.RemoveFromFollowers
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.removefromfollowers.UserRemoveFromFollowersApplicationService
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.unblock.Unblock
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.unblock.UserUnblockApplicationService
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.unfollow.Unfollow
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.unfollow.UserUnfollowApplicationService
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.unmute.Unmute
|
||||||
|
import dev.usbharu.hideout.core.application.relationship.unmute.UserUnmuteApplicationService
|
||||||
import dev.usbharu.hideout.core.infrastructure.springframework.oauth2.Oauth2CommandExecutor
|
import dev.usbharu.hideout.core.infrastructure.springframework.oauth2.Oauth2CommandExecutor
|
||||||
import dev.usbharu.hideout.core.infrastructure.springframework.oauth2.Oauth2CommandExecutorFactory
|
import dev.usbharu.hideout.core.infrastructure.springframework.oauth2.Oauth2CommandExecutorFactory
|
||||||
import dev.usbharu.hideout.mastodon.application.accounts.GetAccount
|
import dev.usbharu.hideout.mastodon.application.accounts.GetAccount
|
||||||
import dev.usbharu.hideout.mastodon.application.accounts.GetAccountApplicationService
|
import dev.usbharu.hideout.mastodon.application.accounts.GetAccountApplicationService
|
||||||
import dev.usbharu.hideout.mastodon.interfaces.api.generated.AccountApi
|
import dev.usbharu.hideout.mastodon.interfaces.api.generated.AccountApi
|
||||||
import dev.usbharu.hideout.mastodon.interfaces.api.generated.model.*
|
import dev.usbharu.hideout.mastodon.interfaces.api.generated.model.*
|
||||||
import dev.usbharu.hideout.mastodon.interfaces.api.generated.model.Relationship
|
|
||||||
import org.springframework.http.ResponseEntity
|
import org.springframework.http.ResponseEntity
|
||||||
import org.springframework.stereotype.Controller
|
import org.springframework.stereotype.Controller
|
||||||
|
|
||||||
|
@ -38,7 +56,15 @@ class SpringAccountApi(
|
||||||
private val getRelationshipApplicationService: GetRelationshipApplicationService,
|
private val getRelationshipApplicationService: GetRelationshipApplicationService,
|
||||||
private val userBlockApplicationService: UserBlockApplicationService,
|
private val userBlockApplicationService: UserBlockApplicationService,
|
||||||
private val userUnblockApplicationService: UserUnblockApplicationService,
|
private val userUnblockApplicationService: UserUnblockApplicationService,
|
||||||
|
private val userMuteApplicationService: UserMuteApplicationService,
|
||||||
|
private val userUnmuteApplicationService: UserUnmuteApplicationService,
|
||||||
|
private val userAcceptFollowRequestApplicationService: UserAcceptFollowRequestApplicationService,
|
||||||
|
private val userRejectFollowRequestApplicationService: UserRejectFollowRequestApplicationService,
|
||||||
|
private val userRemoveFromFollowersApplicationService: UserRemoveFromFollowersApplicationService,
|
||||||
|
private val userUnfollowApplicationService: UserUnfollowApplicationService,
|
||||||
) : AccountApi {
|
) : AccountApi {
|
||||||
|
|
||||||
|
|
||||||
override suspend fun apiV1AccountsIdBlockPost(id: String): ResponseEntity<Relationship> {
|
override suspend fun apiV1AccountsIdBlockPost(id: String): ResponseEntity<Relationship> {
|
||||||
val executor = oauth2CommandExecutorFactory.getCommandExecutor()
|
val executor = oauth2CommandExecutorFactory.getCommandExecutor()
|
||||||
userBlockApplicationService.execute(Block(id.toLong()), executor)
|
userBlockApplicationService.execute(Block(id.toLong()), executor)
|
||||||
|
@ -90,11 +116,19 @@ class SpringAccountApi(
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun apiV1AccountsIdMutePost(id: String): ResponseEntity<Relationship> {
|
override suspend fun apiV1AccountsIdMutePost(id: String): ResponseEntity<Relationship> {
|
||||||
return super.apiV1AccountsIdMutePost(id)
|
val executor = oauth2CommandExecutorFactory.getCommandExecutor()
|
||||||
|
userMuteApplicationService.execute(
|
||||||
|
Mute(id.toLong()), executor
|
||||||
|
)
|
||||||
|
return fetchRelationship(id, executor)
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun apiV1AccountsIdRemoveFromFollowersPost(id: String): ResponseEntity<Relationship> {
|
override suspend fun apiV1AccountsIdRemoveFromFollowersPost(id: String): ResponseEntity<Relationship> {
|
||||||
return super.apiV1AccountsIdRemoveFromFollowersPost(id)
|
val executor = oauth2CommandExecutorFactory.getCommandExecutor()
|
||||||
|
userRemoveFromFollowersApplicationService.execute(
|
||||||
|
RemoveFromFollowers(id.toLong()), executor
|
||||||
|
)
|
||||||
|
return fetchRelationship(id, executor)
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun apiV1AccountsIdUnblockPost(id: String): ResponseEntity<Relationship> {
|
override suspend fun apiV1AccountsIdUnblockPost(id: String): ResponseEntity<Relationship> {
|
||||||
|
@ -106,11 +140,19 @@ class SpringAccountApi(
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun apiV1AccountsIdUnfollowPost(id: String): ResponseEntity<Relationship> {
|
override suspend fun apiV1AccountsIdUnfollowPost(id: String): ResponseEntity<Relationship> {
|
||||||
return super.apiV1AccountsIdUnfollowPost(id)
|
val executor = oauth2CommandExecutorFactory.getCommandExecutor()
|
||||||
|
userUnfollowApplicationService.execute(
|
||||||
|
Unfollow(id.toLong()), executor
|
||||||
|
)
|
||||||
|
return fetchRelationship(id, executor)
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun apiV1AccountsIdUnmutePost(id: String): ResponseEntity<Relationship> {
|
override suspend fun apiV1AccountsIdUnmutePost(id: String): ResponseEntity<Relationship> {
|
||||||
return super.apiV1AccountsIdUnmutePost(id)
|
val executor = oauth2CommandExecutorFactory.getCommandExecutor()
|
||||||
|
userUnmuteApplicationService.execute(
|
||||||
|
Unmute(id.toLong()), executor
|
||||||
|
)
|
||||||
|
return fetchRelationship(id, executor)
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun apiV1AccountsPost(accountsCreateRequest: AccountsCreateRequest): ResponseEntity<Unit> {
|
override suspend fun apiV1AccountsPost(accountsCreateRequest: AccountsCreateRequest): ResponseEntity<Unit> {
|
||||||
|
@ -174,11 +216,19 @@ class SpringAccountApi(
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun apiV1FollowRequestsAccountIdAuthorizePost(accountId: String): ResponseEntity<Relationship> {
|
override suspend fun apiV1FollowRequestsAccountIdAuthorizePost(accountId: String): ResponseEntity<Relationship> {
|
||||||
return super.apiV1FollowRequestsAccountIdAuthorizePost(accountId)
|
val executor = oauth2CommandExecutorFactory.getCommandExecutor()
|
||||||
|
userAcceptFollowRequestApplicationService.execute(
|
||||||
|
AcceptFollowRequest(accountId.toLong()), executor
|
||||||
|
)
|
||||||
|
return fetchRelationship(accountId, executor)
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun apiV1FollowRequestsAccountIdRejectPost(accountId: String): ResponseEntity<Relationship> {
|
override suspend fun apiV1FollowRequestsAccountIdRejectPost(accountId: String): ResponseEntity<Relationship> {
|
||||||
return super.apiV1FollowRequestsAccountIdRejectPost(accountId)
|
val executor = oauth2CommandExecutorFactory.getCommandExecutor()
|
||||||
|
userRejectFollowRequestApplicationService.execute(
|
||||||
|
RejectFollowRequest(accountId.toLong()), executor
|
||||||
|
)
|
||||||
|
return fetchRelationship(accountId, executor)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue