diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/Assignment/controller/AssignmentController.java b/backend/pirocheck/src/main/java/backend/pirocheck/Assignment/controller/AssignmentController.java index 2759f31..042c94d 100644 --- a/backend/pirocheck/src/main/java/backend/pirocheck/Assignment/controller/AssignmentController.java +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Assignment/controller/AssignmentController.java @@ -2,6 +2,7 @@ import backend.pirocheck.Assignment.dto.request.AssignmentCreateReq; import backend.pirocheck.Assignment.dto.request.AssignmentItemCreateReq; +import backend.pirocheck.Assignment.dto.request.AssignmentItemUpdateReq; import backend.pirocheck.Assignment.dto.request.AssignmentUpdateReq; import backend.pirocheck.Assignment.dto.response.AssignmentWeekRes; import backend.pirocheck.Assignment.entity.AssignmentStatus; @@ -119,13 +120,14 @@ public AssignmentStatus submissionAssignment( } ) @PutMapping("/admin/users/{userId}/assignments/{assignmentId}/submission") - public String updateSubmission( + public AssignmentStatus updateSubmission( @Parameter(description = "사용자 ID", example = "1") @PathVariable Long userId, @Parameter(description = "과제 ID", example = "1") - @PathVariable Long assignmentId + @PathVariable Long assignmentId, + @RequestBody AssignmentItemUpdateReq req ) { - return null; + return assignmentService.updateAssignmentItem(userId, assignmentId, req); } } diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/Assignment/dto/request/AssignmentItemUpdateReq.java b/backend/pirocheck/src/main/java/backend/pirocheck/Assignment/dto/request/AssignmentItemUpdateReq.java new file mode 100644 index 0000000..b917d54 --- /dev/null +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Assignment/dto/request/AssignmentItemUpdateReq.java @@ -0,0 +1,16 @@ +package backend.pirocheck.Assignment.dto.request; + +import backend.pirocheck.Assignment.entity.AssignmentStatus; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Pattern; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +public class AssignmentItemUpdateReq { + + @Pattern(regexp = "SUCCESS/INSUFFICIENT/FAILURE", message = "status는 SUCCESS, INSUFFICIENT 혹은 FAILURE 여야 합니다.") + @Schema(description = "과제 결과", example = "SUCCESS") + private AssignmentStatus status; +} diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/Assignment/entity/AssignmentItem.java b/backend/pirocheck/src/main/java/backend/pirocheck/Assignment/entity/AssignmentItem.java index 74719c7..6a9dddf 100644 --- a/backend/pirocheck/src/main/java/backend/pirocheck/Assignment/entity/AssignmentItem.java +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Assignment/entity/AssignmentItem.java @@ -35,4 +35,10 @@ public static AssignmentItem create(User user, Assignment assignment, Assignment .submitted(submitted) .build(); } + + public void update(AssignmentStatus submitted) { + + this.submitted = submitted; + + } } diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/Assignment/repository/AssignmentItemRepository.java b/backend/pirocheck/src/main/java/backend/pirocheck/Assignment/repository/AssignmentItemRepository.java index 1a39eec..f07c351 100644 --- a/backend/pirocheck/src/main/java/backend/pirocheck/Assignment/repository/AssignmentItemRepository.java +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Assignment/repository/AssignmentItemRepository.java @@ -1,5 +1,6 @@ package backend.pirocheck.Assignment.repository; +import backend.pirocheck.Assignment.entity.Assignment; import backend.pirocheck.Assignment.entity.AssignmentItem; import backend.pirocheck.Assignment.entity.AssignmentStatus; import backend.pirocheck.User.entity.User; @@ -7,6 +8,7 @@ import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Optional; @Repository public interface AssignmentItemRepository extends JpaRepository { @@ -17,4 +19,7 @@ public interface AssignmentItemRepository extends JpaRepository findByUserAndAssignment(User user, Assignment assignment); + // Optional 처리로 오류 발생 check + } diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/Assignment/service/AssignmentService.java b/backend/pirocheck/src/main/java/backend/pirocheck/Assignment/service/AssignmentService.java index f1ef8ef..e589e2c 100644 --- a/backend/pirocheck/src/main/java/backend/pirocheck/Assignment/service/AssignmentService.java +++ b/backend/pirocheck/src/main/java/backend/pirocheck/Assignment/service/AssignmentService.java @@ -2,6 +2,7 @@ import backend.pirocheck.Assignment.dto.request.AssignmentCreateReq; import backend.pirocheck.Assignment.dto.request.AssignmentItemCreateReq; +import backend.pirocheck.Assignment.dto.request.AssignmentItemUpdateReq; import backend.pirocheck.Assignment.dto.request.AssignmentUpdateReq; import backend.pirocheck.Assignment.dto.response.AssignmentDayRes; import backend.pirocheck.Assignment.dto.response.AssignmentDetailRes; @@ -14,6 +15,7 @@ import backend.pirocheck.User.entity.User; import backend.pirocheck.User.repository.UserRepository; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,6 +24,7 @@ import java.util.Map; import java.util.stream.Collectors; +@Slf4j // 로그를 찍기위해 사용 @Service @Transactional @RequiredArgsConstructor @@ -118,7 +121,9 @@ public String updateAssignment(Long assignmentId, AssignmentUpdateReq req) { } // 과제 채점 결과 저장 - public AssignmentStatus createAssignmentItem(Long assignmentId, Long userId, AssignmentItemCreateReq req) { + public AssignmentStatus createAssignmentItem(Long userId, Long assignmentId, AssignmentItemCreateReq req) { + log.info("userId 요청 값: {}", userId); + User user = userRepository.findById(userId) .orElseThrow(() -> new IllegalArgumentException("조회된 사용자가 없습니다.")); @@ -135,4 +140,22 @@ public AssignmentStatus createAssignmentItem(Long assignmentId, Long userId, Ass return assignmentItem.getSubmitted(); } + + // 과제 채점 결과 수정 + public AssignmentStatus updateAssignmentItem(Long userId, Long assignmentId, AssignmentItemUpdateReq req) { + User user = userRepository.findById(userId) + .orElseThrow(() -> new IllegalArgumentException("조회된 사용자가 없습니다.")); + + Assignment assignment = assignmentRepository.findById(assignmentId) + .orElseThrow(() -> new IllegalArgumentException("조회된 과제가 없습니다.")); + + AssignmentItem assignmentItem = assignmentItemRepository.findByUserAndAssignment(user, assignment) + .orElseThrow(() -> new IllegalArgumentException("해당 유저의 과제 채점 결과가 없습니다.")); + + assignmentItem.update(req.getStatus()); // 상태 업데이트 + + assignmentItemRepository.save(assignmentItem); // 상태 저장 + + return assignmentItem.getSubmitted(); + } }