Skip to content

Commit

Permalink
Merge pull request #52 from studio-recoding/feat-schedule-crud
Browse files Browse the repository at this point in the history
[🚀feat] 스케쥴 수정 및 삭제 기능 개발
  • Loading branch information
JeonHaeseung authored May 1, 2024
2 parents bc8d81f + 93c64a8 commit 089dab4
Show file tree
Hide file tree
Showing 6 changed files with 74 additions and 34 deletions.
10 changes: 10 additions & 0 deletions src/main/java/Ness/Backend/domain/category/CategoryRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package Ness.Backend.domain.category;

import Ness.Backend.domain.category.entity.Category;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface CategoryRepository extends JpaRepository<Category, Long> {
Category findCategoryById(Long id);
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package Ness.Backend.domain.schedule.entity;
package Ness.Backend.domain.category.entity;

import Ness.Backend.domain.schedule.entity.Schedule;
import jakarta.persistence.*;
import lombok.Getter;

Expand Down
43 changes: 18 additions & 25 deletions src/main/java/Ness/Backend/domain/schedule/ScheduleController.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import Ness.Backend.domain.member.entity.Member;
import Ness.Backend.domain.schedule.dto.request.PostScheduleDto;
import Ness.Backend.domain.schedule.dto.request.PostScheduleTimeDto;
import Ness.Backend.domain.schedule.dto.request.PutScheduleDto;
import Ness.Backend.domain.schedule.dto.response.GetOneMonthSchedulesDto;
import Ness.Backend.global.auth.AuthUser;
import io.swagger.v3.oas.annotations.Operation;
Expand All @@ -19,38 +19,31 @@
public class ScheduleController {
private final ScheduleService scheduleService;

@GetMapping("/dev")
@Operation(summary = "개발 테스트용 특정 사용자의 한달치 스케쥴 내역", description = "&month=2024-01 와 같은 형식으로 데이터가 전달됩니다.")
public ResponseEntity<GetOneMonthSchedulesDto> getUserSchedule(@RequestParam String month){
GetOneMonthSchedulesDto oneUserMonthSchedules = scheduleService.getOneMonthUserSchedule(1L, month);
return new ResponseEntity<>(oneUserMonthSchedules, HttpStatusCode.valueOf(200));
}

@PostMapping("/new/dev")
@Operation(summary = "개발 테스트용 새로운 스케쥴 내역", description = "새로운 스케쥴 내역 저장하는 API 입니다.")
public ResponseEntity<Long> postUserSchedule(@RequestBody PostScheduleDto postScheduleDto){
Long userId = scheduleService.postNewUserSchedule(1L, postScheduleDto);
return new ResponseEntity<>(userId, HttpStatusCode.valueOf(201));
}

@GetMapping("")
@Operation(summary = "특정 사용자의 한달치 스케쥴 내역", description = "&month=2024-01 와 같은 형식으로 데이터가 전달됩니다.")
public ResponseEntity<GetOneMonthSchedulesDto> getUserSchedule(@AuthUser Member member, @RequestParam String month){
GetOneMonthSchedulesDto oneUserMonthSchedules = scheduleService.getOneMonthUserSchedule(member.getId(), month);
return new ResponseEntity<>(oneUserMonthSchedules, HttpStatusCode.valueOf(200));
}

@PostMapping("/time")
@Operation(summary = "특정 스케쥴의 시간을 바꾸는 API입니다.", description = "&month=2024-01 와 같은 형식으로 데이터가 전달됩니다.")
public ResponseEntity<?> postUserScheduleTime(@AuthUser Member member, @RequestBody PostScheduleTimeDto postScheduleTimeDto){
scheduleService.changeScheduleTime(member.getId(), postScheduleTimeDto);
return new ResponseEntity<>(HttpStatusCode.valueOf(200));
}

@PostMapping("/new")
@Operation(summary = "새로운 스케쥴 내역", description = "새로운 스케쥴 내역 저장하는 API 입니다.")
public ResponseEntity<Long> postUserSchedule(@AuthUser Member member, @RequestBody PostScheduleDto postScheduleDto){
@PostMapping("")
@Operation(summary = "새로운 스케쥴 생성", description = "새로운 스케쥴 내역 저장하는 API 입니다.")
public ResponseEntity<Long> postOneSchedule(@AuthUser Member member, @RequestBody PostScheduleDto postScheduleDto){
Long userId = scheduleService.postNewUserSchedule(member.getId(), postScheduleDto);
return new ResponseEntity<>(userId, HttpStatusCode.valueOf(201));
}

@PutMapping("")
@Operation(summary = "하나의 스케쥴 변경", description = "하나의 스케쥴의 정보를 변경하는 API로 스케쥴, 위치, 사람, 시간 모두 PUT으로 처리합니다.")
public ResponseEntity<Long> putOneSchedule(@AuthUser Member member, @RequestBody PutScheduleDto putScheduleDto){
Long userId = scheduleService.changeSchedule(member.getId(), putScheduleDto);
return new ResponseEntity<>(userId, HttpStatusCode.valueOf(200));
}

@DeleteMapping("")
@Operation(summary = "하나의 스케쥴 삭제", description = "하나의 스케쥴의 정보를 변경하는 API로 스케쥴, 위치, 사람, 시간 모두 PUT으로 처리합니다.")
public ResponseEntity<Long> deleteOneSchedule(@AuthUser Member member, @RequestParam Long id){
scheduleService.deleteSchedule(id);
return new ResponseEntity<>(HttpStatusCode.valueOf(200));
}
}
26 changes: 22 additions & 4 deletions src/main/java/Ness/Backend/domain/schedule/ScheduleService.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package Ness.Backend.domain.schedule;

import Ness.Backend.domain.category.CategoryRepository;
import Ness.Backend.domain.category.entity.Category;
import Ness.Backend.domain.member.MemberRepository;
import Ness.Backend.domain.member.entity.Member;
import Ness.Backend.domain.schedule.dto.request.PostFastApiScheduleDto;
import Ness.Backend.domain.schedule.dto.request.PostScheduleDto;
import Ness.Backend.domain.schedule.dto.request.PostScheduleTimeDto;
import Ness.Backend.domain.schedule.dto.request.PutScheduleDto;
import Ness.Backend.domain.schedule.dto.response.GetOneMonthSchedulesDto;
import Ness.Backend.domain.schedule.dto.response.GetScheduleDetailDto;
import Ness.Backend.domain.schedule.dto.response.GetScheduleDto;
Expand All @@ -28,6 +30,7 @@
public class ScheduleService {
private final ScheduleRepository scheduleRepository;
private final MemberRepository memberRepository;
private final CategoryRepository categoryRepository;
private final FastApiScheduleApi fastApiScheduleApi;

@Transactional(readOnly = true)
Expand Down Expand Up @@ -58,9 +61,24 @@ public GetOneMonthSchedulesDto getOneMonthUserSchedule(Long id, String date){
return new GetOneMonthSchedulesDto(getScheduleDtos);
}

public void changeScheduleTime(Long id, PostScheduleTimeDto postScheduleTimeDto){
Schedule schedule = scheduleRepository.findScheduleById(postScheduleTimeDto.getId());
schedule.changeTime(postScheduleTimeDto.getStartTime(), postScheduleTimeDto.getEndTime());
@Transactional
public Long changeSchedule(Long id, PutScheduleDto putScheduleDto){
Schedule schedule = scheduleRepository.findScheduleById(putScheduleDto.getId());
Category category = categoryRepository.findCategoryById(putScheduleDto.getCategoryNum());
schedule.changeSchedule(
putScheduleDto.getInfo(),
putScheduleDto.getLocation(),
putScheduleDto.getPerson(),
putScheduleDto.getStartTime(),
putScheduleDto.getEndTime(),
category);
return schedule.getId();
}

@Transactional
public void deleteSchedule(Long id){
Schedule schedule = scheduleRepository.findScheduleById(id);
scheduleRepository.delete(schedule);
}

public Long postNewUserSchedule(Long id, PostScheduleDto postScheduleDto){
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package Ness.Backend.domain.schedule.dto.request;


import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
Expand All @@ -13,16 +14,29 @@
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class PostScheduleTimeDto {
public class PutScheduleDto {
@Schema(description = "스케쥴의 DB 기본키", example = "1")
@JsonProperty("id")
private Long id;

@Schema(description = "스케쥴 텍스트 내용", example = "AI 공부")
@JsonProperty("title")
private String info;

@Schema(description = "스케쥴 위치", example = "이화여대 ECC")
private String location;

@Schema(description = "스케쥴 사람", example = "영희")
private String person;

@Schema(description = "스케쥴 시작 시간", example = "2024-03-08T15:07:27.056103+09:00")
@JsonProperty("start")
private ZonedDateTime startTime;

@Schema(description = "스케쥴 끝 시간", example = "2024-03-08T15:07:27.056103+09:00")
@JsonProperty("end")
private ZonedDateTime endTime;
}

@Schema(description = "스케쥴 카테고리 DB 넘버", example = "공부")
private Long categoryNum;
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package Ness.Backend.domain.schedule.entity;

import Ness.Backend.domain.category.entity.Category;
import Ness.Backend.domain.chat.entity.Chat;
import Ness.Backend.domain.member.entity.Member;
import jakarta.persistence.*;
Expand Down Expand Up @@ -54,9 +55,12 @@ public Schedule(Long id, String info, String location, String person, ZonedDateT
this.chat = chat;
}

public void changeTime(ZonedDateTime startTime, ZonedDateTime endTime){
public void changeSchedule(String info, String location, String person, ZonedDateTime startTime, ZonedDateTime endTime, Category category){
this.info = info;
this.location = location;
this.person = person;
this.startTime = startTime;
this.endTime = endTime;
this.category = category;
}

}

0 comments on commit 089dab4

Please sign in to comment.