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 @@ -3,7 +3,6 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand Down Expand Up @@ -35,7 +34,7 @@ public ActivitiesResponse getActivities(String year) {
List<String> imageUrlsList = parseImageUrls(activity.getImageUrls());
return ActivityResponse.of(activity, imageUrlsList);
})
.collect(Collectors.toList());
.toList();

return new ActivitiesResponse(activityResponseList);
}
Expand All @@ -46,8 +45,8 @@ private List<String> parseImageUrls(String imageUrls) {
}

return Arrays.stream(imageUrls.split(","))
.map(String::trim)
.map(String::strip)
.map(url -> url.replace("\n", "").replace("\r", "")) // 개행 문자 제거
.collect(Collectors.toList());
.toList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ public record DiningResponse(
Integer kcal,

@Schema(description = "식단", example = """
["병아리콩밥", "(탕)소고기육개장", "땡초부추전", "고구마순들깨볶음", "총각김치", "생야채샐러드&D", "누룽지탕"]""")
["병아리콩밥", "(탕)소고기육개장", "땡초부추전", "고구마순들깨볶음", "총각김치", "생야채샐러드&D", "누룽지탕"]
""")
List<String> menu,

@Schema(description = "이미지 URL", example = "https://stage.koreatech.in/image.jpg")
Expand All @@ -57,6 +58,7 @@ public record DiningResponse(
@Schema(description = "메뉴 변경 여부", example = "true")
Boolean isChanged
) {

public static DiningResponse from(Dining dining) {
return new DiningResponse(
dining.getId(),
Expand All @@ -78,7 +80,7 @@ public static DiningResponse from(Dining dining) {
public static List<String> toListMenus(String menu) {
menu = menu.substring(1, menu.length() - 1);
return Stream.of(menu.split(","))
.map(str -> str.trim().replace("\"", ""))
.map(str -> str.strip().replace("\"", ""))
.toList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import in.koreatech.koin.domain.timetable.dto.SemesterResponse;
import in.koreatech.koin.domain.timetable.dto.LectureResponse;
import in.koreatech.koin.domain.timetable.dto.SemesterResponse;
import in.koreatech.koin.domain.timetable.dto.TimeTableRequest;
import in.koreatech.koin.domain.timetable.dto.TimeTableResponse;
import in.koreatech.koin.domain.timetable.dto.TimeTableUpdateRequest;
Expand Down Expand Up @@ -65,7 +65,7 @@ ResponseEntity<List<LectureResponse>> getLecture(
@Operation(summary = "시간표 정보 조회")
@SecurityRequirement(name = "Jwt Authentication")
@GetMapping("/timetables")
ResponseEntity<List<TimeTableResponse>> getTimeTables(
ResponseEntity<TimeTableResponse> getTimeTables(
@RequestParam(value = "semester") String semester,
@Auth(permit = {STUDENT}) Long userId
);
Expand All @@ -81,7 +81,7 @@ ResponseEntity<List<TimeTableResponse>> getTimeTables(
@Operation(summary = "시간표 정보 생성")
@SecurityRequirement(name = "Jwt Authentication")
@PostMapping("/timetables")
ResponseEntity<List<TimeTableResponse>> createTimeTables(
ResponseEntity<TimeTableResponse> createTimeTables(
@RequestBody TimeTableRequest timeTableRequest,
@Auth(permit = {STUDENT}) Long userId
);
Expand All @@ -97,7 +97,7 @@ ResponseEntity<List<TimeTableResponse>> createTimeTables(
@Operation(summary = "시간표 정보 수정")
@SecurityRequirement(name = "Jwt Authentication")
@PutMapping("/timetables")
ResponseEntity<List<TimeTableResponse>> updateTimeTable(
ResponseEntity<TimeTableResponse> updateTimeTable(
@RequestBody TimeTableUpdateRequest request,
@Auth(permit = {STUDENT}) Long userId
);
Expand All @@ -113,7 +113,7 @@ ResponseEntity<List<TimeTableResponse>> updateTimeTable(
@Operation(summary = "시간표 삭제")
@SecurityRequirement(name = "Jwt Authentication")
@PutMapping("/timetables")
ResponseEntity deleteTimeTableById(
ResponseEntity<Void> deleteTimeTableById(
@RequestParam(value = "id") Long id,
@Auth(permit = {STUDENT}) Long userId
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,34 +46,34 @@ public ResponseEntity<List<SemesterResponse>> getSemesters() {
}

@GetMapping("/timetables")
public ResponseEntity<List<TimeTableResponse>> getTimeTables(
public ResponseEntity<TimeTableResponse> getTimeTables(
@RequestParam(name = "semester") String semester,
@Auth(permit = {STUDENT}) Long userId
) {
List<TimeTableResponse> timeTableResponse = timetableService.getTimeTables(userId, semester);
TimeTableResponse timeTableResponse = timetableService.getTimeTables(userId, semester);
return ResponseEntity.ok(timeTableResponse);
}

@PostMapping("/timetables")
public ResponseEntity<List<TimeTableResponse>> createTimeTables(
public ResponseEntity<TimeTableResponse> createTimeTables(
@Valid @RequestBody TimeTableRequest request,
@Auth(permit = {STUDENT}) Long userId
) {
List<TimeTableResponse> timeTableResponse = timetableService.createTimeTables(userId, request);
TimeTableResponse timeTableResponse = timetableService.createTimeTables(userId, request);
return ResponseEntity.ok(timeTableResponse);
}

@PutMapping("/timetables")
public ResponseEntity<List<TimeTableResponse>> updateTimeTable(
public ResponseEntity<TimeTableResponse> updateTimeTable(
@Valid @RequestBody TimeTableUpdateRequest request,
@Auth(permit = {STUDENT}) Long userId
) {
List<TimeTableResponse> timeTableResponse = timetableService.updateTimeTables(userId, request);
TimeTableResponse timeTableResponse = timetableService.updateTimeTables(userId, request);
return ResponseEntity.ok(timeTableResponse);
}

@DeleteMapping("/timetable")
public ResponseEntity deleteTimeTableById(
public ResponseEntity<Void> deleteTimeTableById(
@RequestParam(name = "id") Long id,
@Auth(permit = {STUDENT}) Long userId
) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package in.koreatech.koin.domain.timetable.dto;

import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.NOT_REQUIRED;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
Expand All @@ -12,72 +14,93 @@

@JsonNaming(value = SnakeCaseStrategy.class)
public record TimeTableResponse(
@Schema(name = "시간표 번호", example = "1")
Long id,

@Schema(name = "과목 코드", example = "ARB244")
String code,

@Schema(description = "강의 이름", example = "한국사")
String classTitle,

@Schema(description = "강의 시간", example = "[204, 205, 206, 207, 302, 303]")
List<Integer> classTime,

@Schema(description = "강의 장소", example = "null")
String classPlace,

@Schema(name = "강의 교수", example = "이돈우")
String professor,

@Schema(name = "대상 학년", example = "3")
String grades,

@Schema(name = "분반", example = "01")
String lectureClass,

@Schema(name = "대상", example = "디자 1 건축")
String target,

@Schema(name = "수강 인원", example = "25")
String regularNumber,
@Schema(name = "학기", example = "20241")
String semester,

@Schema(name = "설계 학점", example = "0")
String designScore,

@Schema(name = "학부", example = "디자인ㆍ건축공학부")
String department,

@Schema(name = "memo", example = "null")
String memo
@Schema(name = "시간표 상세정보")
List<InnerTimeTableResponse> timetable
) {

private static final int INITIAL_BRACE_INDEX = 1;
@JsonNaming(value = SnakeCaseStrategy.class)
public record InnerTimeTableResponse(
@Schema(name = "시간표 ID", example = "1")
Long id,

@Schema(name = "과목 코드", example = "ARB244")
String regularNumber,

@Schema(name = "과목 코드", example = "ARB244")
String code,

@Schema(description = "설계 학점", example = "0")
String designScore,

@Schema(description = "강의 시간", example = "[204, 205, 206, 207, 302, 303]")
List<Integer> classTime,

@Schema(description = "강의 장소", example = "null")
String classPlace,

@Schema(description = "메모", example = "null", requiredMode = NOT_REQUIRED)
String memo,

@Schema(name = "대상 학년", example = "3")
String grades,

@Schema(name = "강의 이름", example = "한국사")
String classTitle,

@Schema(name = "분반", example = "01")
String lectureClass,

@Schema(name = "대상", example = "디자 1 건축")
String target,

@Schema(name = "강의 교수", example = "이돈우")
String professor,

@Schema(name = "학부", example = "디자인ㆍ건축공학부")
String department
) {

public static List<InnerTimeTableResponse> from(List<TimeTable> timeTables) {
return timeTables.stream()
.map(it -> new InnerTimeTableResponse(
it.getId(),
it.getRegularNumber(),
it.getCode(),
it.getDesignScore(),
parseIntegerClassTimesFromString(it.getClassTime()),
it.getClassPlace(),
it.getMemo(),
it.getGrades(),
it.getClassTitle(),
it.getLectureClass(),
it.getTarget(),
it.getProfessor(),
it.getDepartment()
)
)
.toList();
}

public static TimeTableResponse from(TimeTable timeTable) {
}

public static TimeTableResponse of(String semester, List<TimeTable> timeTables) {
return new TimeTableResponse(
timeTable.getId(),
timeTable.getCode(),
timeTable.getClassTitle(),
parseIntegerClassTimesFromString(timeTable.getClassTime()),
timeTable.getClassPlace(),
timeTable.getProfessor(),
timeTable.getGrades(),
timeTable.getLectureClass(),
timeTable.getTarget(),
timeTable.getRegularNumber(),
timeTable.getDesignScore(),
timeTable.getDepartment(),
timeTable.getMemo()
semester,
InnerTimeTableResponse.from(timeTables)
);
}

private static final int INITIAL_BRACE_INDEX = 1;

private static List<Integer> parseIntegerClassTimesFromString(String classTime) {
String classTimeWithoutBrackets = classTime.substring(INITIAL_BRACE_INDEX,
classTime.length() - 1);
String classTimeWithoutBrackets = classTime.substring(INITIAL_BRACE_INDEX, classTime.length() - 1);

if (!classTimeWithoutBrackets.isEmpty()) {
return Arrays.stream(classTimeWithoutBrackets.split(", "))
return Arrays.stream(classTimeWithoutBrackets.split(","))
.map(String::strip)
.map(Integer::parseInt)
.toList();
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,35 +40,30 @@ public List<LectureResponse> getLecturesBySemester(String semester) {
.toList();
}

public List<TimeTableResponse> getTimeTables(Long userId, String semester) {
Semester semesterEntity = semesterRepository.getBySemester(semester);

return getTimeTableResponse(userId, semesterEntity.getId());
public TimeTableResponse getTimeTables(Long userId, String semesterRequest) {
Semester semester = semesterRepository.getBySemester(semesterRequest);
return getTimeTableResponse(userId, semester);
}

@Transactional
public List<TimeTableResponse> createTimeTables(Long userId, TimeTableRequest request) {
public TimeTableResponse createTimeTables(Long userId, TimeTableRequest request) {
User user = userRepository.getById(userId);
Semester semester = semesterRepository.getBySemester(request.semester());

for (TimeTableRequest.InnerTimeTableRequest timeTableRequest : request.timetable()) {
TimeTable timeTable = timeTableRequest.toTimeTable(user, semester);
timeTableRepository.save(timeTable);
}

return getTimeTableResponse(userId, semester.getId());
return getTimeTableResponse(userId, semester);
}

@Transactional
public List<TimeTableResponse> updateTimeTables(Long userId, TimeTableUpdateRequest request) {
public TimeTableResponse updateTimeTables(Long userId, TimeTableUpdateRequest request) {
Semester semester = semesterRepository.getBySemester(request.semester());

for (TimeTableUpdateRequest.InnerTimeTableRequest timeTableRequest : request.timetable()) {
TimeTable timeTable = timeTableRepository.getById(timeTableRequest.id());
timeTable.update(timeTableRequest);
}

return getTimeTableResponse(userId, semester.getId());
return getTimeTableResponse(userId, semester);
}

@Transactional
Expand All @@ -77,11 +72,8 @@ public void deleteTimeTable(Long id) {
timeTable.updateIsDeleted(true);
}

private List<TimeTableResponse> getTimeTableResponse(Long userId, Long semesterId) {
List<TimeTable> timeTables = timeTableRepository.findAllByUserIdAndSemesterId(userId, semesterId);

return timeTables.stream()
.map(TimeTableResponse::from)
.toList();
private TimeTableResponse getTimeTableResponse(Long userId, Semester semester) {
List<TimeTable> timeTables = timeTableRepository.findAllByUserIdAndSemesterId(userId, semester.getId());
return TimeTableResponse.of(semester.getSemester(), timeTables);
}
}
Loading