20240123 (화) BackOffice 프로젝트 기능구현
2024. 1. 23. 19:44ㆍTIL
내가 맡은바 좋아요 기능 (조회, 추가, 삭제), 팔로우 기능 (조회, 추가, 삭제) 를 구현했다.
LikeServiceImpl
package com.b2.backoffice.domain.like.service
import com.b2.backoffice.domain.like.dto.LikeResponse
import com.b2.backoffice.domain.like.model.LikeEntity
import com.b2.backoffice.domain.like.repository.LikeRepository
import com.b2.backoffice.domain.like_count.model.LikeCountEntity
import com.b2.backoffice.domain.like_count.repository.LikeCountRepository
import com.b2.backoffice.domain.user.repository.UserRepository
import org.springframework.data.repository.findByIdOrNull
import org.springframework.stereotype.Service
@Service
class LikeServiceImpl(
//private val postRepository: PostRepository,
private val userRepository: UserRepository,
private val likeRepository: LikeRepository,
//private val likeCountRepository: LikeCountRepository
) : LikeService {
override fun createLike(userId: Int, postId: Int) {
/*val post = postRepository.findByIdOrNull(postId)
?: throw ModelNotFoundException("post", postId)
val user = userRepository.findByIdOrNull(userId)
?: throw ModelNotFoundException("user", userId)
if (post.user.id == userId) {
throw Exception()
}
if (likeRepository.findByUserIdAndPostId(userId,postId) == null) {
likeRepository.save(
LikeEntity(
post,
user
)
)
} else throw Exception()*/
}
override fun deleteLike(userId: Int, postId: Int) {
if (likeRepository.findByUserIdAndPostId(userId, postId) == null) {
throw Exception()
}
likeRepository.deleteByUserIdAndPostId(userId, postId)
}
override fun getLike(postId: Int): LikeResponse? {
//val post = postRepository.findByIdOrNull(postId)
//?: throw ModelNotFoundException("post", postId)
//return LikeResponse(postId, likeRepository.findByPostId(post.Id!!).size)
TODO()
}
}
이쪽은 이전에 만들었던 좋아요기능을 참고해서 만들었고 내가 새로 만든건 팔로우기능이다.
FollowServiceImpl
package com.b2.backoffice.domain.follow.service
import com.b2.backoffice.domain.board.dto.BoardResponse
import com.b2.backoffice.domain.board.model.toResponse
import com.b2.backoffice.domain.board.repository.BoardRepository
import com.b2.backoffice.domain.follow.model.FollowEntity
import com.b2.backoffice.domain.follow.repository.FollowRepository
import com.b2.backoffice.domain.user.repository.UserRepository
import org.springframework.data.repository.findByIdOrNull
class FollowServiceImpl(
private val followRepository: FollowRepository,
private val userRepository: UserRepository,
private val boardRepository: BoardRepository
):FollowService {
override fun addFollow(userId: Int, boardId: Int) {
val board = boardRepository.findByIdOrNull(boardId)
?: throw Exception()
val user = userRepository.findByIdOrNull(userId)
?: throw Exception()
if (followRepository.findByUserIdAndBoardId(userId, boardId) == null) {
followRepository.save(
FollowEntity(
user = user,
board = board
)
)
} else throw Exception()
}
override fun cancleFollow(userId: Int, boardId: Int) {
val follow = followRepository.findByUserIdAndBoardId(userId, boardId)
?: throw Exception()
followRepository.delete(follow)
}
override fun getFollowList(userId: Int): List<BoardResponse> {
val user = userRepository.findByIdOrNull(userId)
?: throw Exception()
val followList = followRepository.findAllByUserId(user.id!!).map { it.board.toResponse() }
return followList
}
}
우리가 만들 예정인 팔로우기능은 모든 Board중에서 자기가 자주이용하는 Board만 모아서 볼수있는 기능이다.
addFollow에서 Board가 실제로 있는 보드인지 검증하고 새로 만든 Follow 테이블에 팔로우를 누른 유저의 userId와 팔로우한 boardId 를 같이 넣어줘서 저장한다.
cancleFollow는 기존에 있던 컬럼이 있는지 검증하고 있다면 삭제를 하는 역할이다.
이제 좀 복잡한건 getFollowList인데
먼저 유저가 실제로 존재하는지 검증해주고 팔로우 레포지토리에서 유저아이디를 기반으로 모든걸 가져와서 그 컬럼안에 있는 board를 전부 리스폰스화 해서 반환을 해준다.
오늘의 한마디 : 아직 두개 다 토큰, 포스트, 보드 같은것들이 미완성이라 제대로 받아오지 못하는 상황이여서 아마 추후에 좀더 수정을 해줘야할것이다.
'TIL' 카테고리의 다른 글
20240125 (목) BackOffice 프로젝트 LikeCount 구현해보기 (0) | 2024.01.25 |
---|---|
20240124 (수) BackOffice 프로젝트 (0) | 2024.01.24 |
20240122 (월) BackOffice 프로젝트 (0) | 2024.01.22 |
20240119 (금) 코딩일지 (0) | 2024.01.19 |
20240118 (목) TodoApp 개발 마무리 및 추가 공부 (0) | 2024.01.18 |