mirror of https://github.com/usbharu/Hideout.git
				
				
				
			feat: アノテーションでDIの設定をするように
This commit is contained in:
		
							parent
							
								
									208d63e9cf
								
							
						
					
					
						commit
						408f8a8ceb
					
				|  | @ -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