오늘의 학습 키워드
▸ 코트 카타
▸ Use Case Diagram
▸ API 명세서
▸ ERD Diagram
▸ Entity & Dto
▸ Controller
▸ 코트 카타
2024년 1월 23일 - [프로그래머스] 11: k번째 수 | 두 개 뽑아서 더하기 | 가장 가까운 같은 글자
🥲 아직 Spring 입문 주차의 강의를 다 듣지도 못했지만 오늘까지가 과제 1차 제출이기 때문에 과제를 하면서 그때 그때 모르는 것에 대해 찾아서 공부하고자 했다.
😄 일단 과제 관련해서 내가 할 수 있는 것 : API 명세서, ERD, 기본적인 Controller
😭 내가 모르는 것 : Use Case Diagram, Spring과 DB 연동
📍요구사항:필수 구현 기능
▸ Use Case Diagram
▸ API 명세서
Notion을 사용하여 API 명세서를 작성했다.
❗️ Request부분을 작성하는데 헷갈렸다. 일정 등록과 일정 수정은 Dto객체가 있어서 쉽게 작성했지만 나머지 부분들은 어떻게 작성해야하는지 몰랐다. 아직 Request에 대한 공부가 덜 되어있는 것 같다.
▸ ERD Diagram
일단 일정을 하나의 entity로 보고 다이어그램을 작성했다.
▸ Entity & Dto
먼저 Entity와 Dto 객체를 만들었다.
[Entity]
package com.sparta.calendar.entity;
import com.sparta.calendar.dto.CalendarRequestDto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Calendar {
private String title;
private String contents;
private String manager;
private String password;
private String date;
public Calendar(CalendarRequestDto requestDto){
this.title = requestDto.getTitle();
this.contents = requestDto.getContents();
this.manager = requestDto.getManager();
this.password = requestDto.getPassword();
this.date = requestDto.getDate();
}
}
package com.sparta.calendar.dto;
import lombok.Getter;
@Getter
public class CalendarRespondeDto {
private String title;
private String contents;
private String manager;
private String password;
private String date;
}
package com.sparta.calendar.dto;
import lombok.Getter;
@Getter
public class CalendarRequestDto {
private String title;
private String contents;
private String manager;
private String password;
private String date;
}
▸ Controller
우선, 강의 예시였던 메모장 프로젝트를 참고했다.
DB 연동에 대해서 아직 미숙하기 때문에 Map을 활용했다.
package com.sparta.calendar.controller;
import com.sparta.calendar.dto.CalendarRequestDto;
import com.sparta.calendar.dto.CalendarRespondeDto;
import com.sparta.calendar.entity.Calendar;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/api")
public class CalendarController {
private final Map<String, Calendar> calendars = new HashMap<>();
@PostMapping("/calendar")
public CalendarRespondeDto createSchedule(@RequestBody CalendarRequestDto requestDto){
//requestdto -> entity
Calendar calendar = new Calendar(requestDto);
//DB에 저장
calendars.put(calendar.getPassword(), calendar);
//entity -> responsedto
CalendarRespondeDto calendarRespondeDto = new CalendarRespondeDto(calendar);
return calendarRespondeDto;
}
//전체 일정 목록 조회
@GetMapping("/calendar")
public List<CalendarRespondeDto> getCalendars(){
//map to list
List<CalendarRespondeDto> responseList = calendars.values().stream()
.map(CalendarRespondeDto::new).toList();
return responseList;
}
//선택 일정 조회
@GetMapping("/calendar/{date}")
public CalendarRespondeDto getCalendar(@PathVariable int date, @RequestBody CalendarRequestDto requestDto){
// 해당 일정이 DB에 있는지 확인
}
//일정 수정
@PutMapping("/calendar/date/{date}/password/{password}")
public CalendarRespondeDto updateCalendar(@PathVariable int date, @PathVariable String password, @RequestBody CalendarRequestDto requestDto){
}
}
🔥만들다가 도저히 이건 아닌 것 같아서 강의를 다시 듣기로 했다...