mirror of https://github.com/usbharu/Hideout.git
feat: UsersのAPIの返り値を修正
This commit is contained in:
parent
9c8aef6c44
commit
ec5dca4ed2
|
@ -1,5 +1,7 @@
|
||||||
package dev.usbharu.hideout.domain.model.hideout.dto
|
package dev.usbharu.hideout.domain.model.hideout.dto
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.domain.model.hideout.entity.User
|
||||||
|
|
||||||
data class UserResponse(
|
data class UserResponse(
|
||||||
val id: Long,
|
val id: Long,
|
||||||
val name: String,
|
val name: String,
|
||||||
|
@ -8,4 +10,18 @@ data class UserResponse(
|
||||||
val description: String = "",
|
val description: String = "",
|
||||||
val url: String,
|
val url: String,
|
||||||
val createdAt: Long
|
val createdAt: Long
|
||||||
)
|
) {
|
||||||
|
companion object {
|
||||||
|
fun from(user: User): UserResponse {
|
||||||
|
return UserResponse(
|
||||||
|
user.id,
|
||||||
|
user.name,
|
||||||
|
user.domain,
|
||||||
|
user.screenName,
|
||||||
|
user.description,
|
||||||
|
user.url,
|
||||||
|
user.createdAt.toEpochMilli()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import dev.usbharu.hideout.domain.model.hideout.dto.UserCreateDto
|
||||||
import dev.usbharu.hideout.domain.model.hideout.form.UserCreate
|
import dev.usbharu.hideout.domain.model.hideout.form.UserCreate
|
||||||
import dev.usbharu.hideout.exception.ParameterNotExistException
|
import dev.usbharu.hideout.exception.ParameterNotExistException
|
||||||
import dev.usbharu.hideout.plugins.TOKEN_AUTH
|
import dev.usbharu.hideout.plugins.TOKEN_AUTH
|
||||||
|
import dev.usbharu.hideout.service.IUserApiService
|
||||||
import dev.usbharu.hideout.service.impl.IUserService
|
import dev.usbharu.hideout.service.impl.IUserService
|
||||||
import dev.usbharu.hideout.util.AcctUtil
|
import dev.usbharu.hideout.util.AcctUtil
|
||||||
import io.ktor.http.*
|
import io.ktor.http.*
|
||||||
|
@ -15,10 +16,10 @@ import io.ktor.server.request.*
|
||||||
import io.ktor.server.response.*
|
import io.ktor.server.response.*
|
||||||
import io.ktor.server.routing.*
|
import io.ktor.server.routing.*
|
||||||
|
|
||||||
fun Route.users(userService: IUserService) {
|
fun Route.users(userService: IUserService, userApiService: IUserApiService) {
|
||||||
route("/users") {
|
route("/users") {
|
||||||
get {
|
get {
|
||||||
call.respond(userService.findAllForUser())
|
call.respond(userApiService.findAll())
|
||||||
}
|
}
|
||||||
post {
|
post {
|
||||||
val userCreate = call.receive<UserCreate>()
|
val userCreate = call.receive<UserCreate>()
|
||||||
|
@ -43,10 +44,10 @@ fun Route.users(userService: IUserService) {
|
||||||
val userParameter = (call.parameters["name"]
|
val userParameter = (call.parameters["name"]
|
||||||
?: throw ParameterNotExistException("Parameter(name='userName@domain') does not exist."))
|
?: throw ParameterNotExistException("Parameter(name='userName@domain') does not exist."))
|
||||||
if (userParameter.toLongOrNull() != null) {
|
if (userParameter.toLongOrNull() != null) {
|
||||||
return@get call.respond(userService.findById(userParameter.toLong()))
|
return@get call.respond(userApiService.findById(userParameter.toLong()))
|
||||||
} else {
|
} else {
|
||||||
val acct = AcctUtil.parse(userParameter)
|
val acct = AcctUtil.parse(userParameter)
|
||||||
return@get call.respond(userService.findByNameAndDomain(acct.username, acct.domain))
|
return@get call.respond(userApiService.findByAcct(acct))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -56,10 +57,10 @@ fun Route.users(userService: IUserService) {
|
||||||
val userParameter = call.parameters["name"]
|
val userParameter = call.parameters["name"]
|
||||||
?: throw ParameterNotExistException("Parameter(name='userName@domain') does not exist.")
|
?: throw ParameterNotExistException("Parameter(name='userName@domain') does not exist.")
|
||||||
if (userParameter.toLongOrNull() != null) {
|
if (userParameter.toLongOrNull() != null) {
|
||||||
return@get call.respond(userService.findFollowersById(userParameter.toLong()))
|
return@get call.respond(userApiService.findFollowers(userParameter.toLong()))
|
||||||
}
|
}
|
||||||
val acct = AcctUtil.parse(userParameter)
|
val acct = AcctUtil.parse(userParameter)
|
||||||
return@get call.respond(userService.findFollowersByNameAndDomain(acct.username, acct.domain))
|
return@get call.respond(userApiService.findFollowersByAcct(acct))
|
||||||
}
|
}
|
||||||
authenticate(TOKEN_AUTH) {
|
authenticate(TOKEN_AUTH) {
|
||||||
|
|
||||||
|
@ -76,7 +77,7 @@ fun Route.users(userService: IUserService) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val acct = AcctUtil.parse(userParameter)
|
val acct = AcctUtil.parse(userParameter)
|
||||||
val targetUser = userService.findByNameAndDomain(acct.username, acct.domain)
|
val targetUser = userApiService.findByAcct(acct)
|
||||||
if (userService.addFollowers(targetUser.id, userId)) {
|
if (userService.addFollowers(targetUser.id, userId)) {
|
||||||
return@post call.respond(HttpStatusCode.OK)
|
return@post call.respond(HttpStatusCode.OK)
|
||||||
} else {
|
} else {
|
||||||
|
@ -90,10 +91,10 @@ fun Route.users(userService: IUserService) {
|
||||||
val userParameter = (call.parameters["name"]
|
val userParameter = (call.parameters["name"]
|
||||||
?: throw ParameterNotExistException("Parameter(name='userName@domain') does not exist."))
|
?: throw ParameterNotExistException("Parameter(name='userName@domain') does not exist."))
|
||||||
if (userParameter.toLongOrNull() != null) {
|
if (userParameter.toLongOrNull() != null) {
|
||||||
return@get call.respond(userService.findFollowingById(userParameter.toLong()))
|
return@get call.respond(userApiService.findFollowings(userParameter.toLong()))
|
||||||
}
|
}
|
||||||
val acct = AcctUtil.parse(userParameter)
|
val acct = AcctUtil.parse(userParameter)
|
||||||
return@get call.respond(userService.findFollowingByNameAndDomain(acct.username, acct.domain))
|
return@get call.respond(userApiService.findFollowingsByAcct(acct))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
package dev.usbharu.hideout.service
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.domain.model.Acct
|
||||||
|
import dev.usbharu.hideout.domain.model.hideout.dto.UserResponse
|
||||||
|
|
||||||
|
interface IUserApiService {
|
||||||
|
suspend fun findAll(limit: Int? = 100, offset: Long = 0): List<UserResponse>
|
||||||
|
|
||||||
|
suspend fun findById(id: Long): UserResponse
|
||||||
|
|
||||||
|
suspend fun findByIds(ids: List<Long>): List<UserResponse>
|
||||||
|
|
||||||
|
suspend fun findByAcct(acct: Acct): UserResponse
|
||||||
|
|
||||||
|
suspend fun findByAccts(accts: List<Acct>): List<UserResponse>
|
||||||
|
|
||||||
|
suspend fun findFollowers(userId: Long): List<UserResponse>
|
||||||
|
|
||||||
|
suspend fun findFollowings(userId: Long): List<UserResponse>
|
||||||
|
|
||||||
|
suspend fun findFollowersByAcct(acct: Acct): List<UserResponse>
|
||||||
|
|
||||||
|
suspend fun findFollowingsByAcct(acct: Acct): List<UserResponse>
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
package dev.usbharu.hideout.service
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.config.Config
|
||||||
|
import dev.usbharu.hideout.domain.model.Acct
|
||||||
|
import dev.usbharu.hideout.domain.model.hideout.dto.UserResponse
|
||||||
|
import dev.usbharu.hideout.service.impl.IUserService
|
||||||
|
import org.koin.core.annotation.Single
|
||||||
|
|
||||||
|
@Single
|
||||||
|
class UserApiServiceImpl(private val userService: IUserService) : IUserApiService {
|
||||||
|
override suspend fun findAll(limit: Int?, offset: Long): List<UserResponse> =
|
||||||
|
userService.findAll(limit, offset).map { UserResponse.from(it) }
|
||||||
|
|
||||||
|
override suspend fun findById(id: Long): UserResponse = UserResponse.from(userService.findById(id))
|
||||||
|
|
||||||
|
override suspend fun findByIds(ids: List<Long>): List<UserResponse> =
|
||||||
|
userService.findByIds(ids).map { UserResponse.from(it) }
|
||||||
|
|
||||||
|
override suspend fun findByAcct(acct: Acct): UserResponse =
|
||||||
|
UserResponse.from(userService.findByNameAndDomain(acct.username, acct.domain))
|
||||||
|
|
||||||
|
override suspend fun findByAccts(accts: List<Acct>): List<UserResponse> {
|
||||||
|
return userService.findByNameAndDomains(accts.map { it.username to (it.domain ?: Config.configData.domain) })
|
||||||
|
.map { UserResponse.from(it) }
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun findFollowers(userId: Long): List<UserResponse> =
|
||||||
|
userService.findFollowersById(userId).map { UserResponse.from(it) }
|
||||||
|
|
||||||
|
override suspend fun findFollowings(userId: Long): List<UserResponse> =
|
||||||
|
userService.findFollowingById(userId).map { UserResponse.from(it) }
|
||||||
|
|
||||||
|
override suspend fun findFollowersByAcct(acct: Acct): List<UserResponse> =
|
||||||
|
userService.findFollowersByNameAndDomain(acct.username, acct.domain).map { UserResponse.from(it) }
|
||||||
|
|
||||||
|
override suspend fun findFollowingsByAcct(acct: Acct): List<UserResponse> =
|
||||||
|
userService.findFollowingByNameAndDomain(acct.username, acct.domain).map { UserResponse.from(it) }
|
||||||
|
}
|
|
@ -2,15 +2,12 @@ package dev.usbharu.hideout.service.impl
|
||||||
|
|
||||||
import dev.usbharu.hideout.domain.model.hideout.dto.RemoteUserCreateDto
|
import dev.usbharu.hideout.domain.model.hideout.dto.RemoteUserCreateDto
|
||||||
import dev.usbharu.hideout.domain.model.hideout.dto.UserCreateDto
|
import dev.usbharu.hideout.domain.model.hideout.dto.UserCreateDto
|
||||||
import dev.usbharu.hideout.domain.model.hideout.dto.UserResponse
|
|
||||||
import dev.usbharu.hideout.domain.model.hideout.entity.User
|
import dev.usbharu.hideout.domain.model.hideout.entity.User
|
||||||
|
|
||||||
@Suppress("TooManyFunctions")
|
@Suppress("TooManyFunctions")
|
||||||
interface IUserService {
|
interface IUserService {
|
||||||
suspend fun findAll(limit: Int? = 100, offset: Long? = 0): List<User>
|
suspend fun findAll(limit: Int? = 100, offset: Long? = 0): List<User>
|
||||||
|
|
||||||
suspend fun findAllForUser(limit: Int? = 100, offset: Long? = 0): List<UserResponse>
|
|
||||||
|
|
||||||
suspend fun findById(id: Long): User
|
suspend fun findById(id: Long): User
|
||||||
|
|
||||||
suspend fun findByIds(ids: List<Long>): List<User>
|
suspend fun findByIds(ids: List<Long>): List<User>
|
||||||
|
|
|
@ -24,7 +24,7 @@ class UserService(private val userRepository: IUserRepository, private val userA
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun findAllForUser(limit: Int?, offset: Long?): List<UserResponse> {
|
suspend fun findAllForUser(limit: Int?, offset: Long?): List<UserResponse> {
|
||||||
TODO("Not yet implemented")
|
TODO("Not yet implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -112,6 +112,15 @@ paths:
|
||||||
required: false
|
required: false
|
||||||
schema:
|
schema:
|
||||||
type: "integer"
|
type: "integer"
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: "OK"
|
||||||
|
content:
|
||||||
|
'*/*':
|
||||||
|
schema:
|
||||||
|
type: "array"
|
||||||
|
items:
|
||||||
|
$ref: "#/components/schemas/Post"
|
||||||
post:
|
post:
|
||||||
description: ""
|
description: ""
|
||||||
requestBody:
|
requestBody:
|
||||||
|
@ -127,6 +136,61 @@ paths:
|
||||||
'*/*':
|
'*/*':
|
||||||
schema:
|
schema:
|
||||||
type: "object"
|
type: "object"
|
||||||
|
/api/internal/v1/posts/{id}:
|
||||||
|
get:
|
||||||
|
description: ""
|
||||||
|
parameters:
|
||||||
|
- name: "id"
|
||||||
|
in: "path"
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: "number"
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: "OK"
|
||||||
|
content:
|
||||||
|
'*/*':
|
||||||
|
schema:
|
||||||
|
$ref: "#/components/schemas/Post"
|
||||||
|
/api/internal/v1/users/{name}/posts:
|
||||||
|
get:
|
||||||
|
description: ""
|
||||||
|
parameters:
|
||||||
|
- name: "name"
|
||||||
|
in: "path"
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: "string"
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: "OK"
|
||||||
|
content:
|
||||||
|
'*/*':
|
||||||
|
schema:
|
||||||
|
type: "array"
|
||||||
|
items:
|
||||||
|
$ref: "#/components/schemas/Post"
|
||||||
|
/api/internal/v1/users/{name}/posts/{id}:
|
||||||
|
get:
|
||||||
|
description: ""
|
||||||
|
parameters:
|
||||||
|
- name: "id"
|
||||||
|
in: "path"
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: "number"
|
||||||
|
- name: "name"
|
||||||
|
in: "path"
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: "string"
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: "OK"
|
||||||
|
content:
|
||||||
|
'*/*':
|
||||||
|
schema:
|
||||||
|
$ref: "#/components/schemas/Post"
|
||||||
/inbox:
|
/inbox:
|
||||||
get:
|
get:
|
||||||
description: ""
|
description: ""
|
||||||
|
@ -346,10 +410,19 @@ components:
|
||||||
Post:
|
Post:
|
||||||
type: "object"
|
type: "object"
|
||||||
properties:
|
properties:
|
||||||
text:
|
id:
|
||||||
type: "string"
|
type: "integer"
|
||||||
|
format: "int64"
|
||||||
|
userId:
|
||||||
|
type: "integer"
|
||||||
|
format: "int64"
|
||||||
overview:
|
overview:
|
||||||
type: "string"
|
type: "string"
|
||||||
|
text:
|
||||||
|
type: "string"
|
||||||
|
createdAt:
|
||||||
|
type: "integer"
|
||||||
|
format: "int64"
|
||||||
visibility:
|
visibility:
|
||||||
type: "string"
|
type: "string"
|
||||||
enum:
|
enum:
|
||||||
|
@ -357,6 +430,8 @@ components:
|
||||||
- "UNLISTED"
|
- "UNLISTED"
|
||||||
- "FOLLOWERS"
|
- "FOLLOWERS"
|
||||||
- "DIRECT"
|
- "DIRECT"
|
||||||
|
url:
|
||||||
|
type: "string"
|
||||||
repostId:
|
repostId:
|
||||||
type: "integer"
|
type: "integer"
|
||||||
format: "int64"
|
format: "int64"
|
||||||
|
|
Loading…
Reference in New Issue