Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- save/update
- Ingress Controller Fake
- 월급루팡 일지
- 7879
- 논블록킹 성능
- Loki 로그
- Armeria
- 핀포인트
- 플루터
- RedirectService
- 애자일 싫타
- ㅉ때
- 개발 어렵당.ㅠ
- pinpoint
- OIDC
- LPOS
- UnsupportedOperationException
- intellij
- jsonMarshaller
- reids
- 노드간 통신
- hbase 저장공간 설정
- pinpoint 2.5.3
- fake jwt
- jar 배포
- formik
- 오블완
- R2DBC Paging
- 티스토리챌린지
- nGinder
Archives
- Today
- Total
대머리개발자
인증서버 - 포럼게시판(코틀린) 본문
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 |