[내일배움캠프 Spring 4기] 25일차 TIL - Use Case Diagram | API 명세서 | ERD Diagram | Entity & Dto | Controller

서예진·2024년 1월 23일
0

오늘의 학습 키워드

▸ 코트 카타
▸ 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

  • 서비스와 사용자 간의 상호작용을 다이어그램으로 표현한 것
  • 그리는 순서
    1) actor 식별
    2) useCase 식별
    3) relation 정의
  • actor 식별 - 사용자 1명
  • useCase 식별 - 일정 등록, 선택한 일정 조회, 모든 일정 조회, 일정 수정, 일정 삭제
  • relation
    • 일정 등록시, 저장된 일정 정보확인 : include
    • 선택 일정 조회시, 선택 일정 입력 : include
    • 일정 수정시, 선택 일정 입력 : inlcude
    • 일정 수정시, 저장된 비밀번호와 일치하는지 확인 : include
    • 일정 수정시, 수정 저장된 일정 정보확인 : include
    • 일정 삭제시, 저장된 비밀번호와 일치하는지 확인 : include

▸ 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){
    }
}

🔥만들다가 도저히 이건 아닌 것 같아서 강의를 다시 듣기로 했다...

profile
안녕하세요

0개의 댓글