diff --git a/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/interfaces/api/SpringStatusApi.kt b/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/interfaces/api/SpringStatusApi.kt index 5e045a59..10e54af0 100644 --- a/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/interfaces/api/SpringStatusApi.kt +++ b/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/interfaces/api/SpringStatusApi.kt @@ -18,6 +18,10 @@ package dev.usbharu.hideout.mastodon.interfaces.api import dev.usbharu.hideout.core.application.post.RegisterLocalPost import dev.usbharu.hideout.core.application.post.RegisterLocalPostApplicationService +import dev.usbharu.hideout.core.application.reaction.CreateReaction +import dev.usbharu.hideout.core.application.reaction.RemoveReaction +import dev.usbharu.hideout.core.application.reaction.UserCreateReactionApplicationService +import dev.usbharu.hideout.core.application.reaction.UserRemoveReactionApplicationService import dev.usbharu.hideout.core.domain.model.post.Visibility import dev.usbharu.hideout.core.infrastructure.springframework.oauth2.SpringSecurityOauth2PrincipalContextHolder import dev.usbharu.hideout.mastodon.application.status.GetStatus @@ -32,7 +36,9 @@ import org.springframework.stereotype.Controller class SpringStatusApi( private val registerLocalPostApplicationService: RegisterLocalPostApplicationService, private val getStatusApplicationService: GetStatusApplicationService, - private val principalContextHolder: SpringSecurityOauth2PrincipalContextHolder + private val principalContextHolder: SpringSecurityOauth2PrincipalContextHolder, + private val userCreateReactionApplicationService: UserCreateReactionApplicationService, + private val userRemoveReactionApplicationService: UserRemoveReactionApplicationService ) : StatusApi { override suspend fun apiV1StatusesIdEmojiReactionsEmojiDelete(id: String, emoji: String): ResponseEntity = super.apiV1StatusesIdEmojiReactionsEmojiDelete(id, emoji) @@ -49,6 +55,20 @@ class SpringStatusApi( ) } + override suspend fun apiV1StatusesIdFavouritePost(id: String): ResponseEntity { + val principal = principalContextHolder.getPrincipal() + + userCreateReactionApplicationService.execute(CreateReaction(postId = id.toLong(), null, "❤"), principal) + return ResponseEntity.ok(getStatusApplicationService.execute(GetStatus(id), principal)) + } + + override suspend fun apiV1StatusesIdUnfavouritePost(id: String): ResponseEntity { + val principal = principalContextHolder.getPrincipal() + + userRemoveReactionApplicationService.execute(RemoveReaction(postId = id.toLong(), null, "❤"), principal) + return ResponseEntity.ok(getStatusApplicationService.execute(GetStatus(id), principal)) + } + override suspend fun apiV1StatusesPost(statusesRequest: StatusesRequest): ResponseEntity { val principal = principalContextHolder.getPrincipal() val execute = registerLocalPostApplicationService.execute( diff --git a/hideout-mastodon/src/main/resources/openapi/mastodon.yaml b/hideout-mastodon/src/main/resources/openapi/mastodon.yaml index bc5195d5..76d8f5aa 100644 --- a/hideout-mastodon/src/main/resources/openapi/mastodon.yaml +++ b/hideout-mastodon/src/main/resources/openapi/mastodon.yaml @@ -177,6 +177,48 @@ paths: schema: $ref: "#/components/schemas/Status" + /api/v1/statuses/{id}/favourite: + post: + tags: + - status + security: + - OAuth2: + - "write:favourites" + parameters: + - in: path + name: id + required: true + schema: + type: string + responses: + 200: + description: 成功 + content: + application/json: + schema: + $ref: "#/components/schemas/Status" + + /api/v1/statuses/{id}/unfavourite: + post: + tags: + - status + security: + - OAuth2: + - "write:favourites" + parameters: + - in: path + name: id + required: true + schema: + type: string + responses: + 200: + description: 成功 + content: + application/json: + schema: + $ref: "#/components/schemas/Status" + /api/v1/statuses/{id}/emoji_reactions/{emoji}: put: tags: