20240123 (화) BackOffice 프로젝트 기능구현

2024. 1. 23. 19:44TIL

내가 맡은바 좋아요 기능 (조회, 추가, 삭제), 팔로우 기능 (조회, 추가, 삭제) 를 구현했다.

 

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를 전부 리스폰스화 해서 반환을 해준다.

 

오늘의 한마디 : 아직 두개 다 토큰, 포스트, 보드 같은것들이 미완성이라 제대로 받아오지 못하는 상황이여서 아마 추후에 좀더 수정을 해줘야할것이다.