Skip to content

Commit

Permalink
✨ Like, Unlike, getArticlesThatUserLikes added
Browse files Browse the repository at this point in the history
  • Loading branch information
alpakar02 committed Jan 9, 2025
1 parent 01182aa commit 7b77acd
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,24 @@ class ArticleController(
return ResponseEntity.ok("Deleted Successfully")
}

@PostMapping("api/item/like/{articleId}")
fun likeArticle(
@PathVariable articleId: Long,
@AuthUser user: User,
): ResponseEntity<String> {
articleService.likeArticle(articleId, user.id)
return ResponseEntity.ok("Liked Successfully")
}

@PostMapping("api/item/unlike/{articleId}")
fun unlikeArticle(
@PathVariable articleId: Long,
@AuthUser user: User,
): ResponseEntity<String> {
articleService.unlikeArticle(articleId, user.id)
return ResponseEntity.ok("Unliked Successfully")
}

@GetMapping("api/item/get/{articleId}")
fun getArticle(
@PathVariable articleId: Long,
Expand All @@ -65,6 +83,19 @@ class ArticleController(
return ResponseEntity.ok(response)
}

@GetMapping("/api/mypage/likes")
fun getArticlesThatUserLikes(
@RequestParam("articleId") articleId: Long,
@AuthUser user: User,
): ResponseEntity<List<Item>> {
val articles: List<ArticleEntity> = articleService.getArticlesThatUserLikes(user.id, articleId)
val response =
articles.map { article ->
Item.fromArticle(Article.fromEntity(article))
}
return ResponseEntity.ok(response)
}

@GetMapping("/api/mypage/sells")
fun getArticlesBySeller(
@RequestParam("articleId") articleId: Long,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
package com.toyProject7.karrot.article.persistence

import com.toyProject7.karrot.user.persistence.UserEntity
import org.springframework.data.jpa.repository.JpaRepository

interface ArticleLikesRepository : JpaRepository<ArticleLikesEntity, String>
interface ArticleLikesRepository : JpaRepository<ArticleLikesEntity, String> {
fun findTop10ByUserAndArticleIdLessThanOrderByArticleIdDesc(
user: UserEntity,
articleId: Long,
): List<ArticleLikesEntity>
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import com.toyProject7.karrot.article.ArticlePermissionDeniedException
import com.toyProject7.karrot.article.controller.Article
import com.toyProject7.karrot.article.controller.PostArticleRequest
import com.toyProject7.karrot.article.persistence.ArticleEntity
import com.toyProject7.karrot.article.persistence.ArticleLikesEntity
import com.toyProject7.karrot.article.persistence.ArticleLikesRepository
import com.toyProject7.karrot.article.persistence.ArticleRepository
import com.toyProject7.karrot.user.service.UserService
import org.springframework.data.repository.findByIdOrNull
Expand All @@ -15,6 +17,7 @@ import java.time.Instant
@Service
class ArticleService(
private val articleRepository: ArticleRepository,
private val articleLikesRepository: ArticleLikesRepository,
private val userService: UserService,
) {
@Transactional
Expand Down Expand Up @@ -73,6 +76,37 @@ class ArticleService(
articleRepository.delete(articleEntity)
}

@Transactional
fun likeArticle(
articleId: Long,
id: String,
) {
val articleEntity = articleRepository.findByIdOrNull(articleId) ?: throw ArticleNotFoundException()
val userEntity = userService.getUserEntityById(id)
if (articleEntity.articleLikes.any { it.user.id == userEntity.id }) {
return
}
val articleLikesEntity =
articleLikesRepository.save(
ArticleLikesEntity(article = articleEntity, user = userEntity, createdAt = Instant.now(), updatedAt = Instant.now()),
)
articleEntity.articleLikes += articleLikesEntity
articleRepository.save(articleEntity)
}

@Transactional
fun unlikeArticle(
articleId: Long,
id: String,
) {
val articleEntity = articleRepository.findByIdOrNull(articleId) ?: throw ArticleNotFoundException()
val userEntity = userService.getUserEntityById(id)
val toBeRemoved: ArticleLikesEntity = articleEntity.articleLikes.find { it.user.id == userEntity.id } ?: return
articleEntity.articleLikes -= toBeRemoved
articleLikesRepository.delete(toBeRemoved)
articleRepository.save(articleEntity)
}

@Transactional
fun getArticle(articleId: Long): Article {
val articleEntity = articleRepository.findByIdOrNull(articleId) ?: throw ArticleNotFoundException()
Expand All @@ -84,6 +118,18 @@ class ArticleService(
return articleRepository.findTop10ByIdBeforeOrderByCreatedAtDesc(articleId)
}

@Transactional
fun getArticlesThatUserLikes(
id: String,
articleId: Long,
): List<ArticleEntity> {
val userEntity = userService.getUserEntityById(id)
return articleLikesRepository.findTop10ByUserAndArticleIdLessThanOrderByArticleIdDesc(
userEntity,
articleId,
).map { it.article }
}

@Transactional
fun getArticlesBySeller(
id: String,
Expand Down

0 comments on commit 7b77acd

Please sign in to comment.