feat: リモートとの不整合の解決を追加

This commit is contained in:
usbharu 2023-12-10 14:32:13 +09:00
parent 0b3c27619e
commit 5b6aa9e4e8
3 changed files with 27 additions and 7 deletions

View File

@ -287,7 +287,7 @@ project.gradle.taskGraph.whenReady {
kover { kover {
excludeSourceSets { excludeSourceSets {
names("aot") names("aot", "e2eTest", "intTest")
} }
} }

View File

@ -3,7 +3,7 @@ package dev.usbharu.hideout.core.service.relationship
interface RelationshipService { interface RelationshipService {
suspend fun followRequest(userId: Long, targetId: Long) suspend fun followRequest(userId: Long, targetId: Long)
suspend fun block(userId: Long, targetId: Long) suspend fun block(userId: Long, targetId: Long)
suspend fun acceptFollowRequest(userId: Long, targetId: Long) suspend fun acceptFollowRequest(userId: Long, targetId: Long, force: Boolean = false)
suspend fun rejectFollowRequest(userId: Long, targetId: Long) suspend fun rejectFollowRequest(userId: Long, targetId: Long)
suspend fun ignoreFollowRequest(userId: Long, targetId: Long) suspend fun ignoreFollowRequest(userId: Long, targetId: Long)
suspend fun unfollow(userId: Long, targetId: Long) suspend fun unfollow(userId: Long, targetId: Long)

View File

@ -63,6 +63,11 @@ class RelationshipServiceImpl(
return return
} }
if (relationship.following) {
logger.debug("SUCCESS User already follow. userId: {} targetId: {}", userId, targetId)
acceptFollowRequest(userId, targetId, true)
return
}
relationshipRepository.save(relationship) relationshipRepository.save(relationship)
@ -100,15 +105,25 @@ class RelationshipServiceImpl(
} }
} }
override suspend fun acceptFollowRequest(userId: Long, targetId: Long) { override suspend fun acceptFollowRequest(userId: Long, targetId: Long, force: Boolean) {
val relationship = relationshipRepository.findByUserIdAndTargetUserId(userId, targetId) val relationship = relationshipRepository.findByUserIdAndTargetUserId(userId, targetId)
val inverseRelationship = relationshipRepository.findByUserIdAndTargetUserId(targetId, userId) ?: Relationship(
userId = targetId,
targetUserId = userId,
following = false,
blocking = false,
muting = false,
followRequest = false,
ignoreFollowRequestFromTarget = false
)
if (relationship == null) { 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: {}", userId, targetId)
return return
} }
if (relationship.followRequest.not()) { 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: {}", userId, targetId)
return return
} }
@ -118,6 +133,11 @@ class RelationshipServiceImpl(
throw IllegalStateException("Cannot accept a follow request from a blocked user. userId: $userId targetId: $targetId") throw IllegalStateException("Cannot accept a follow request from a blocked user. userId: $userId targetId: $targetId")
} }
if (inverseRelationship.blocking) {
logger.warn("FAILED BLocked by user userId: {} targetId: {}", userId, targetId)
throw IllegalStateException("Cannot accept a follow request from a blocking user. userId: $userId targetId: $targetId")
}
val copy = relationship.copy(followRequest = false, following = true, blocking = false) val copy = relationship.copy(followRequest = false, following = true, blocking = false)
relationshipRepository.save(copy) relationshipRepository.save(copy)
@ -143,7 +163,7 @@ class RelationshipServiceImpl(
return return
} }
val copy = relationship.copy(followRequest = false, following = false, blocking = false) val copy = relationship.copy(followRequest = false, following = false)
relationshipRepository.save(copy) relationshipRepository.save(copy)
@ -214,9 +234,9 @@ class RelationshipServiceImpl(
val remoteUser = isRemoteUser(targetId) val remoteUser = isRemoteUser(targetId)
if (remoteUser == null) { if (remoteUser != null) {
val user = userQueryService.findById(userId) val user = userQueryService.findById(userId)
apSendUndoService.sendUndoBlock(user, targetId) apSendUndoService.sendUndoBlock(user, remoteUser)
} }
} }