20240124 (수) BackOffice 프로젝트

2024. 1. 24. 21:16TIL

오늘은 내가 한 작업물보다는 다른팀원이 잘 수행하지 못하는 코드들을 도와주는 시간이 더 많았다.

 

일단 오늘 내가 한 부분

 

LikeServiceImpl

package com.b2.backoffice.domain.like.service

import com.b2.backoffice.domain.exception.ModelNotFoundException
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.post.repository.PostRepository
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
                )
            )
            likeCountRepository.findByPostId(postId)
        } else throw Exception("Like is already exist")*/
    }

    override fun deleteLike(userId: Int, postId: Int) {
        if (likeRepository.findByUserIdAndPostId(userId, postId) == null) {
            throw ModelNotFoundException("like", postId)
        }
        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)
    }

}

 

FollowServiceImpl

package com.b2.backoffice.domain.follow.service

import com.b2.backoffice.domain.board.dto.BoardResponse
import com.b2.backoffice.domain.board.repository.BoardRepository
import com.b2.backoffice.domain.board.service.toResponse
import com.b2.backoffice.domain.exception.ModelNotFoundException
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 ModelNotFoundException("board", boardId)
        val user = userRepository.findByIdOrNull(userId)
            ?: throw ModelNotFoundException("user", userId)
        if (followRepository.findByUserIdAndBoardId(userId, boardId) == null) {
            followRepository.save(
                FollowEntity(
                    user = user,
                    board = board
                )
            )
        } else throw Exception("follow is already added")
    }

    override fun cancleFollow(userId: Int, boardId: Int) {
        val follow = followRepository.findByUserIdAndBoardId(userId, boardId)
            ?: throw ModelNotFoundException("follow", boardId)
        followRepository.delete(follow)
    }

    override fun getFollowList(userId: Int): List<BoardResponse> {
        val user = userRepository.findByIdOrNull(userId)
            ?: throw ModelNotFoundException("User", userId)
        val followList = followRepository.findAllByUserId(user.id!!).map { it.board.toResponse() }
        return followList
    }
}

 

어제의 코드에서 크게 변경된 점은 없고.. 주석처리 돼있던 것들만 풀어주고나서 오류생긴부분 살짝 수정해주거나 하는 식으로 작성했다.

 

오늘 내가 팀원을 도와준 부분 

 

PostEntity

package com.b2.backoffice.domain.post.model


import com.b2.backoffice.domain.board.model.BoardEntity
import com.b2.backoffice.domain.comment.model.CommentEntity
import com.b2.backoffice.domain.post.dto.PostResponse
import com.b2.backoffice.domain.post.dto.PostWithCommentResponse
import com.b2.backoffice.domain.user.model.UserEntity
import jakarta.persistence.*
import java.time.LocalDateTime

@Entity
@Table(name = "post")
class PostEntity(
    @Column(name = "created_at")
    val createdAt : LocalDateTime = LocalDateTime.now(),

    @Column(name = "nickname")
    var nickname : String,

    @Column(name = "title")
    var title : String,

    @Column(name = "contents")
    var contents : String,

    @Column(name = "likes")
    var likes : Int,

    @ManyToOne
    @JoinColumn(name = "user_id")
    val user : UserEntity,

    @ManyToOne
    @JoinColumn(name = "board_id")
    val board : BoardEntity,

    @OneToMany(
        orphanRemoval = true,
        mappedBy = "post",
        fetch = FetchType.LAZY,
        cascade = [CascadeType.ALL]
    )
    var comments : MutableList<CommentEntity> = mutableListOf()
)

{
    @Id
    @GeneratedValue(strategy = GenerationType. IDENTITY)
    val id : Int? = null
}


fun PostEntity.toResponse() : PostResponse {
    return PostResponse(
    id = id!!,
    createAt = createdAt,
    nickname = nickname,
    title = title,
    contents = contents,
    likes = likes,
    )
}


 

내가 이전에 해본것들의 복습수준이지만 이걸 또 팀원에게 설명하면서 해주는게 꽤 힘들었다.

그리고 팀원들의 Entity 기반으로 DB에 table도 만드는걸 도와주고 이부분엔 왜 이런코드를 쓰는지도 설명하면서 꽤 좋은 복습이 됐다.

 

일단 내일은 토큰에서 ID값이나 NickName 값을 빼오는 작업을 팀원들에게 공유할것 같다.

 

오늘의 한마디 : 요새는 마무리 시간만 되면 몸에 힘이 다 빠져서 TIL 쓰는것도 힘들다.. 하지만 한번 정한 이상 코드 복붙이라도 하루에 1 TIL 은 지켜볼 예정이다!