mirror of https://github.com/usbharu/Hideout.git
feat: Userのマッピングを追加
This commit is contained in:
parent
b11dc9f7b0
commit
fe38cd93ef
|
@ -19,7 +19,7 @@ class PostQueryServiceImpl(
|
||||||
Posts.leftJoin(PostsMedia)
|
Posts.leftJoin(PostsMedia)
|
||||||
.select { Posts.id eq id }
|
.select { Posts.id eq id }
|
||||||
.singleOr { FailedToGetResourcesException("id: $id is duplicate or does not exist.", it) }
|
.singleOr { FailedToGetResourcesException("id: $id is duplicate or does not exist.", it) }
|
||||||
.let(postResultRowMapper::map)!!
|
.let(postResultRowMapper::map)
|
||||||
|
|
||||||
override suspend fun findByUrl(url: String): Post =
|
override suspend fun findByUrl(url: String): Post =
|
||||||
Posts.leftJoin(PostsMedia)
|
Posts.leftJoin(PostsMedia)
|
||||||
|
|
|
@ -2,8 +2,9 @@ package dev.usbharu.hideout.query
|
||||||
|
|
||||||
import dev.usbharu.hideout.domain.model.hideout.entity.User
|
import dev.usbharu.hideout.domain.model.hideout.entity.User
|
||||||
import dev.usbharu.hideout.exception.FailedToGetResourcesException
|
import dev.usbharu.hideout.exception.FailedToGetResourcesException
|
||||||
|
import dev.usbharu.hideout.repository.QueryMapper
|
||||||
|
import dev.usbharu.hideout.repository.ResultRowMapper
|
||||||
import dev.usbharu.hideout.repository.Users
|
import dev.usbharu.hideout.repository.Users
|
||||||
import dev.usbharu.hideout.repository.toUser
|
|
||||||
import dev.usbharu.hideout.util.singleOr
|
import dev.usbharu.hideout.util.singleOr
|
||||||
import org.jetbrains.exposed.sql.and
|
import org.jetbrains.exposed.sql.and
|
||||||
import org.jetbrains.exposed.sql.select
|
import org.jetbrains.exposed.sql.select
|
||||||
|
@ -12,17 +13,22 @@ import org.slf4j.LoggerFactory
|
||||||
import org.springframework.stereotype.Repository
|
import org.springframework.stereotype.Repository
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
class UserQueryServiceImpl : UserQueryService {
|
class UserQueryServiceImpl(
|
||||||
|
private val userResultRowMapper: ResultRowMapper<User>,
|
||||||
|
private val userQueryMapper: QueryMapper<User>
|
||||||
|
) : UserQueryService {
|
||||||
|
|
||||||
private val logger = LoggerFactory.getLogger(UserQueryServiceImpl::class.java)
|
private val logger = LoggerFactory.getLogger(UserQueryServiceImpl::class.java)
|
||||||
|
|
||||||
override suspend fun findAll(limit: Int, offset: Long): List<User> =
|
override suspend fun findAll(limit: Int, offset: Long): List<User> =
|
||||||
Users.selectAll().limit(limit, offset).map { it.toUser() }
|
Users.selectAll().limit(limit, offset).let(userQueryMapper::map)
|
||||||
|
|
||||||
override suspend fun findById(id: Long): User = Users.select { Users.id eq id }
|
override suspend fun findById(id: Long): User = Users.select { Users.id eq id }
|
||||||
.singleOr { FailedToGetResourcesException("id: $id is duplicate or does not exist.", it) }.toUser()
|
.singleOr { FailedToGetResourcesException("id: $id is duplicate or does not exist.", it) }
|
||||||
|
.let(userResultRowMapper::map)
|
||||||
|
|
||||||
override suspend fun findByName(name: String): List<User> = Users.select { Users.name eq name }.map { it.toUser() }
|
override suspend fun findByName(name: String): List<User> =
|
||||||
|
Users.select { Users.name eq name }.let(userQueryMapper::map)
|
||||||
|
|
||||||
override suspend fun findByNameAndDomain(name: String, domain: String): User =
|
override suspend fun findByNameAndDomain(name: String, domain: String): User =
|
||||||
Users
|
Users
|
||||||
|
@ -30,17 +36,17 @@ class UserQueryServiceImpl : UserQueryService {
|
||||||
.singleOr {
|
.singleOr {
|
||||||
FailedToGetResourcesException("name: $name,domain: $domain is duplicate or does not exist.", it)
|
FailedToGetResourcesException("name: $name,domain: $domain is duplicate or does not exist.", it)
|
||||||
}
|
}
|
||||||
.toUser()
|
.let(userResultRowMapper::map)
|
||||||
|
|
||||||
override suspend fun findByUrl(url: String): User {
|
override suspend fun findByUrl(url: String): User {
|
||||||
logger.trace("findByUrl url: $url")
|
logger.trace("findByUrl url: $url")
|
||||||
return Users.select { Users.url eq url }
|
return Users.select { Users.url eq url }
|
||||||
.singleOr { FailedToGetResourcesException("url: $url is duplicate or does not exist.", it) }
|
.singleOr { FailedToGetResourcesException("url: $url is duplicate or does not exist.", it) }
|
||||||
.toUser()
|
.let(userResultRowMapper::map)
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun findByIds(ids: List<Long>): List<User> =
|
override suspend fun findByIds(ids: List<Long>): List<User> =
|
||||||
Users.select { Users.id inList ids }.map { it.toUser() }
|
Users.select { Users.id inList ids }.let(userQueryMapper::map)
|
||||||
|
|
||||||
override suspend fun existByNameAndDomain(name: String, domain: String): Boolean =
|
override suspend fun existByNameAndDomain(name: String, domain: String): Boolean =
|
||||||
Users.select { Users.name eq name and (Users.domain eq domain) }.empty().not()
|
Users.select { Users.name eq name and (Users.domain eq domain) }.empty().not()
|
||||||
|
@ -48,6 +54,6 @@ class UserQueryServiceImpl : UserQueryService {
|
||||||
override suspend fun findByKeyId(keyId: String): User {
|
override suspend fun findByKeyId(keyId: String): User {
|
||||||
return Users.select { Users.keyId eq keyId }
|
return Users.select { Users.keyId eq keyId }
|
||||||
.singleOr { FailedToGetResourcesException("keyId: $keyId is duplicate or does not exist.", it) }
|
.singleOr { FailedToGetResourcesException("keyId: $keyId is duplicate or does not exist.", it) }
|
||||||
.toUser()
|
.let(userResultRowMapper::map)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ class PostQueryMapper(private val postResultRowMapper: ResultRowMapper<Post>) :
|
||||||
return query.groupBy { it[Posts.id] }
|
return query.groupBy { it[Posts.id] }
|
||||||
.map { it.value }
|
.map { it.value }
|
||||||
.map {
|
.map {
|
||||||
it.first().let(postResultRowMapper::map)!!
|
it.first().let(postResultRowMapper::map)
|
||||||
.copy(mediaIds = it.mapNotNull { it.getOrNull(PostsMedia.mediaId) })
|
.copy(mediaIds = it.mapNotNull { it.getOrNull(PostsMedia.mediaId) })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,5 +3,5 @@ package dev.usbharu.hideout.repository
|
||||||
import org.jetbrains.exposed.sql.ResultRow
|
import org.jetbrains.exposed.sql.ResultRow
|
||||||
|
|
||||||
interface ResultRowMapper<T> {
|
interface ResultRowMapper<T> {
|
||||||
fun map(resultRow: ResultRow): T?
|
fun map(resultRow: ResultRow): T
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
package dev.usbharu.hideout.repository
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.domain.model.hideout.entity.User
|
||||||
|
import org.jetbrains.exposed.sql.Query
|
||||||
|
import org.springframework.stereotype.Component
|
||||||
|
|
||||||
|
@Component
|
||||||
|
class UserQueryMapper(private val userResultRowMapper: ResultRowMapper<User>) : QueryMapper<User> {
|
||||||
|
override fun map(query: Query): List<User> {
|
||||||
|
return query.map(userResultRowMapper::map)
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,7 +9,10 @@ import org.springframework.stereotype.Repository
|
||||||
import java.time.Instant
|
import java.time.Instant
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
class UserRepositoryImpl(private val idGenerateService: IdGenerateService) :
|
class UserRepositoryImpl(
|
||||||
|
private val idGenerateService: IdGenerateService,
|
||||||
|
private val userResultRowMapper: ResultRowMapper<User>
|
||||||
|
) :
|
||||||
UserRepository {
|
UserRepository {
|
||||||
|
|
||||||
override suspend fun save(user: User): User {
|
override suspend fun save(user: User): User {
|
||||||
|
@ -54,9 +57,7 @@ class UserRepositoryImpl(private val idGenerateService: IdGenerateService) :
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun findById(id: Long): User? {
|
override suspend fun findById(id: Long): User? {
|
||||||
return Users.select { Users.id eq id }.map {
|
return Users.select { Users.id eq id }.singleOrNull()?.let(userResultRowMapper::map)
|
||||||
it.toUser()
|
|
||||||
}.singleOrNull()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun deleteFollowRequest(id: Long, follower: Long) {
|
override suspend fun deleteFollowRequest(id: Long, follower: Long) {
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
package dev.usbharu.hideout.repository
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.domain.model.hideout.entity.User
|
||||||
|
import org.jetbrains.exposed.sql.ResultRow
|
||||||
|
import org.springframework.stereotype.Component
|
||||||
|
import java.time.Instant
|
||||||
|
|
||||||
|
@Component
|
||||||
|
class UserResultRowMapper(private val userBuilder: User.UserBuilder) : ResultRowMapper<User> {
|
||||||
|
override fun map(resultRow: ResultRow): User {
|
||||||
|
return userBuilder.of(
|
||||||
|
id = resultRow[Users.id],
|
||||||
|
name = resultRow[Users.name],
|
||||||
|
domain = resultRow[Users.domain],
|
||||||
|
screenName = resultRow[Users.screenName],
|
||||||
|
description = resultRow[Users.description],
|
||||||
|
password = resultRow[Users.password],
|
||||||
|
inbox = resultRow[Users.inbox],
|
||||||
|
outbox = resultRow[Users.outbox],
|
||||||
|
url = resultRow[Users.url],
|
||||||
|
publicKey = resultRow[Users.publicKey],
|
||||||
|
privateKey = resultRow[Users.privateKey],
|
||||||
|
createdAt = Instant.ofEpochMilli((resultRow[Users.createdAt])),
|
||||||
|
keyId = resultRow[Users.keyId],
|
||||||
|
followers = resultRow[Users.followers],
|
||||||
|
following = resultRow[Users.following]
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue