Skip to content

Commit

Permalink
Article Domain 설계
Browse files Browse the repository at this point in the history
  • Loading branch information
cmsong111 committed Oct 31, 2024
1 parent 09afe7f commit 9882c60
Show file tree
Hide file tree
Showing 12 changed files with 156 additions and 64 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ package com.resuscitation.instagram

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.data.jpa.repository.config.EnableJpaAuditing

@EnableJpaAuditing
@SpringBootApplication
class InstagramApplication

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.resuscitation.instagram.article.application

import com.resuscitation.instagram.article.domain.Article

interface ArticleRepository {
fun findById(id: Long): Article?
fun save(articleEntity: Article): Article
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.resuscitation.instagram.article.application

import com.resuscitation.instagram.article.domain.Article
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional

@Service
class ArticleService(
private val articleRepository: ArticleRepository
) {
@Transactional(readOnly = true)
fun getArticle(id: Long): Article {
val article: Article = articleRepository.findById(id) ?: throw IllegalArgumentException()
return article
}

@Transactional
fun createArticle() {
val article = Article.create(
title = "title",
content = "content",
authorId = 1L
)
articleRepository.save(article)
}

@Transactional
fun updateArticle(
id: Long,
title: String,
content: String
) {
val article: Article = articleRepository.findById(id) ?: throw IllegalArgumentException()

article.update(
title = title,
content = content
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.resuscitation.instagram.article.domain

import jakarta.persistence.Entity
import jakarta.persistence.EntityListeners
import jakarta.persistence.GeneratedValue
import jakarta.persistence.GenerationType
import jakarta.persistence.Id
import java.time.Instant
import org.springframework.data.annotation.CreatedDate
import org.springframework.data.annotation.LastModifiedDate
import org.springframework.data.jpa.domain.support.AuditingEntityListener

@Entity
@EntityListeners(AuditingEntityListener::class)
class Article(
id: Long = 0L,
title: String = "",
content: String,
authorId: Long,
createdAt: Instant = Instant.MIN,
updatedAt: Instant = Instant.MIN,
) {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long = id

var title: String = title
protected set

var content: String = content
protected set

var authorId: Long = authorId
protected set

@CreatedDate
var createdAt: Instant = createdAt
protected set

@LastModifiedDate
var updatedAt: Instant = updatedAt
protected set

companion object {
fun create(title: String, content: String, authorId: Long): Article {
return Article(
title = title,
content = content,
authorId = authorId
)
}
}

fun update(title: String, content: String) {
this.title = title
this.content = content
}
}

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.resuscitation.instagram.article.infrastructure

import com.resuscitation.instagram.article.application.ArticleRepository
import com.resuscitation.instagram.article.domain.Article
import org.springframework.stereotype.Component

@Component
class ArticleRepositoryAdaptor(
private val jpaArticleRepository: JpaArticleRepository
) : ArticleRepository {
override fun findById(id: Long): Article? {
return jpaArticleRepository.findById(id).orElse(null)
}

override fun save(articleEntity: Article): Article {
return jpaArticleRepository.save(articleEntity)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.resuscitation.instagram.article.infrastructure

import com.resuscitation.instagram.article.domain.Article
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.stereotype.Repository

@Repository
interface JpaArticleRepository : JpaRepository<Article, Long> {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.resuscitation.instagram.article.presentation

import org.springframework.web.bind.annotation.RestController

@RestController
class ArticleAuthorController {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.resuscitation.instagram.article.presentation

import com.resuscitation.instagram.article.application.ArticleService
import org.springframework.web.bind.annotation.RestController

@RestController
class ArticleUserController(
private val articleService: ArticleService
) {
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.resuscitation.instagram.user.service;

import com.resuscitation.instagram.article.entity.ArticleEntity;
import com.resuscitation.instagram.article.domain.Article;
import com.resuscitation.instagram.user.dto.ProfileDto;
import com.resuscitation.instagram.user.entity.UserEntity;
import com.resuscitation.instagram.article.repository.ArticleRepository;
import com.resuscitation.instagram.article.infrastructure.ArticleRepository;
import com.resuscitation.instagram.user.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
Expand All @@ -28,7 +28,7 @@ public ProfileDto showProfile(String nickname) {
// User Repository에서 유저 정보 받아오기
UserEntity userEntity = userRepository.findByNickname(nickname).orElseThrow();
// Article repository 로부터 게시글 리스트 받아오기
Optional<ArticleEntity> articleEntity = articleRepository.findByAuthor_Nickname(nickname);
Optional<Article> articleEntity = articleRepository.findByAuthor_Nickname(nickname);
ArrayList<String> postArray = new ArrayList<>();
articleEntity.ifPresent(tmp -> postArray.add(tmp.getImage()));
//유저 정보와 게시글 리스트 반환
Expand Down

0 comments on commit 9882c60

Please sign in to comment.