mirror of
https://github.com/CUBETIQ/hexagonal-architect-spring-boot
synced 2024-05-20 10:21:36 +07:00
30 lines
1.0 KiB
Kotlin
30 lines
1.0 KiB
Kotlin
|
package com.cubetiqs.hexagonal.infrastructure.adapter.persistence
|
||
|
|
||
|
import com.cubetiqs.hexagonal.domain.article.model.Article
|
||
|
import com.cubetiqs.hexagonal.domain.article.port.ArticlePort
|
||
|
import com.cubetiqs.hexagonal.domain.article.usecase.ArticleCreate
|
||
|
import com.cubetiqs.hexagonal.domain.article.usecase.ArticleQuery
|
||
|
import java.util.concurrent.ConcurrentHashMap
|
||
|
|
||
|
class ArticleImMemoryDataAdapter : ArticlePort {
|
||
|
companion object {
|
||
|
private val articles = ConcurrentHashMap<Long, Article>()
|
||
|
}
|
||
|
|
||
|
override fun create(article: ArticleCreate): Article {
|
||
|
val id = (articles.size + 1).toLong()
|
||
|
val entity = Article(id, article.accountId, article.title, article.body)
|
||
|
articles[id] = entity
|
||
|
return entity
|
||
|
}
|
||
|
|
||
|
override fun retrieve(id: Long): Article {
|
||
|
return articles[id] ?: throw IllegalArgumentException("Article not found")
|
||
|
}
|
||
|
|
||
|
override fun query(query: ArticleQuery): Collection<Article> {
|
||
|
return articles.values.filter {
|
||
|
it.accountId == query.accountId
|
||
|
}
|
||
|
}
|
||
|
}
|