Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,16 @@ public ApiResponse<TimeTableResponseDTO.TimeTableListDTO> getTimeTableList(

@Override
public ApiResponse<TimeTableResponseDTO.AddSubjectDTO> addSubject(
UserDetails userDetails, Long subjectId) {
TimeTableResponseDTO.AddSubjectDTO result = timeTableService.addSubject(userDetails, subjectId);
UserDetails userDetails, TimeTableRequestDTO.AddSubjectDTO subjectDTO) {
TimeTableResponseDTO.AddSubjectDTO result =
timeTableService.addSubject(userDetails, subjectDTO.getSubjectIds());
return ApiResponse.onSuccess(result);
}

@Override
public ApiResponse<TimeTableResponseDTO.AddSubjectDTO> addSelfSubject(
public ApiResponse<TimeTableResponseDTO.SelfSubjectDTO> addSelfSubject(
UserDetails userDetails, TimeTableRequestDTO.selfSubjectDTO request) {
TimeTableResponseDTO.AddSubjectDTO result =
TimeTableResponseDTO.SelfSubjectDTO result =
timeTableService.addSelfSubject(userDetails, request);
return ApiResponse.onSuccess(result);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,20 +45,20 @@ ApiResponse<TimeTableResponseDTO.TimeTableListDTO> getTimeTableList(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size);

@PostMapping("/{subjectId}")
@PostMapping("/add")
@Operation(summary = "선택한 과목 내 시간표에 추가하기", description = "선택한 수업 내 시간표에 추가하기")
@ApiErrorCodeExample(TimeTableErrorStatus.class)
ApiResponse<TimeTableResponseDTO.AddSubjectDTO> addSubject(
@Parameter(name = "userDetails", description = "인증된 사용자 정보", hidden = true)
@AuthenticationPrincipal
UserDetails userDetails,
@Parameter(name = "subjectId", description = "과목 아이디", required = true) @PathVariable
Long subjectId);
@Parameter(name = "subjectId", description = "과목 아이디", required = true) @RequestBody
TimeTableRequestDTO.AddSubjectDTO subjectDTO);

@PostMapping("/self")
@Operation(summary = "수업 직접 추가하기", description = "수업 직접 추가하는 api")
@ApiErrorCodeExample(TimeTableErrorStatus.class)
ApiResponse<TimeTableResponseDTO.AddSubjectDTO> addSelfSubject(
ApiResponse<TimeTableResponseDTO.SelfSubjectDTO> addSelfSubject(
@Parameter(name = "userDetails", description = "인증된 사용자 정보", hidden = true)
@AuthenticationPrincipal
UserDetails userDetails,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package org.example.skuhomepage.domain.timetable.dto;

import java.util.List;

import jakarta.validation.constraints.NotBlank;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Getter;

public class TimeTableRequestDTO {
Expand All @@ -20,4 +23,10 @@ public static class selfSubjectDTO {
@Schema(description = "장소", example = "북악관 608호")
private String classroom;
}

@Getter
@AllArgsConstructor
public static class AddSubjectDTO {
private List<Long> subjectIds;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,10 @@ public record TimeTableListDTO(
@Schema(description = "마지막 존재 여부", example = "true") boolean hasNext,
@Schema(description = "다음 페이지", example = "2") int nextPage) {}

public record AddSubjectDTO(@Schema(description = "과목 id", example = "1") Long subjectId) {}
public record AddSubjectDTO(
@Schema(description = "과목 id", example = "1") List<Long> subjectIds) {}

public record SelfSubjectDTO(@Schema(description = "과목 id", example = "1") Long subjectId) {}

public record DeleteSubjectDTO(@Schema(description = "과목 id", example = "1") Long subjectId) {}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
Expand Down Expand Up @@ -92,11 +93,7 @@ public TimeTableListDTO getTimeTableList(UserDetails userDetails, Pageable pagea
return new TimeTableListDTO(timeTableDTOS, subjectList.hasNext(), pageable.getPageNumber() + 1);
}

public AddSubjectDTO addSubject(UserDetails userDetails, Long subjectId) {
Subject subject =
subjectRepository
.findById(subjectId)
.orElseThrow(() -> new GeneralException(TimeTableErrorStatus.SUBJECT_NOT_FOUND));
public AddSubjectDTO addSubject(UserDetails userDetails, List<Long> subjectIds) {
TimeTable timeTable =
timeTableRepository
.findByUser_Account(userDetails.getUsername())
Expand All @@ -115,24 +112,33 @@ public AddSubjectDTO addSubject(UserDetails userDetails, Long subjectId) {
.build();
return timeTableRepository.save(newTimeTable);
});
boolean isAlreadyAdded =
timeTableSubjectRepository.existsByTimeTableAndSubject(timeTable, subject);
if (isAlreadyAdded) {
throw new GeneralException(TimeTableErrorStatus.SUBJECT_ALREADY_EXIST);
List<Long> addedSubjectIds = new ArrayList<>();

for (Long subjectId : subjectIds) {
Subject subject =
subjectRepository
.findById(subjectId)
.orElseThrow(() -> new GeneralException(TimeTableErrorStatus.SUBJECT_NOT_FOUND));

boolean isAlreadyAdded =
timeTableSubjectRepository.existsByTimeTableAndSubject(timeTable, subject);
if (!isAlreadyAdded) {
TimeTableSubject timeTableSubject =
TimeTableSubject.builder()
.timeTable(timeTable)
.subject(subject)
.isCustomSubject(false)
.build();

timeTableSubjectRepository.save(timeTableSubject);
addedSubjectIds.add(subject.getId());
}
}

TimeTableSubject timeTableSubject =
TimeTableSubject.builder()
.timeTable(timeTable)
.subject(subject)
.isCustomSubject(false)
.build();

timeTableSubjectRepository.save(timeTableSubject);
return new AddSubjectDTO(subject.getId());
return new AddSubjectDTO(addedSubjectIds);
}

public AddSubjectDTO addSelfSubject(UserDetails userDetails, selfSubjectDTO request) {
public TimeTableResponseDTO.SelfSubjectDTO addSelfSubject(
UserDetails userDetails, selfSubjectDTO request) {
Subject subject =
subjectRepository.save(
Subject.builder()
Expand Down Expand Up @@ -165,7 +171,7 @@ public AddSubjectDTO addSelfSubject(UserDetails userDetails, selfSubjectDTO requ
.build();

timeTableSubjectRepository.save(timeTableSubject);
return new AddSubjectDTO(subject.getId());
return new TimeTableResponseDTO.SelfSubjectDTO(subject.getId());
}

public DeleteSubjectDTO deleteSubject(UserDetails userDetails, Long subjectId) {
Expand Down
Loading