대머리개발자

인증서버 - 포럼게시판(코틀린) 본문

개발이야기/자봐

인증서버 - 포럼게시판(코틀린)

대머리개발자 2023. 5. 19. 12:07
728x90

 

인증(Oauth)서버에 포럼 게시판을 추가하는데 해당 부분은 코틀린으로 개발하고 싶어서 진행했다.

새로운 언어에 익숙해지는 일은 늘(?) 재미있다. 언어는 발전한다. 머물러 있지 않는다. Flow~

그래서 역사를 아는 것은 중요하다고 생각한다.. 현재의 단순한 개념은 갑툭튀 나오는 것이 아니다. 진화한다!

불편한 것들을 조금씩 야금야금 개선해 나간다.

그럼면에서 코틀린 딱 접했을 때 wow가 되는 것이다.  새로운것이 아니다 불편한 것을 개선한 것 만으로도 충분히 혁신이 가능한 것이다.

 

## 개선포인트

0. null처리

1. 람북 내제화 : 별도 플러그인이 처리가 아니라 그냥 알아서 처리 -> 보일러 플레이트 최소화 됨

2. 간결성 : Entity와 DTO를 하나의 파일에 작성. 그 외 편의성 !! 대박s

 

3. 논-블록킹처리 : RxJava는 제법 러닝 커브 존재 -> suspend

 

 

## 답글이 가능 게시판 비지니스로직 작성.. 하루도 최 걸리지 않았다. 실상 4월에 다 만들어 놓고 블로그는 지금 작성. ㅋ 바쁘닷.

    @Transactional
    fun create(boardDto:BoardDto): BoardDto? {
        if(boardDto.menuId == 0){
            throw IllegalArgumentException("menuId is null")
        }

        // 초기 게시판 데이터 등록
        var boardEntity = boardRepository.save(modelMapper.map(boardDto, Board::class.java))

        // 게시판 그룹핑 관련 수정
        boardEntity = if(boardDto.parentId == 0L){
            boardEntity.groupId = boardEntity.id!!  // 그룹핑을 위한
            updatePath(boardEntity)
        }else{
            // 답글을 위한 작업
            val parentBoard = get(boardDto.parentId) ?: throw Exception("parentBoard is null")
            boardEntity.groupId = parentBoard.groupId
            updatePath(boardEntity, parentBoard.path)
        }
        return boardEntity.id?.let { get(it) }
    }

    fun updatePath(board:Board, parentPath:String=""): Board{
        board.updatePath(
            (if("" == parentPath) ""  else "$parentPath>") + String.format("%010d", board.id)
        )
        return board
    }

 

 

답글에 해당하는 부분을 그룹핑하고 내부 그룹핑 글끼리는 Path를 통해서 정렬하면 정렬이 아다리!

1. 그룹으로 먼저 정렬

2. Path 정렬

    fun search(searchInfo: SearchInfo): MutableList<Board>? {
        return jpaQueryFactory.selectFrom(QBoard.board)
            .orderBy(QBoard.board.groupId.desc())
            .orderBy(QBoard.board.path.asc())
            .offset(searchInfo.filter.pageIndex)
            .limit(searchInfo.filter.pageSize)
            .fetch()
    }

 

모든 것이 좋았다...아....리액트로 화면 죄다 만들어 놓고 있는데...

신규 플젝은 뷰로..한데...이런 쉬방

728x90

'개발이야기 > 자봐' 카테고리의 다른 글

간단 로그인 프로세스  (0) 2023.06.15
16차 월급루팡의 일지(쉼표,)  (1) 2023.06.05
JPA - 더티체킹  (0) 2023.04.18
NULL 처리  (0) 2023.04.08
ThreadLocal  (0) 2023.04.07