From b641c4b5fb58294a9ef18346fd372f6777199589 Mon Sep 17 00:00:00 2001 From: usbharu <64310155+usbharu@users.noreply.github.com> Date: Sat, 30 Sep 2023 13:26:27 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=B8=8D=E8=A6=81=E3=81=AA?= =?UTF-8?q?=E3=82=AF=E3=83=A9=E3=82=B9=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hideout/config/SpringTransactionConfig.kt | 17 --- .../query/JwtRefreshTokenQueryServiceImpl.kt | 46 -------- .../repository/JwtRefreshTokenRepository.kt | 15 --- .../JwtRefreshTokenRepositoryImpl.kt | 71 ------------- .../hideout/service/user/UserAuthService.kt | 1 - .../service/user/UserAuthServiceImpl.kt | 9 +- .../JwtRefreshTokenRepositoryImplTest.kt | 100 ------------------ 7 files changed, 1 insertion(+), 258 deletions(-) delete mode 100644 src/main/kotlin/dev/usbharu/hideout/config/SpringTransactionConfig.kt delete mode 100644 src/main/kotlin/dev/usbharu/hideout/query/JwtRefreshTokenQueryServiceImpl.kt delete mode 100644 src/main/kotlin/dev/usbharu/hideout/repository/JwtRefreshTokenRepository.kt delete mode 100644 src/main/kotlin/dev/usbharu/hideout/repository/JwtRefreshTokenRepositoryImpl.kt delete mode 100644 src/test/kotlin/dev/usbharu/hideout/repository/JwtRefreshTokenRepositoryImplTest.kt diff --git a/src/main/kotlin/dev/usbharu/hideout/config/SpringTransactionConfig.kt b/src/main/kotlin/dev/usbharu/hideout/config/SpringTransactionConfig.kt deleted file mode 100644 index 3edcc581..00000000 --- a/src/main/kotlin/dev/usbharu/hideout/config/SpringTransactionConfig.kt +++ /dev/null @@ -1,17 +0,0 @@ -package dev.usbharu.hideout.config - -import org.jetbrains.exposed.spring.SpringTransactionManager -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration -import org.springframework.transaction.PlatformTransactionManager -import org.springframework.transaction.annotation.EnableTransactionManagement -import org.springframework.transaction.annotation.TransactionManagementConfigurer -import javax.sql.DataSource - -@Configuration -@EnableTransactionManagement -class SpringTransactionConfig(val datasource: DataSource) : TransactionManagementConfigurer { - @Bean - override fun annotationDrivenTransactionManager(): PlatformTransactionManager = - SpringTransactionManager(datasource) -} diff --git a/src/main/kotlin/dev/usbharu/hideout/query/JwtRefreshTokenQueryServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/query/JwtRefreshTokenQueryServiceImpl.kt deleted file mode 100644 index a3d890ce..00000000 --- a/src/main/kotlin/dev/usbharu/hideout/query/JwtRefreshTokenQueryServiceImpl.kt +++ /dev/null @@ -1,46 +0,0 @@ -package dev.usbharu.hideout.query - -import dev.usbharu.hideout.domain.model.hideout.entity.JwtRefreshToken -import dev.usbharu.hideout.exception.FailedToGetResourcesException -import dev.usbharu.hideout.repository.JwtRefreshTokens -import dev.usbharu.hideout.repository.toJwtRefreshToken -import dev.usbharu.hideout.util.singleOr -import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq -import org.jetbrains.exposed.sql.deleteAll -import org.jetbrains.exposed.sql.deleteWhere -import org.jetbrains.exposed.sql.select -import org.springframework.stereotype.Repository - -@Repository -class JwtRefreshTokenQueryServiceImpl : JwtRefreshTokenQueryService { - override suspend fun findById(id: Long): JwtRefreshToken = - JwtRefreshTokens.select { JwtRefreshTokens.id.eq(id) } - .singleOr { FailedToGetResourcesException("id: $id is a duplicate or does not exist.", it) } - .toJwtRefreshToken() - - override suspend fun findByToken(token: String): JwtRefreshToken = - JwtRefreshTokens.select { JwtRefreshTokens.refreshToken.eq(token) } - .singleOr { FailedToGetResourcesException("token: $token is a duplicate or does not exist.", it) } - .toJwtRefreshToken() - - override suspend fun findByUserId(userId: Long): JwtRefreshToken = - JwtRefreshTokens.select { JwtRefreshTokens.userId.eq(userId) } - .singleOr { FailedToGetResourcesException("userId: $userId is a duplicate or does not exist.", it) } - .toJwtRefreshToken() - - override suspend fun deleteById(id: Long) { - JwtRefreshTokens.deleteWhere { JwtRefreshTokens.id eq id } - } - - override suspend fun deleteByToken(token: String) { - JwtRefreshTokens.deleteWhere { refreshToken eq token } - } - - override suspend fun deleteByUserId(userId: Long) { - JwtRefreshTokens.deleteWhere { JwtRefreshTokens.userId eq userId } - } - - override suspend fun deleteAll() { - JwtRefreshTokens.deleteAll() - } -} diff --git a/src/main/kotlin/dev/usbharu/hideout/repository/JwtRefreshTokenRepository.kt b/src/main/kotlin/dev/usbharu/hideout/repository/JwtRefreshTokenRepository.kt deleted file mode 100644 index 81c6aa35..00000000 --- a/src/main/kotlin/dev/usbharu/hideout/repository/JwtRefreshTokenRepository.kt +++ /dev/null @@ -1,15 +0,0 @@ -package dev.usbharu.hideout.repository - -import dev.usbharu.hideout.domain.model.hideout.entity.JwtRefreshToken -import org.springframework.stereotype.Repository - -@Repository -interface JwtRefreshTokenRepository { - suspend fun generateId(): Long - - suspend fun save(token: JwtRefreshToken) - - suspend fun findById(id: Long): JwtRefreshToken? - - suspend fun delete(token: JwtRefreshToken) -} diff --git a/src/main/kotlin/dev/usbharu/hideout/repository/JwtRefreshTokenRepositoryImpl.kt b/src/main/kotlin/dev/usbharu/hideout/repository/JwtRefreshTokenRepositoryImpl.kt deleted file mode 100644 index 234703e9..00000000 --- a/src/main/kotlin/dev/usbharu/hideout/repository/JwtRefreshTokenRepositoryImpl.kt +++ /dev/null @@ -1,71 +0,0 @@ -package dev.usbharu.hideout.repository - -import dev.usbharu.hideout.domain.model.hideout.entity.JwtRefreshToken -import dev.usbharu.hideout.service.core.IdGenerateService -import org.jetbrains.exposed.sql.* -import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq -import org.jetbrains.exposed.sql.transactions.transaction -import org.springframework.stereotype.Repository -import java.time.Instant - -@Repository -class JwtRefreshTokenRepositoryImpl( - private val database: Database, - private val idGenerateService: IdGenerateService -) : - JwtRefreshTokenRepository { - - init { - transaction(database) { - SchemaUtils.create(JwtRefreshTokens) - SchemaUtils.createMissingTablesAndColumns(JwtRefreshTokens) - } - } - - override suspend fun generateId(): Long = idGenerateService.generateId() - - override suspend fun save(token: JwtRefreshToken) { - if (JwtRefreshTokens.select { JwtRefreshTokens.id.eq(token.id) }.empty()) { - JwtRefreshTokens.insert { - it[id] = token.id - it[userId] = token.userId - it[refreshToken] = token.refreshToken - it[createdAt] = token.createdAt.toEpochMilli() - it[expiresAt] = token.expiresAt.toEpochMilli() - } - } else { - JwtRefreshTokens.update({ JwtRefreshTokens.id eq token.id }) { - it[userId] = token.userId - it[refreshToken] = token.refreshToken - it[createdAt] = token.createdAt.toEpochMilli() - it[expiresAt] = token.expiresAt.toEpochMilli() - } - } - } - - override suspend fun findById(id: Long): JwtRefreshToken? = - JwtRefreshTokens.select { JwtRefreshTokens.id.eq(id) }.singleOrNull()?.toJwtRefreshToken() - - override suspend fun delete(token: JwtRefreshToken) { - JwtRefreshTokens.deleteWhere { id eq token.id } - } -} - -fun ResultRow.toJwtRefreshToken(): JwtRefreshToken { - return JwtRefreshToken( - this[JwtRefreshTokens.id], - this[JwtRefreshTokens.userId], - this[JwtRefreshTokens.refreshToken], - Instant.ofEpochMilli(this[JwtRefreshTokens.createdAt]), - Instant.ofEpochMilli(this[JwtRefreshTokens.expiresAt]) - ) -} - -object JwtRefreshTokens : Table("jwt_refresh_tokens") { - val id = long("id") - val userId = long("user_id") - val refreshToken = varchar("refresh_token", 1000) - val createdAt = long("created_at") - val expiresAt = long("expires_at") - override val primaryKey = PrimaryKey(id) -} diff --git a/src/main/kotlin/dev/usbharu/hideout/service/user/UserAuthService.kt b/src/main/kotlin/dev/usbharu/hideout/service/user/UserAuthService.kt index 9630f8fa..556fb618 100644 --- a/src/main/kotlin/dev/usbharu/hideout/service/user/UserAuthService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/service/user/UserAuthService.kt @@ -11,5 +11,4 @@ interface UserAuthService { suspend fun generateKeyPair(): KeyPair - suspend fun verifyAccount(username: String, password: String): Boolean } diff --git a/src/main/kotlin/dev/usbharu/hideout/service/user/UserAuthServiceImpl.kt b/src/main/kotlin/dev/usbharu/hideout/service/user/UserAuthServiceImpl.kt index b817cb35..f059db4a 100644 --- a/src/main/kotlin/dev/usbharu/hideout/service/user/UserAuthServiceImpl.kt +++ b/src/main/kotlin/dev/usbharu/hideout/service/user/UserAuthServiceImpl.kt @@ -1,6 +1,5 @@ package dev.usbharu.hideout.service.user -import dev.usbharu.hideout.config.ApplicationConfig import dev.usbharu.hideout.query.UserQueryService import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder import org.springframework.stereotype.Service @@ -9,8 +8,7 @@ import java.util.* @Service class UserAuthServiceImpl( - val userQueryService: UserQueryService, - private val applicationConfig: ApplicationConfig + val userQueryService: UserQueryService ) : UserAuthService { override fun hash(password: String): String = BCryptPasswordEncoder().encode(password) @@ -20,11 +18,6 @@ class UserAuthServiceImpl( return true } - override suspend fun verifyAccount(username: String, password: String): Boolean { - val userEntity = userQueryService.findByNameAndDomain(username, applicationConfig.url.host) - return userEntity.password == hash(password) - } - override suspend fun generateKeyPair(): KeyPair { val keyPairGenerator = KeyPairGenerator.getInstance("RSA") keyPairGenerator.initialize(keySize) diff --git a/src/test/kotlin/dev/usbharu/hideout/repository/JwtRefreshTokenRepositoryImplTest.kt b/src/test/kotlin/dev/usbharu/hideout/repository/JwtRefreshTokenRepositoryImplTest.kt deleted file mode 100644 index ca726753..00000000 --- a/src/test/kotlin/dev/usbharu/hideout/repository/JwtRefreshTokenRepositoryImplTest.kt +++ /dev/null @@ -1,100 +0,0 @@ -@file:OptIn(ExperimentalCoroutinesApi::class, ExperimentalCoroutinesApi::class) - -package dev.usbharu.hideout.repository - -import dev.usbharu.hideout.domain.model.hideout.entity.JwtRefreshToken -import dev.usbharu.hideout.service.core.IdGenerateService -import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.test.runTest -import org.jetbrains.exposed.sql.Database -import org.jetbrains.exposed.sql.SchemaUtils -import org.jetbrains.exposed.sql.insert -import org.jetbrains.exposed.sql.select -import org.jetbrains.exposed.sql.transactions.TransactionManager -import org.jetbrains.exposed.sql.transactions.experimental.newSuspendedTransaction -import org.jetbrains.exposed.sql.transactions.transaction -import org.junit.jupiter.api.AfterEach -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test -import java.time.Clock -import java.time.Instant -import java.time.ZoneId -import java.time.temporal.ChronoUnit -import kotlin.test.assertEquals - -class JwtRefreshTokenRepositoryImplTest { - - lateinit var db: Database - - @BeforeEach - fun setUp() { - db = Database.connect("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1") - transaction(db) { - SchemaUtils.create(JwtRefreshTokens) - } - } - - @AfterEach - fun tearDown() { - transaction(db) { - SchemaUtils.drop(JwtRefreshTokens) - } - TransactionManager.closeAndUnregister(db) - } - - @Test - fun `save 存在しない場合はinsertする`() = runTest { - val repository = JwtRefreshTokenRepositoryImpl( - db, - object : IdGenerateService { - override suspend fun generateId(): Long { - TODO("Not yet implemented") - } - } - ) - val now = Instant.now(Clock.tickMillis(ZoneId.systemDefault())) - val expiresAt = now.plus(10, ChronoUnit.MINUTES) - - val expect = JwtRefreshToken(1L, 2L, "refreshToken", now, expiresAt) - newSuspendedTransaction { - repository.save(expect) - val actual = repository.findById(1L) - assertEquals(expect, actual) - } - } - - @Test - fun `save 存在する場合はupdateする`() = runTest { - val repository = JwtRefreshTokenRepositoryImpl( - db, - object : IdGenerateService { - override suspend fun generateId(): Long { - TODO("Not yet implemented") - } - } - ) - newSuspendedTransaction { - JwtRefreshTokens.insert { - it[id] = 1L - it[userId] = 2L - it[refreshToken] = "refreshToken1" - it[createdAt] = Instant.now().toEpochMilli() - it[expiresAt] = Instant.now().plus(10, ChronoUnit.MINUTES).toEpochMilli() - } - repository.save( - JwtRefreshToken( - id = 1L, - userId = 2L, - refreshToken = "refreshToken2", - createdAt = Instant.now(), - expiresAt = Instant.now().plus(10, ChronoUnit.MINUTES) - ) - ) - } - - transaction { - val toJwtRefreshToken = JwtRefreshTokens.select { JwtRefreshTokens.id.eq(1L) }.single().toJwtRefreshToken() - assertEquals("refreshToken2", toJwtRefreshToken.refreshToken) - } - } -}