Skip to content

Commit

Permalink
Merge pull request #64 from uswLectureEvaluation/feat/lecture
Browse files Browse the repository at this point in the history
시간표 생성시 현재 학기 강의 검색
  • Loading branch information
wonslee authored Jan 7, 2024
2 parents 23d6b92 + 077956d commit fea0e9d
Show file tree
Hide file tree
Showing 25 changed files with 731 additions and 92 deletions.
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ build/
/src/main/resources/application-prod.yml
/src/main/resources/application-dev.yml
/src/main/resources/application-local.yml
/src/test/resources/*.yml

*.json
*.DS_Store
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package usw.suwiki.domain.evaluatepost.service;

import static usw.suwiki.global.exception.ExceptionType.POSTS_WRITE_OVERLAP;

import java.util.ArrayList;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -12,28 +16,25 @@
import usw.suwiki.domain.evaluatepost.service.dto.FindByLectureToJson;
import usw.suwiki.domain.lecture.domain.Lecture;
import usw.suwiki.domain.lecture.service.LectureCRUDService;
import usw.suwiki.domain.lecture.service.LectureService;
import usw.suwiki.domain.user.user.User;
import usw.suwiki.domain.user.user.service.UserCRUDService;
import usw.suwiki.global.PageOption;
import usw.suwiki.global.exception.errortype.EvaluatePostException;

import java.util.ArrayList;
import java.util.List;

import static usw.suwiki.global.exception.ExceptionType.POSTS_WRITE_OVERLAP;

@Service
@RequiredArgsConstructor
public class EvaluatePostService {

private final EvaluatePostCRUDService evaluatePostCRUDService;
private final LectureCRUDService lectureCRUDService;
private final LectureService lectureService;
private final UserCRUDService userCRUDService;

@Transactional
public void write(EvaluatePostSaveDto evaluatePostData, Long userIdx, Long lectureId) {
checkAlreadyWrite(userIdx, lectureId);
Lecture lecture = lectureCRUDService.loadLectureFromId(lectureId);
Lecture lecture = lectureService.findLectureById(lectureId);
User user = userCRUDService.loadUserFromUserIdx(userIdx);
EvaluatePost evaluatePost = createEvaluatePost(evaluatePostData, user, lecture);

Expand Down Expand Up @@ -104,7 +105,7 @@ public List<EvaluatePostResponseByUserIdxDto> readEvaluatePostsByUserId(
}

public boolean verifyIsUserCanWriteEvaluatePost(Long userIdx, Long lectureId) {
Lecture lecture = lectureCRUDService.loadLectureFromId(lectureId);
Lecture lecture = lectureService.findLectureById(lectureId);;
User user = userCRUDService.loadUserFromUserIdx(userIdx);
return evaluatePostCRUDService.isAlreadyWritten(user, lecture);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,35 +1,37 @@
package usw.suwiki.domain.exampost.service;

import java.util.ArrayList;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import usw.suwiki.domain.exampost.controller.dto.*;
import usw.suwiki.domain.exampost.controller.dto.ExamPostUpdateDto;
import usw.suwiki.domain.exampost.controller.dto.ExamPostsSaveDto;
import usw.suwiki.domain.exampost.controller.dto.ExamResponseByLectureIdDto;
import usw.suwiki.domain.exampost.controller.dto.ExamResponseByUserIdxDto;
import usw.suwiki.domain.exampost.controller.dto.ReadExamPostResponse;
import usw.suwiki.domain.exampost.controller.dto.viewexam.PurchaseHistoryDto;
import usw.suwiki.domain.exampost.domain.ExamPost;
import usw.suwiki.domain.userlecture.viewexam.ViewExam;
import usw.suwiki.domain.lecture.domain.Lecture;
import usw.suwiki.domain.lecture.service.LectureCRUDService;
import usw.suwiki.domain.lecture.service.LectureService;
import usw.suwiki.domain.user.user.User;
import usw.suwiki.domain.user.user.service.UserCRUDService;
import usw.suwiki.domain.userlecture.viewexam.ViewExam;
import usw.suwiki.domain.userlecture.viewexam.service.ViewExamCRUDService;
import usw.suwiki.global.PageOption;

import java.util.ArrayList;
import java.util.List;

@Service
@RequiredArgsConstructor
public class ExamPostService {

private final ExamPostCRUDService examPostCRUDService;
private final ViewExamCRUDService viewExamCRUDService;
private final LectureCRUDService lectureCRUDService;
private final LectureService lectureService;
private final UserCRUDService userCRUDService;

@Transactional
public void write(ExamPostsSaveDto examData, Long userIdx, Long lectureId) {
Lecture lecture = lectureCRUDService.loadLectureFromId(lectureId);
Lecture lecture = lectureService.findLectureById(lectureId);
User user = userCRUDService.loadUserFromUserIdx(userIdx);

ExamPost examPost = createExamPost(examData, user, lecture);
Expand All @@ -41,7 +43,7 @@ public void write(ExamPostsSaveDto examData, Long userIdx, Long lectureId) {
@Transactional
public void purchase(Long lectureIdx, Long userIdx) {
User user = userCRUDService.loadUserFromUserIdx(userIdx);
Lecture lecture = lectureCRUDService.loadLectureFromId(lectureIdx);
Lecture lecture =lectureService.findLectureById(lectureIdx);
user.purchaseExamPost();

ViewExam viewExam = ViewExam.builder()
Expand Down Expand Up @@ -109,7 +111,7 @@ public List<ExamResponseByUserIdxDto> readExamPostByUserIdAndOption(PageOption o
@Transactional(readOnly = true)
public boolean isWrite(Long userIdx, Long lectureIdx) {
User user = userCRUDService.loadUserFromUserIdx(userIdx);
Lecture lecture = lectureCRUDService.loadLectureFromId(lectureIdx);
Lecture lecture = lectureService.findLectureById(lectureIdx);
return examPostCRUDService.isWrite(user, lecture);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,30 @@
package usw.suwiki.domain.lecture.controller;

import static usw.suwiki.global.exception.ExceptionType.USER_RESTRICTED;

import lombok.RequiredArgsConstructor;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import usw.suwiki.domain.lecture.controller.dto.LectureAndCountResponseForm;
import usw.suwiki.domain.lecture.controller.dto.LectureDetailResponseDto;
import usw.suwiki.domain.lecture.controller.dto.LectureFindOption;
import usw.suwiki.domain.lecture.controller.dto.LectureWithScheduleResponse;
import usw.suwiki.domain.lecture.service.LectureService;
import usw.suwiki.global.ResponseForm;
import usw.suwiki.global.annotation.ApiLogger;
import usw.suwiki.global.annotation.CacheStatics;
import usw.suwiki.global.dto.ApiResponse;
import usw.suwiki.global.dto.NoOffsetPaginationResponse;
import usw.suwiki.global.exception.errortype.AccountException;
import usw.suwiki.global.jwt.JwtAgent;
import usw.suwiki.global.util.CacheStaticsLogger;

import static usw.suwiki.global.exception.ExceptionType.USER_RESTRICTED;


@RestController
@RequiredArgsConstructor
Expand All @@ -43,6 +51,20 @@ public ResponseEntity<LectureAndCountResponseForm> searchLectureApi(
return ResponseEntity.ok(response);
}

@GetMapping("/current/cells/search")
public ResponseEntity<ApiResponse<NoOffsetPaginationResponse<LectureWithScheduleResponse>>> searchLectureCells(
@RequestParam(required = false) Long cursorId,
@RequestParam(required = false, defaultValue = "20") Integer size,
@RequestParam(required = false) String keyword,
@RequestParam(required = false) String major,
@RequestParam(required = false) Integer grade
) {
NoOffsetPaginationResponse<LectureWithScheduleResponse> response =
lectureService.findPagedLecturesWithSchedule(cursorId, size, keyword, major, grade);

return ResponseEntity.ok(ApiResponse.success(response));
}

@Cacheable(cacheNames = "lecture")
@ApiLogger(option = "lecture")
@CacheStatics
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package usw.suwiki.domain.lecture.controller.dto;

import java.util.ArrayList;
import java.util.List;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import usw.suwiki.domain.lecture.domain.Lecture;

@Getter
@Builder
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class LectureWithScheduleResponse {
private long id;
private String name;
private String type;
private String major;
private int grade;
private String professorName;

private final List<OriginalLectureCellResponse> originalCellList = new ArrayList<>();

public static LectureWithScheduleResponse of(
Lecture lecture
) {
return LectureWithScheduleResponse.builder()
.id(lecture.getId())
.name(lecture.getName())
.professorName(lecture.getProfessor())
.type(lecture.getType())
.major(lecture.getMajorType())
.grade(lecture.getLectureDetail().getGrade())
.build();
}

public void addOriginalCellResponse(OriginalLectureCellResponse cellResponse) {
this.originalCellList.add(cellResponse);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package usw.suwiki.domain.lecture.controller.dto;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import usw.suwiki.domain.timetable.entity.TimetableCellSchedule;

@Builder
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
public class OriginalLectureCellResponse {
private String location;
private String day;
private Integer startPeriod;
private Integer endPeriod;

public static OriginalLectureCellResponse of(TimetableCellSchedule schedule) {
return OriginalLectureCellResponse.builder()
.location(schedule.getLocation())
.day(schedule.getDay().getValue())
.startPeriod(schedule.getStartPeriod())
.endPeriod(schedule.getEndPeriod())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,14 @@

import javax.persistence.Column;
import javax.persistence.Embeddable;

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@Embeddable
@NoArgsConstructor
public class LectureDetail {
public class LectureDetail { // TODO refactor: placeSchedule, grade, point 은 Lecture로 이동. 혹은 전체 이동.
@Column(name = "place_schedule")
private String placeSchedule;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,30 @@
package usw.suwiki.domain.lecture.domain.repository;

import org.springframework.data.jpa.repository.Query;
import java.util.List;
import org.springframework.data.domain.Slice;
import usw.suwiki.domain.lecture.controller.dto.LectureFindOption;
import usw.suwiki.domain.lecture.domain.Lecture;
import usw.suwiki.domain.lecture.domain.repository.dao.LecturesAndCountDao;

import java.util.List;

public interface LectureCustomRepository {
Slice<Lecture> findCurrentSemesterLectures(
final Long cursorId,
final int limit,
final String keyword,
final String majorType,
final Integer grade
);

public interface LectureQueryRepository {
//
Lecture verifyJsonLecture(String lectureName, String ProfessorName, String majorType);
//

List<String> findAllMajorType();
//

LecturesAndCountDao findLectureByFindOption(String searchValue, LectureFindOption lectureFindOption);

LecturesAndCountDao findLectureByMajorType(String searchValue, LectureFindOption lectureFindOption);

LecturesAndCountDao findAllLectureByFindOption(LectureFindOption lectureFindOption);

LecturesAndCountDao findAllLectureByMajorType(LectureFindOption lectureFindOption);
}
Loading

0 comments on commit fea0e9d

Please sign in to comment.