20240124 (수) BackOffice 프로젝트
2024. 1. 24. 21:16ㆍTIL
오늘은 내가 한 작업물보다는 다른팀원이 잘 수행하지 못하는 코드들을 도와주는 시간이 더 많았다.
일단 오늘 내가 한 부분
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 은 지켜볼 예정이다!
'TIL' 카테고리의 다른 글
20240126 (금) BackOffice 프로젝트 마무리 (0) | 2024.01.26 |
---|---|
20240125 (목) BackOffice 프로젝트 LikeCount 구현해보기 (0) | 2024.01.25 |
20240123 (화) BackOffice 프로젝트 기능구현 (1) | 2024.01.23 |
20240122 (월) BackOffice 프로젝트 (0) | 2024.01.22 |
20240119 (금) 코딩일지 (0) | 2024.01.19 |