Skip to content
Open
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

@RestController
@RequiredArgsConstructor
@RequestMapping("/exam")
@RequestMapping("/api/exam")
public class ExamController {

private final ExamService examService;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
package turing.turing.domain.exam.dto;

import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import java.time.LocalDate;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import turing.turing.global.util.validation.dateRange.ValidDateRange;
import turing.turing.global.util.validation.range.ValidRange;

@Getter
@NoArgsConstructor
@ValidDateRange
@ValidRange(startField = "startDate", endField = "endDate", type = LocalDate.class, message = "종료일은 시작일과 같거나 미래여야 합니다.")
public class CreateExamRequest {

@NotEmpty(message = "시험명은 필수입니다.")
@NotBlank(message = "시험명은 필수입니다.")
private String examName;

@NotNull(message = "시작일은 필수입니다.")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
package turing.turing.domain.exam.dto;

import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import java.time.LocalDate;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import turing.turing.global.util.validation.range.ValidRange;

@Getter
@NoArgsConstructor
@ValidRange(startField = "startDate", endField = "endDate", type = LocalDate.class, message = "종료일은 시작일과 같거나 미래여야 합니다.")
public class UpdateExamRequest {

@NotNull(message = "시험Id는 필수입니다.")
@Positive(message = "시험Id는 양수여야 합니다.")
private Long examId;

@NotEmpty(message = "시험명은 필수입니다.")
@NotBlank(message = "시험명은 필수입니다.")
private String examName;

@NotNull(message = "시작일은 필수입니다.")
Expand Down
10 changes: 5 additions & 5 deletions src/main/java/turing/turing/domain/homework/Homework.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.DynamicInsert;
import turing.turing.domain.BaseEntity;
import turing.turing.domain.homework.dto.DetailedHomeworkDto;
import turing.turing.domain.homework.dto.UpdateHomeworkRequest;
import turing.turing.domain.notebook.Notebook;

@Getter
Expand Down Expand Up @@ -74,7 +74,7 @@ public class Homework extends BaseEntity {
private Boolean isDone;

@Builder
public Homework(String category, String title, String rangeType, int rangeStart, int rangeEnd, String content, String memo, Notebook notebook, Boolean isDone) {
private Homework(String category, String title, String rangeType, int rangeStart, int rangeEnd, String content, String memo, Notebook notebook) {
super();
this.category = category;
this.title = title;
Expand All @@ -87,7 +87,7 @@ public Homework(String category, String title, String rangeType, int rangeStart,
this.isDone = false;
}

public Long update(DetailedHomeworkDto request) {
public Long update(UpdateHomeworkRequest request) {
this.category = request.getCategory();
this.title = request.getTitle();
this.rangeType = request.getRangeType();
Expand All @@ -99,8 +99,8 @@ public Long update(DetailedHomeworkDto request) {
return request.getHomeworkId();
}

public Long updateDone(Boolean newDone) {
this.isDone = newDone;
public Long updateDone(Boolean doneStatus) {
this.isDone = doneStatus;

return this.id;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package turing.turing.domain.homework;

import jakarta.validation.Valid;
import java.net.URI;

import io.swagger.v3.oas.annotations.Operation;
Expand All @@ -18,6 +19,7 @@
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
import turing.turing.domain.homework.dto.CreateHomeworkRequest;
import turing.turing.domain.homework.dto.DetailedHomeworkDto;
import turing.turing.domain.homework.dto.UpdateHomeworkRequest;

@Tag(name = "Homework", description = "숙제")
@RestController
Expand All @@ -36,7 +38,7 @@ public ResponseEntity<DetailedHomeworkDto> getHomework(@PathVariable Long homewo

@Operation(summary = "숙제 생성")
@PostMapping("")
public ResponseEntity<Long> createHomework(@RequestBody CreateHomeworkRequest request) {
public ResponseEntity<Long> createHomework(@RequestBody @Valid CreateHomeworkRequest request) {
Long savedId = homeworkService.createHomework(request);

URI location = ServletUriComponentsBuilder.fromCurrentRequest()
Expand All @@ -57,7 +59,7 @@ public ResponseEntity<Void> deleteHomework(@PathVariable Long homeworkId) {

@Operation(summary = "숙제 수정")
@PutMapping("")
public ResponseEntity<Long> updateHomework(@RequestBody DetailedHomeworkDto request) {
public ResponseEntity<Long> updateHomework(@RequestBody @Valid UpdateHomeworkRequest request) {
return ResponseEntity.ok(homeworkService.updateHomework(request));
}

Expand Down
57 changes: 7 additions & 50 deletions src/main/java/turing/turing/domain/homework/HomeworkService.java
Original file line number Diff line number Diff line change
@@ -1,61 +1,18 @@
package turing.turing.domain.homework;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import turing.turing.domain.homework.converter.HomeworkConverter;
import turing.turing.domain.homework.dto.CreateHomeworkRequest;
import turing.turing.domain.homework.dto.DetailedHomeworkDto;
import turing.turing.domain.notebook.Notebook;
import turing.turing.domain.notebook.NotebookRepository;
import turing.turing.global.exception.RestApiException;
import turing.turing.global.exception.errorCode.CommonErrorCode;
import turing.turing.domain.homework.dto.UpdateHomeworkRequest;

@Service
@RequiredArgsConstructor
@Transactional
public class HomeworkService {
public interface HomeworkService {

private final HomeworkRepository homeworkRepository;
private final NotebookRepository notebookRepository;
DetailedHomeworkDto getHomework(Long homeworkId);

@Transactional(readOnly = true)
public DetailedHomeworkDto getHomework(Long homeworkId) {
Homework homework = homeworkRepository.findById(homeworkId)
.orElseThrow(() -> new RestApiException(CommonErrorCode.NOT_FOUND));
Long createHomework(CreateHomeworkRequest request);

return HomeworkConverter.toDetailedDto(homework);
}
Long updateHomework(UpdateHomeworkRequest request);

public Long createHomework(CreateHomeworkRequest request) {
Notebook notebook = notebookRepository.findById(request.getNotebookId())
.orElseThrow(() -> new RestApiException(CommonErrorCode.NOT_FOUND));
Long updateDone(Long homeworkId);

Homework homework = homeworkRepository.save(HomeworkConverter.toEntity(request, notebook));

return homework.getId();
}

public Long updateHomework(DetailedHomeworkDto request) {
Homework homework = homeworkRepository.findById(request.getHomeworkId())
.orElseThrow(() -> new RestApiException(CommonErrorCode.NOT_FOUND));

return homework.update(request);
}

public Long updateDone(Long homeworkId) {
Homework homework = homeworkRepository.findById(homeworkId)
.orElseThrow(() -> new RestApiException(CommonErrorCode.NOT_FOUND));

Boolean nowDone = homework.getIsDone();

return homework.updateDone(!nowDone);
}

public void deleteHomework(Long homeworkId) {
Homework homework = homeworkRepository.findById(homeworkId)
.orElseThrow(() -> new RestApiException(CommonErrorCode.NOT_FOUND));

homeworkRepository.delete(homework);
}
void deleteHomework(Long homeworkId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package turing.turing.domain.homework;

import static turing.turing.global.exception.errorCode.HomeworkErrorCode.*;
import static turing.turing.global.exception.errorCode.NotebookErrorCode.*;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import turing.turing.domain.homework.converter.HomeworkConverter;
import turing.turing.domain.homework.dto.CreateHomeworkRequest;
import turing.turing.domain.homework.dto.DetailedHomeworkDto;
import turing.turing.domain.homework.dto.UpdateHomeworkRequest;
import turing.turing.domain.notebook.Notebook;
import turing.turing.domain.notebook.NotebookRepository;
import turing.turing.global.exception.RestApiException;

@Service
@RequiredArgsConstructor
@Transactional
public class HomeworkServiceImpl implements HomeworkService {

private final HomeworkRepository homeworkRepository;
private final NotebookRepository notebookRepository;

@Transactional(readOnly = true)
public DetailedHomeworkDto getHomework(Long homeworkId) {
Homework homework = findById(homeworkId);

return HomeworkConverter.toDetailedDto(homework);
}

public Long createHomework(CreateHomeworkRequest request) {
Notebook notebook = notebookRepository.findById(request.getNotebookId())
.orElseThrow(() -> new RestApiException(NOTEBOOK_NOT_FOUND));

Homework homework = homeworkRepository.save(HomeworkConverter.toEntity(request, notebook));

return homework.getId();
}

public Long updateHomework(UpdateHomeworkRequest request) {
Homework homework = findById(request.getHomeworkId());

return homework.update(request);
}

public Long updateDone(Long homeworkId) {
Homework homework = findById(homeworkId);

Boolean nowDone = homework.getIsDone();

return homework.updateDone(!nowDone);
}

public void deleteHomework(Long homeworkId) {
Homework homework = findById(homeworkId);

homeworkRepository.delete(homework);
}

private Homework findById(Long homeworkId) {
return homeworkRepository.findById(homeworkId)
.orElseThrow(() -> new RestApiException(HOMEWORK_NOT_FOUND));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ public static Homework toEntity (CreateHomeworkRequest request, Notebook noteboo
.content(request.getContent())
.memo(request.getMemo())
.notebook(notebook)
.isDone(false)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,55 @@
package turing.turing.domain.homework.dto;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import turing.turing.global.util.validation.range.ValidRange;

@Getter
@NoArgsConstructor
@ValidRange(startField = "rangeStart", endField = "rangeEnd", type = Integer.class, message = "끝범위는 시작범위와 같거나 커야 합니다.")
public class CreateHomeworkRequest {

@NotBlank(message = "카테고리는 필수입니다.")
private String category;

@NotBlank(message = "제목은 필수입니다.")
private String title;

@NotBlank(message = "범위타입은 필수입니다.")
private String rangeType;

@NotNull(message = "시작범위는 필수입니다.")
@Positive(message = "시작범위는 양수여야 합니다.")
private Integer rangeStart;

@NotNull(message = "끝범위는 필수입니다.")
@Positive(message = "끝범위는 양수여야 합니다.")
private Integer rangeEnd;

@NotBlank(message = "내용은 필수입니다.")
private String content;

private String memo;

@NotNull(message = "알림장Id는 필수입니다.")
@Positive(message = "알림장Id는 양수여야 합니다.")
private Long notebookId;

@Builder
private CreateHomeworkRequest(String category, String title, String rangeType,
Integer rangeStart,
Integer rangeEnd, String content, String memo, Long notebookId) {
this.category = category;
this.title = title;
this.rangeType = rangeType;
this.rangeStart = rangeStart;
this.rangeEnd = rangeEnd;
this.content = content;
this.memo = memo;
this.notebookId = notebookId;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package turing.turing.domain.homework.dto;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import turing.turing.global.util.validation.range.ValidRange;

@Getter
@NoArgsConstructor
@ValidRange(startField = "rangeStart", endField = "rangeEnd", type = Integer.class, message = "끝범위는 시작범위와 같거나 커야 합니다.")
public class UpdateHomeworkRequest {

@NotNull(message = "숙제Id는 필수입니다.")
@Positive(message = "숙제Id는 양수여야 합니다.")
private Long homeworkId;

@NotBlank(message = "카테고리는 필수입니다.")
private String category;

@NotBlank(message = "제목은 필수입니다.")
private String title;

@NotBlank(message = "범위타입은 필수입니다.")
private String rangeType;

@NotNull(message = "시작범위는 필수입니다.")
@Positive(message = "시작범위는 양수여야 합니다.")
private Integer rangeStart;

@NotNull(message = "끝범위는 필수입니다.")
@Positive(message = "끝범위는 양수여야 합니다.")
private Integer rangeEnd;

@NotBlank(message = "내용은 필수입니다.")
private String content;

private String memo;

@Builder
private UpdateHomeworkRequest(Long homeworkId, String category, String title, String rangeType,
Integer rangeStart, Integer rangeEnd, String content, String memo) {
this.homeworkId = homeworkId;
this.category = category;
this.title = title;
this.rangeType = rangeType;
this.rangeStart = rangeStart;
this.rangeEnd = rangeEnd;
this.content = content;
this.memo = memo;
}
}
Loading