일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- 1과목
- MYSQL
- 스프링
- 알고리즘
- BFS
- 소프티어
- 회고
- 시나공
- 파이썬
- CJ UNIT
- 정보처리산업기사
- 자바
- 백준알고리즘
- python
- kotlin
- 코딩봉사
- 코딩교육봉사
- 백준 알고리즘
- 문제풀이
- SQL
- programmers
- java
- SW봉사
- 백준
- C++
- softeer
- 프로그래머스
- 데이터베이스
- 코틀린
- 공부일지
- Today
- Total
JIE0025
[Postman][3] depth가 1~3 인 카테고리 추가 (컨트롤러 요청메세지 테스트) 본문
어제 만들어놓은 이 JSON데이터를 보고,
카테고리를 추가하는데 이대로 들어올일은 없다고 생각이 들었다. (자식이 있는 상태로 카테고리 추가하는건 말이 안됨)
이런 이유로 하나씩 추가하면서 테스트 해줄거다
+ depth가 최대 3으로 해줄 것이기 떄문에 DTO 유효성 검사에 MIN(0) MAX(3)으로 줘야겠따.
{
"id:1,
"name":"Activity",
"categoryDepth":0
"children":[
{
"id": 2,
"name": "Study",
"categoryDepth": 1,
"children": [
{
"id": 3,
"name": "알고리즘",
"categoryDepth": 2,
"children": [
{
"id": 4,
"name": "개념반",
"categoryDepth": 3,
"children": []
}
]
}
]
}
]
}
POST로 보낼 데이터 생성
{
"name":"Activity",
"categoryDepth": 0
}
{
"name":"Study",
"categoryDepth": 1,
"parentId":1
}
{
"name":"Algorithm",
"categoryDepth": 2,
"parentId":2
}
{
"name":"코테반",
"categoryDepth": 3,
"parentId":3
}
전송결과
좋다 순서대로 넣으면 원하는 대로 결과가 나온다!
그럼 이제 부모id가 없는데 데이터를 넣었을 때를 확인해보자.
얘를 그냥 냅다 넣어보면 될것 같다.
{
"name":"코테반",
"categoryDepth": 3,
"parentId":3
}
내가 기대하는건, 부모가 없으면 아예 처리가 안되어야하는 것이다.
따라서 부모를 찾았는데 부모가 없으면 exception을 날려줘야 할 것 같다.
(최선이 아닐수도 있지만... try catch 연습이나하자)
현재 코드
@Transactional
public void createCategory (CategoryDto categoryDto) {
//부모 정보가 있는지 확인하고, 있으면 저장
Category parentCategory = null;
if(categoryDto.getCategoryDepth() > 0) {
parentCategory = categoryRepository.findById(categoryDto.getParentId()).orElse(null);
}
Category category = Category.builder()
.name(categoryDto.getName())
.parent(parentCategory)
.categoryDepth(categoryDto.getCategoryDepth())
.build();
//데이터 저장
categoryRepository.save(category);
//부모의 자식에 추가
if(parentCategory != null) {
parentCategory.getChildren().add(category);
}
}
개선 코드
@Transactional
public void createCategory (CategoryDto categoryDto) throws NullPointerException {
//부모 정보가 있는지 확인하고, 있으면 저장
Category parentCategory = null;
//depth가 0이 아닌 친구들의 부모 존재 체크
if(categoryDto.getCategoryDepth()!=0){
parentCategory = categoryRepository.findById(categoryDto.getParentId()).orElse(null);
if(Objects.isNull(parentCategory)){
System.out.println("부모가 null입니다.");
throw new NullPointerException("parent is null");
}
}
Category category = Category.builder()
.name(categoryDto.getName())
.parent(parentCategory)
.categoryDepth(categoryDto.getCategoryDepth())
.build();
//데이터 저장
categoryRepository.save(category);
//부모의 자식에 추가
if(parentCategory != null) {
parentCategory.getChildren().add(category);
}
}
@PostMapping
public ResponseEntity createCategory(@RequestBody CategoryDto categoryDto) {
//categoryService.createCategory(categoryDto);
try {
categoryService.createCategory(categoryDto);
} catch (Exception e) {
throw new RuntimeException(e);
}
return new ResponseEntity(HttpStatus.CREATED);
}
일단 널처리는 잘 된것 같은데 이게 최선일까?
런타임을 보내놓고 보니까 런타임 익셉션이 아니라 상태코드를 바꿔서 보내줘야할것 같은 느낌이 든다.
그래서 컨트롤러를 마지막으로 이렇게 처리했다.
@PostMapping
public ResponseEntity createCategory(@RequestBody CategoryDto categoryDto) {
//categoryService.createCategory(categoryDto);
try {
categoryService.createCategory(categoryDto);
} catch (Exception e) {
return new ResponseEntity(HttpStatus.BAD_REQUEST);
}
return new ResponseEntity(HttpStatus.CREATED);
}
오 개인적으로 굉장히 괜찮아보인다!!!!!! 배운거 이것저것 잘 써보는 느낌!!!
오늘은 여기까지 하고 자러가도 될것 같다 ㅎㅎ
++
어디까지가 커밋을 해야하는 범위인지 솔직히 잘 모르겠다.
이전걸 커밋해놓고 개선했다는걸 다시 커밋으로 날려야하나? 풀리퀘는 기능 개발이 끝나고 올려야하는것인가?
아직 헷갈리는게 많다.
커밋은 최소단위
- Controller, Red service - adkdhkjas 테스트코드까지 작동하는걸
- 일단 얘를 올려
- 거기서 서비스가 수정할 게 있음 > 잘못만들었다는 생각이 들거나 Create 수정을 했는데 delete 코드를 또 만졌어
파일로 생각하지말고, Create
기능단위가 좋음
shelve? 라는 기능이있는데 코드임시저장하는거!
ver a > git pull > a+ > shelve a+임시저장되고 내 코드는 a로 돌아감 > shelve 롤백하면 a+
'백엔드 > 테스트' 카테고리의 다른 글
[현재 상황 분석] 어디가 문제일지 & 앞으로 봐야할 부분들 찾기 (0) | 2022.12.19 |
---|---|
[Postman][4] Get Categories (컨트롤러 요청메세지 테스트) (0) | 2022.12.19 |
[MockMvc] CategoryControllerTest (1) depth가 0인 카테고리 추가 (0) | 2022.12.17 |
[Postman][2] id가 1인 카테고리 수정 (컨트롤러 요청메세지 테스트) (0) | 2022.12.17 |
[JPA] 카테고리 Entity DB 반영 체크 (0) | 2022.12.17 |