Hideout/src/main/kotlin/dev/usbharu/hideout/service/api/NoteApApiServiceImpl.kt

38 lines
1.3 KiB
Kotlin

package dev.usbharu.hideout.service.api
import dev.usbharu.hideout.domain.model.ap.Note
import dev.usbharu.hideout.domain.model.hideout.entity.Visibility
import dev.usbharu.hideout.query.FollowerQueryService
import dev.usbharu.hideout.query.activitypub.NoteQueryService
import dev.usbharu.hideout.service.core.Transaction
import org.springframework.stereotype.Service
@Service
class NoteApApiServiceImpl(
private val noteQueryService: NoteQueryService,
private val followerQueryService: FollowerQueryService,
private val transaction: Transaction
) : NoteApApiService {
override suspend fun getNote(postId: Long, userId: Long?): Note? = transaction.transaction {
val findById = noteQueryService.findById(postId)
when (findById.second.visibility) {
Visibility.PUBLIC, Visibility.UNLISTED -> {
return@transaction findById.first
}
Visibility.FOLLOWERS -> {
if (userId == null) {
return@transaction null
}
if (followerQueryService.alreadyFollow(findById.second.userId, userId).not()) {
return@transaction null
}
return@transaction findById.first
}
Visibility.DIRECT -> return@transaction null
}
}
}