feat: Instanceの取得に失敗したら仮の情報で保存するように

This commit is contained in:
usbharu 2024-02-27 11:16:59 +09:00
parent 32faf70116
commit 4f084a375b
1 changed files with 60 additions and 43 deletions

View File

@ -37,7 +37,7 @@ interface InstanceService {
class InstanceServiceImpl(
private val instanceRepository: InstanceRepository,
private val resourceResolveService: ResourceResolveService,
@Qualifier("activitypub") private val objectMapper: ObjectMapper
@Qualifier("activitypub") private val objectMapper: ObjectMapper,
) : InstanceService {
override suspend fun fetchInstance(url: String, sharedInbox: String?): Instance {
val u = URL(url)
@ -51,6 +51,9 @@ class InstanceServiceImpl(
logger.info("Instance not found. try fetch instance info. url: {}", resolveInstanceUrl)
try {
val nodeinfoJson = resourceResolveService.resolve("$resolveInstanceUrl/.well-known/nodeinfo").bodyAsText()
val nodeinfo = objectMapper.readValue(nodeinfoJson, Nodeinfo::class.java)
val nodeinfoPathMap = nodeinfo.links.associate { it.rel to it.href }
@ -100,7 +103,21 @@ class InstanceServiceImpl(
}
}
throw IllegalStateException("Nodeinfo aren't found.")
} catch (e: Exception) {
logger.warn("FAILED Fetch Instance", e)
}
return createNewInstance(
InstanceCreateDto(
name = null,
description = null,
url = resolveInstanceUrl,
iconUrl = "$resolveInstanceUrl/favicon.ico",
sharedInbox = null,
software = null,
version = null
)
)
}
override suspend fun createNewInstance(instanceCreateDto: InstanceCreateDto): Instance {