From 208d1c519a1677b84f407c4fa2b520b98899af4e Mon Sep 17 00:00:00 2001 From: usbharu <64310155+usbharu@users.noreply.github.com> Date: Sat, 24 Feb 2024 15:24:00 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=98=8E=E7=A4=BA=E7=9A=84=E3=81=AB?= =?UTF-8?q?=E6=83=85=E5=A0=B1=E3=82=92=E3=82=A2=E3=83=83=E3=83=97=E3=83=87?= =?UTF-8?q?=E3=83=BC=E3=83=88=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exception/AccountNotFoundException.kt | 54 +++++++++++++++++++ .../service/account/AccountApiService.kt | 21 ++++++-- 2 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 src/main/kotlin/dev/usbharu/hideout/mastodon/domain/exception/AccountNotFoundException.kt diff --git a/src/main/kotlin/dev/usbharu/hideout/mastodon/domain/exception/AccountNotFoundException.kt b/src/main/kotlin/dev/usbharu/hideout/mastodon/domain/exception/AccountNotFoundException.kt new file mode 100644 index 00000000..0e52b36a --- /dev/null +++ b/src/main/kotlin/dev/usbharu/hideout/mastodon/domain/exception/AccountNotFoundException.kt @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2024 usbharu + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package dev.usbharu.hideout.mastodon.domain.exception + +import dev.usbharu.hideout.domain.mastodon.model.generated.NotFoundResponse +import dev.usbharu.hideout.mastodon.domain.model.MastodonApiErrorResponse + +class AccountNotFoundException : ClientException { + constructor(response: MastodonApiErrorResponse) : super(response) + constructor(message: String?, response: MastodonApiErrorResponse) : super(message, response) + constructor(message: String?, cause: Throwable?, response: MastodonApiErrorResponse) : super( + message, + cause, + response + ) + + constructor(cause: Throwable?, response: MastodonApiErrorResponse) : super(cause, response) + constructor( + message: String?, + cause: Throwable?, + enableSuppression: Boolean, + writableStackTrace: Boolean, + response: MastodonApiErrorResponse, + ) : super(message, cause, enableSuppression, writableStackTrace, response) + + fun getTypedResponse(): MastodonApiErrorResponse = + response as MastodonApiErrorResponse + + companion object { + fun ofId(id: Long): AccountNotFoundException = AccountNotFoundException( + "id: $id was not found.", + MastodonApiErrorResponse( + NotFoundResponse( + "Record not found" + ), + 404 + ), + ) + } +} \ No newline at end of file diff --git a/src/main/kotlin/dev/usbharu/hideout/mastodon/service/account/AccountApiService.kt b/src/main/kotlin/dev/usbharu/hideout/mastodon/service/account/AccountApiService.kt index de3ab853..7c091999 100644 --- a/src/main/kotlin/dev/usbharu/hideout/mastodon/service/account/AccountApiService.kt +++ b/src/main/kotlin/dev/usbharu/hideout/mastodon/service/account/AccountApiService.kt @@ -19,6 +19,7 @@ package dev.usbharu.hideout.mastodon.service.account import dev.usbharu.hideout.application.external.Transaction import dev.usbharu.hideout.application.infrastructure.exposed.Page import dev.usbharu.hideout.application.infrastructure.exposed.PaginationList +import dev.usbharu.hideout.core.domain.exception.resource.UserNotFoundException import dev.usbharu.hideout.core.domain.model.relationship.RelationshipRepository import dev.usbharu.hideout.core.service.media.MediaService import dev.usbharu.hideout.core.service.relationship.RelationshipService @@ -26,6 +27,7 @@ import dev.usbharu.hideout.core.service.user.UpdateUserDto import dev.usbharu.hideout.core.service.user.UserCreateDto import dev.usbharu.hideout.core.service.user.UserService import dev.usbharu.hideout.domain.mastodon.model.generated.* +import dev.usbharu.hideout.mastodon.domain.exception.AccountNotFoundException import dev.usbharu.hideout.mastodon.interfaces.api.media.MediaRequest import dev.usbharu.hideout.mastodon.query.StatusQueryService import org.slf4j.LoggerFactory @@ -127,6 +129,8 @@ class AccountApiServiceImpl( } override suspend fun verifyCredentials(userid: Long): CredentialAccount = transaction.transaction { + userService.updateUserStatistics(userid) + val account = accountService.findById(userid) from(account) } @@ -141,8 +145,16 @@ class AccountApiServiceImpl( return@transaction fetchRelationship(loginUser, followTargetUserId) } - override suspend fun account(id: Long): Account = transaction.transaction { - return@transaction accountService.findById(id) + override suspend fun account(id: Long): Account { + return try { + transaction.transaction { + userService.updateUserStatistics(id) + return@transaction accountService.findById(id) + } + } catch (e: UserNotFoundException) { + logger.debug("Account Not found $id") + throw AccountNotFoundException.ofId(id) + } } override suspend fun relationships(userid: Long, id: List, withSuspended: Boolean): List = @@ -160,7 +172,7 @@ class AccountApiServiceImpl( } } - override suspend fun block(userid: Long, target: Long): Relationship = transaction.transaction { + override suspend fun block(userid: Long, target: Long) = transaction.transaction { relationshipService.block(userid, target) fetchRelationship(userid, target) @@ -339,6 +351,9 @@ class AccountApiServiceImpl( ignoreFollowRequestToTarget = false ) + userService.updateUserStatistics(userid) + userService.updateUserStatistics(targetId) + return Relationship( id = targetId.toString(), following = relationship.following,