mirror of https://github.com/usbharu/Hideout.git
Merge pull request #13 from usbharu/feature/di-with-annotation
Feature/di with annotation
This commit is contained in:
commit
20907ca1bc
|
@ -12,6 +12,7 @@ plugins {
|
|||
id("io.ktor.plugin") version "2.3.0"
|
||||
id("org.graalvm.buildtools.native") version "0.9.21"
|
||||
id("io.gitlab.arturbosch.detekt") version "1.22.0"
|
||||
id("com.google.devtools.ksp") version "1.8.21-1.0.11"
|
||||
// id("org.jetbrains.kotlin.plugin.serialization") version "1.8.10"
|
||||
}
|
||||
|
||||
|
@ -57,6 +58,10 @@ kotlin {
|
|||
}
|
||||
}
|
||||
|
||||
sourceSets.main {
|
||||
java.srcDirs("build/generated/ksp/main/kotlin")
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("io.ktor:ktor-server-core-jvm:$ktor_version")
|
||||
implementation("io.ktor:ktor-server-auth:$ktor_version")
|
||||
|
@ -80,6 +85,10 @@ dependencies {
|
|||
implementation("io.insert-koin:koin-core:$koin_version")
|
||||
implementation("io.insert-koin:koin-ktor:$koin_version")
|
||||
implementation("io.insert-koin:koin-logger-slf4j:$koin_version")
|
||||
implementation("io.insert-koin:koin-annotations:1.2.0")
|
||||
ksp("io.insert-koin:koin-ksp-compiler:1.2.0")
|
||||
|
||||
|
||||
implementation("io.ktor:ktor-client-logging-jvm:$ktor_version")
|
||||
implementation("io.ktor:ktor-server-host-common-jvm:$ktor_version")
|
||||
implementation("io.ktor:ktor-server-status-pages-jvm:$ktor_version")
|
||||
|
|
|
@ -10,18 +10,15 @@ import dev.usbharu.hideout.config.ConfigData
|
|||
import dev.usbharu.hideout.domain.model.job.DeliverPostJob
|
||||
import dev.usbharu.hideout.domain.model.job.ReceiveFollowJob
|
||||
import dev.usbharu.hideout.plugins.*
|
||||
import dev.usbharu.hideout.repository.*
|
||||
import dev.usbharu.hideout.repository.IUserRepository
|
||||
import dev.usbharu.hideout.routing.register
|
||||
import dev.usbharu.hideout.service.*
|
||||
import dev.usbharu.hideout.service.activitypub.*
|
||||
import dev.usbharu.hideout.service.activitypub.ActivityPubService
|
||||
import dev.usbharu.hideout.service.activitypub.ActivityPubUserService
|
||||
import dev.usbharu.hideout.service.impl.IUserService
|
||||
import dev.usbharu.hideout.service.impl.PostService
|
||||
import dev.usbharu.hideout.service.impl.UserAuthService
|
||||
import dev.usbharu.hideout.service.impl.UserService
|
||||
import dev.usbharu.hideout.service.job.JobQueueParentService
|
||||
import dev.usbharu.hideout.service.job.KJobJobQueueParentService
|
||||
import dev.usbharu.hideout.service.signature.HttpSignatureVerifyService
|
||||
import dev.usbharu.hideout.service.signature.HttpSignatureVerifyServiceImpl
|
||||
import dev.usbharu.kjob.exposed.ExposedKJob
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.engine.cio.*
|
||||
|
@ -30,6 +27,7 @@ import io.ktor.server.application.*
|
|||
import kjob.core.kjob
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.jetbrains.exposed.sql.Database
|
||||
import org.koin.ksp.generated.module
|
||||
import org.koin.ktor.ext.inject
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
|
@ -59,10 +57,6 @@ fun Application.parent() {
|
|||
password = property("hideout.database.password")
|
||||
)
|
||||
}
|
||||
|
||||
single<IUserRepository> { UserRepository(get(), get()) }
|
||||
single<IUserAuthService> { UserAuthService(get()) }
|
||||
single<HttpSignatureVerifyService> { HttpSignatureVerifyServiceImpl(get()) }
|
||||
single<JobQueueParentService> {
|
||||
val kJobJobQueueService = KJobJobQueueParentService(get())
|
||||
kJobJobQueueService.init(emptyList())
|
||||
|
@ -79,19 +73,7 @@ fun Application.parent() {
|
|||
}
|
||||
}
|
||||
}
|
||||
single<ActivityPubFollowService> { ActivityPubFollowServiceImpl(get(), get(), get(), get()) }
|
||||
single<ActivityPubService> { ActivityPubServiceImpl(get(), get()) }
|
||||
single<IUserService> { UserService(get(), get()) }
|
||||
single<ActivityPubUserService> { ActivityPubUserServiceImpl(get(), get()) }
|
||||
single<ActivityPubNoteService> { ActivityPubNoteServiceImpl(get(), get(), get()) }
|
||||
single<IPostService> { PostService(get(), get()) }
|
||||
single<IPostRepository> { PostRepositoryImpl(get(), get()) }
|
||||
single<IdGenerateService> { TwitterSnowflakeIdGenerateService }
|
||||
single<IMetaRepository> { MetaRepositoryImpl(get()) }
|
||||
single<IServerInitialiseService> { ServerInitialiseServiceImpl(get()) }
|
||||
single<IJwtRefreshTokenRepository> { JwtRefreshTokenRepositoryImpl(get(), get()) }
|
||||
single<IMetaService> { MetaServiceImpl(get()) }
|
||||
single<IJwtService> { JwtServiceImpl(get(), get(), get()) }
|
||||
single<JwkProvider> {
|
||||
JwkProviderBuilder(Config.configData.url).cached(
|
||||
10,
|
||||
|
@ -101,7 +83,7 @@ fun Application.parent() {
|
|||
.rateLimited(10, 1, TimeUnit.MINUTES).build()
|
||||
}
|
||||
}
|
||||
configureKoin(module)
|
||||
configureKoin(module, HideoutModule().module)
|
||||
runBlocking {
|
||||
inject<IServerInitialiseService>().value.init()
|
||||
}
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
package dev.usbharu.hideout
|
||||
|
||||
import org.koin.core.annotation.ComponentScan
|
||||
import org.koin.core.annotation.Module
|
||||
|
||||
@Module
|
||||
@ComponentScan
|
||||
class HideoutModule
|
|
@ -5,9 +5,9 @@ import org.koin.core.module.Module
|
|||
import org.koin.ktor.plugin.Koin
|
||||
import org.koin.logger.slf4jLogger
|
||||
|
||||
fun Application.configureKoin(module: Module) {
|
||||
fun Application.configureKoin(vararg module: Module) {
|
||||
install(Koin) {
|
||||
slf4jLogger()
|
||||
modules(module)
|
||||
modules(*module)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,8 +7,10 @@ import org.jetbrains.exposed.sql.*
|
|||
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
|
||||
import org.jetbrains.exposed.sql.transactions.experimental.newSuspendedTransaction
|
||||
import org.jetbrains.exposed.sql.transactions.transaction
|
||||
import org.koin.core.annotation.Single
|
||||
import java.time.Instant
|
||||
|
||||
@Single
|
||||
class JwtRefreshTokenRepositoryImpl(
|
||||
private val database: Database,
|
||||
private val idGenerateService: IdGenerateService
|
||||
|
|
|
@ -5,8 +5,10 @@ import kotlinx.coroutines.Dispatchers
|
|||
import org.jetbrains.exposed.sql.*
|
||||
import org.jetbrains.exposed.sql.transactions.experimental.newSuspendedTransaction
|
||||
import org.jetbrains.exposed.sql.transactions.transaction
|
||||
import org.koin.core.annotation.Single
|
||||
import java.util.*
|
||||
|
||||
@Single
|
||||
class MetaRepositoryImpl(private val database: Database) : IMetaRepository {
|
||||
|
||||
init {
|
||||
|
|
|
@ -11,7 +11,9 @@ import org.jetbrains.exposed.sql.*
|
|||
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
|
||||
import org.jetbrains.exposed.sql.transactions.experimental.newSuspendedTransaction
|
||||
import org.jetbrains.exposed.sql.transactions.transaction
|
||||
import org.koin.core.annotation.Single
|
||||
|
||||
@Single
|
||||
class PostRepositoryImpl(database: Database, private val idGenerateService: IdGenerateService) : IPostRepository {
|
||||
|
||||
init {
|
||||
|
|
|
@ -8,8 +8,10 @@ import org.jetbrains.exposed.sql.*
|
|||
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
|
||||
import org.jetbrains.exposed.sql.transactions.experimental.newSuspendedTransaction
|
||||
import org.jetbrains.exposed.sql.transactions.transaction
|
||||
import org.koin.core.annotation.Single
|
||||
import java.time.Instant
|
||||
|
||||
@Single
|
||||
class UserRepository(private val database: Database, private val idGenerateService: IdGenerateService) :
|
||||
IUserRepository {
|
||||
init {
|
||||
|
|
|
@ -14,11 +14,13 @@ import dev.usbharu.hideout.util.RsaUtil
|
|||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.async
|
||||
import org.koin.core.annotation.Single
|
||||
import java.time.Instant
|
||||
import java.time.temporal.ChronoUnit
|
||||
import java.util.*
|
||||
|
||||
@Suppress("InjectDispatcher")
|
||||
@Single
|
||||
class JwtServiceImpl(
|
||||
private val metaService: IMetaService,
|
||||
private val refreshTokenRepository: IJwtRefreshTokenRepository,
|
||||
|
|
|
@ -4,7 +4,9 @@ import dev.usbharu.hideout.domain.model.hideout.entity.Jwt
|
|||
import dev.usbharu.hideout.domain.model.hideout.entity.Meta
|
||||
import dev.usbharu.hideout.exception.NotInitException
|
||||
import dev.usbharu.hideout.repository.IMetaRepository
|
||||
import org.koin.core.annotation.Single
|
||||
|
||||
@Single
|
||||
class MetaServiceImpl(private val metaRepository: IMetaRepository) : IMetaService {
|
||||
override suspend fun getMeta(): Meta = metaRepository.get() ?: throw NotInitException("Meta is null")
|
||||
|
||||
|
|
|
@ -4,11 +4,13 @@ import dev.usbharu.hideout.domain.model.hideout.entity.Jwt
|
|||
import dev.usbharu.hideout.domain.model.hideout.entity.Meta
|
||||
import dev.usbharu.hideout.repository.IMetaRepository
|
||||
import dev.usbharu.hideout.util.ServerUtil
|
||||
import org.koin.core.annotation.Single
|
||||
import org.slf4j.Logger
|
||||
import org.slf4j.LoggerFactory
|
||||
import java.security.KeyPairGenerator
|
||||
import java.util.*
|
||||
|
||||
@Single
|
||||
class ServerInitialiseServiceImpl(private val metaRepository: IMetaRepository) : IServerInitialiseService {
|
||||
|
||||
val logger: Logger = LoggerFactory.getLogger(ServerInitialiseServiceImpl::class.java)
|
||||
|
|
|
@ -13,7 +13,9 @@ import dev.usbharu.hideout.service.job.JobQueueParentService
|
|||
import io.ktor.client.*
|
||||
import io.ktor.http.*
|
||||
import kjob.core.job.JobProps
|
||||
import org.koin.core.annotation.Single
|
||||
|
||||
@Single
|
||||
class ActivityPubFollowServiceImpl(
|
||||
private val jobQueueParentService: JobQueueParentService,
|
||||
private val activityPubUserService: ActivityPubUserService,
|
||||
|
|
|
@ -11,9 +11,11 @@ import dev.usbharu.hideout.service.impl.IUserService
|
|||
import dev.usbharu.hideout.service.job.JobQueueParentService
|
||||
import io.ktor.client.*
|
||||
import kjob.core.job.JobProps
|
||||
import org.koin.core.annotation.Single
|
||||
import org.slf4j.LoggerFactory
|
||||
import java.time.Instant
|
||||
|
||||
@Single
|
||||
class ActivityPubNoteServiceImpl(
|
||||
private val httpClient: HttpClient,
|
||||
private val jobQueueParentService: JobQueueParentService,
|
||||
|
|
|
@ -10,9 +10,11 @@ import dev.usbharu.hideout.domain.model.job.ReceiveFollowJob
|
|||
import dev.usbharu.hideout.exception.JsonParseException
|
||||
import kjob.core.dsl.JobContextWithProps
|
||||
import kjob.core.job.JobProps
|
||||
import org.koin.core.annotation.Single
|
||||
import org.slf4j.Logger
|
||||
import org.slf4j.LoggerFactory
|
||||
|
||||
@Single
|
||||
class ActivityPubServiceImpl(
|
||||
private val activityPubFollowService: ActivityPubFollowService,
|
||||
private val activityPubNoteService: ActivityPubNoteService
|
||||
|
|
|
@ -15,7 +15,9 @@ import io.ktor.client.*
|
|||
import io.ktor.client.request.*
|
||||
import io.ktor.client.statement.*
|
||||
import io.ktor.http.*
|
||||
import org.koin.core.annotation.Single
|
||||
|
||||
@Single
|
||||
class ActivityPubUserServiceImpl(
|
||||
private val userService: IUserService,
|
||||
private val httpClient: HttpClient
|
||||
|
|
|
@ -4,8 +4,10 @@ import dev.usbharu.hideout.domain.model.Post
|
|||
import dev.usbharu.hideout.repository.IPostRepository
|
||||
import dev.usbharu.hideout.service.IPostService
|
||||
import dev.usbharu.hideout.service.activitypub.ActivityPubNoteService
|
||||
import org.koin.core.annotation.Single
|
||||
import org.slf4j.LoggerFactory
|
||||
|
||||
@Single
|
||||
class PostService(
|
||||
private val postRepository: IPostRepository,
|
||||
private val activityPubNoteService: ActivityPubNoteService
|
||||
|
|
|
@ -4,9 +4,11 @@ import dev.usbharu.hideout.config.Config
|
|||
import dev.usbharu.hideout.repository.IUserRepository
|
||||
import dev.usbharu.hideout.service.IUserAuthService
|
||||
import io.ktor.util.*
|
||||
import org.koin.core.annotation.Single
|
||||
import java.security.*
|
||||
import java.util.*
|
||||
|
||||
@Single
|
||||
class UserAuthService(
|
||||
val userRepository: IUserRepository
|
||||
) : IUserAuthService {
|
||||
|
|
|
@ -7,9 +7,11 @@ import dev.usbharu.hideout.domain.model.hideout.entity.User
|
|||
import dev.usbharu.hideout.exception.UserNotFoundException
|
||||
import dev.usbharu.hideout.repository.IUserRepository
|
||||
import dev.usbharu.hideout.service.IUserAuthService
|
||||
import org.koin.core.annotation.Single
|
||||
import java.lang.Integer.min
|
||||
import java.time.Instant
|
||||
|
||||
@Single
|
||||
class UserService(private val userRepository: IUserRepository, private val userAuthService: IUserAuthService) :
|
||||
IUserService {
|
||||
|
||||
|
|
|
@ -3,8 +3,10 @@ package dev.usbharu.hideout.service.signature
|
|||
import dev.usbharu.hideout.plugins.KtorKeyMap
|
||||
import dev.usbharu.hideout.repository.IUserRepository
|
||||
import io.ktor.http.*
|
||||
import org.koin.core.annotation.Single
|
||||
import tech.barbero.http.message.signing.SignatureHeaderVerifier
|
||||
|
||||
@Single
|
||||
class HttpSignatureVerifyServiceImpl(private val userAuthService: IUserRepository) : HttpSignatureVerifyService {
|
||||
override fun verify(headers: Headers): Boolean {
|
||||
val build = SignatureHeaderVerifier.builder().keyMap(KtorKeyMap(userAuthService)).build()
|
||||
|
|
Loading…
Reference in New Issue