본 캠프_26일차

졸용·2025년 3월 25일

TIL

목록 보기
27/144

⭐ Scheduler 프로젝트

중간 점검 - ScheduleController

package com.myproject.scheduler.controller;

import com.myproject.scheduler.dto.ScheduleRequestDto;
import com.myproject.scheduler.dto.ScheduleResponseDto;
import com.myproject.scheduler.entity.Scheduler;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/schedules")
@RequiredArgsConstructor
public class ScheduleController {

    private final Map<Long, Scheduler> scheduleList = new HashMap<>();

    // 1. 일정 추가 API
    @PostMapping
    public ScheduleResponseDto createSchedule(@RequestBody ScheduleRequestDto dto) {

        /**
         * 식별자가 중복되지 않도록 1씩 증가
         * scheduleList가 비어있으면 treu 반환 -> scheduleID에 1 할당
         * 비어있지 않으면 false 반환 -> scheduleList의 키 중 가장 큰 값에 1을 더한 값을 scheduleID에 할당
         */
        Long id = scheduleList.isEmpty() ? 1 : Collections.max(scheduleList.keySet()) + 1;

        /**
         * 요청받은 데이터로 Schedule 객체 생성
         */
        Scheduler schedule = new Scheduler(id, dto.getTitle(), dto.getContents(), dto.getWriter(), dto.getPassword(), LocalDateTime.now(), LocalDateTime.now());

        /**
         * Inmemory DB에 Schedule 저장
         */
        scheduleList.put(id, schedule);

        return new ScheduleResponseDto(schedule);
    }

    // 2. 일정 단일 조회 API
    @GetMapping("/{id}")
    public ScheduleResponseDto findScheduleById(@PathVariable Long id) {

        Scheduler schedule = scheduleList.get(id);

        return new ScheduleResponseDto(schedule);
    }

    // 3. 일정 목록 조회 API
    @GetMapping()
    public ScheduleResponseDto showAllSchedules(@PathVariable Long id) {

        Scheduler schedule = scheduleList.get(id);

        return new ScheduleResponseDto(schedule);
    }

    // 4. 일정 단일 (전체)수정 API
    @PutMapping("/{id}")
    public ScheduleResponseDto editScheduleById(@PathVariable Long id, @RequestBody ScheduleRequestDto dto) {

        Scheduler schedule = scheduleList.get(id);

        schedule.edit(dto);

        return new ScheduleResponseDto(schedule);
    }

    // 5. 일정 삭제 API
    @DeleteMapping("/{id}")
    public String deleteSchedule(@PathVariable Long id) {

        scheduleList.remove(id);  // remove 함수 사용

        return "일정 삭제 완료";
    }
}

✅ 트러블슈팅

  • 일정 생성 시 비밀번호 필수 기입하도록 처리 필요 (@NotNull 어노테이션 활용하기)

  • 일정 수정 시 비밀번호가 일치해야만 수정 가능하도록 처리 필요

  • 일정 목록 조회 API 기능하도록 수정해야 한다 → 기능 구현 완료. POSTMAN의 사용법 문제였다

profile
꾸준한 공부만이 답이다

1개의 댓글

comment-user-thumbnail
2025년 3월 25일

이렇게 방대한 정보를 한 화면에서 볼 수 있다는게 놀랍군요. 감사합니다

답글 달기