package com.sparta.memo.controller;
import com.sparta.memo.dto.MemoRequestDto;
import com.sparta.memo.dto.MemoResponseDto;
import com.sparta.memo.entity.Memo;
import org.springframework.web.bind.annotation.*;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController // @Resoponcebody가 추가 된 컨트롤러
@RequestMapping("/api") // 기본 path를 잡아준다.
public class MemoController {
private final Map<Long, Memo> memoList = new HashMap<>(); // Map을 통해 내용을 저장한다.
@PostMapping("/memos") // 포스트 작성
public MemoResponseDto createMemo(@RequestBody MemoRequestDto requestDto) {
// RequestDto -> Entity
Memo memo = new Memo(requestDto);
// Memo Max ID Check
Long maxId = memoList.size() > 0 ? Collections.max(memoList.keySet()) + 1 : 1;
memo.setId(maxId);
// DB 저장
memoList.put(memo.getId(), memo);
// Entity -> ResponseDto
MemoResponseDto memoResponseDto = new MemoResponseDto(memo);
return memoResponseDto;
}
@GetMapping("/memos") // 메모 조회
public List<MemoResponseDto> getMemos() {
// Map To List
List<MemoResponseDto> responseList = memoList.values().stream()
.map(MemoResponseDto::new).toList();
return responseList;
}
@PutMapping("/memos/{id}") // 메모 수정
public Long updateMemo(@PathVariable Long id, @RequestBody MemoRequestDto requestDto) {
// 해당 메모가 DB에 존재하는지 확인
if(memoList.containsKey(id)) {
// 해당 메모 가져오기
Memo memo = memoList.get(id);
// memo 수정
memo.update(requestDto);
return memo.getId();
} else { // 오류시 thorw해준다.
throw new IllegalArgumentException("선택한 메모는 존재하지 않습니다.");
}
}
@DeleteMapping("/memos/{id}") // 메모 삭제
public Long deleteMemo(@PathVariable Long id) {
// 해당 메모가 DB에 존재하는지 확인
if(memoList.containsKey(id)) {
// 해당 메모 삭제하기
memoList.remove(id);
return id;
} else {
throw new IllegalArgumentException("선택한 메모는 존재하지 않습니다.");
}
}
}
하나하나 떼어놓고 보면 단순하고 복잡하지 않으나
처음부터 혼자 직접 만들라면 아마 못할거같다...
이외 클래스들은 이해했으나 이 부분은 너무 어렵다...
역시 보고 또 보는 방법밖에는 없는듯하다.
'개발공부' 카테고리의 다른 글
잊지말자 @RequestBody. feat.Column cannot be null (0) | 2024.08.15 |
---|---|
클래스 (0) | 2024.08.13 |
스프링 GetMapping (0) | 2024.08.09 |
[Git] 팀 프로젝트를 내 git으로 옮기기 (0) | 2024.08.09 |
17조 KPT 작성 (0) | 2024.08.08 |