CreatedArticleAuthorVerification.kt
package com.example.realworldkotlinspringbootjdbc.domain
import arrow.core.Either
import arrow.core.left
import arrow.core.right
import com.example.realworldkotlinspringbootjdbc.util.MyError
/**
* ドメインサービス
*
* 作成済み記事の著者かどうかを検証する
*/
object CreatedArticleAuthorVerification {
interface Error : MyError {
data class NotMatchedUserId(val article: CreatedArticle, val user: RegisteredUser) : Error, MyError.Basic
}
/**
* 作成済み記事の著者かどうかを検証する
*
* @param article
* @param user
* @return (著者ではない: Left) or (著者である: Right)
*/
fun verify(article: CreatedArticle, user: RegisteredUser): Either<Error, Unit> =
when (article.authorId == user.userId) {
false -> Error.NotMatchedUserId(article, user).left()
true -> Unit.right()
}
}