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 구현해보기 (1) | 2024.01.25 | 
|---|---|
| 20240124 (수) BackOffice 프로젝트 (1) | 2024.01.24 | 
| 20240122 (월) BackOffice 프로젝트 (1) | 2024.01.22 | 
| 20240119 (금) 코딩일지 (0) | 2024.01.19 | 
| 20240118 (목) TodoApp 개발 마무리 및 추가 공부 (2) | 2024.01.18 |