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
@@ -1,4 +1,26 @@
package com.example.Piroin.project.domain.assignment.controller;

import com.example.Piroin.project.domain.assignment.dto.CreateAssignmentRequest;
import com.example.Piroin.project.domain.assignment.dto.CreateAssignmentResponse;
import com.example.Piroin.project.domain.assignment.service.AssignmentService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;


@RestController
@RequiredArgsConstructor
@RequestMapping("/assignments")
public class AssignmentController {

private final AssignmentService assignmentService;

@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public CreateAssignmentResponse createAssignment(
@RequestBody CreateAssignmentRequest request
) {
return assignmentService.createAssignment(request);
}
}

Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
package com.example.Piroin.project.domain.assignment.dto;

import lombok.Getter;

import java.time.LocalDate;

public class AssignmentReqDTO {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.example.Piroin.project.domain.assignment.dto;

import lombok.Getter;

import java.time.LocalDate;

@Getter
public class CreateAssignmentRequest {

private String title;

private String week;

private LocalDate sessionDate;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.example.Piroin.project.domain.assignment.dto;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class CreateAssignmentResponse {

private Integer assignmentId;
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,6 @@
public enum AssignmentStatus {
SUCCESS,
INSUFFICIENT,
FAILURE
FAILURE,
PENDING
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,15 @@
package com.example.Piroin.project.domain.assignment.exception.code;

import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;

@Getter
@RequiredArgsConstructor
public enum AssignmentErrorCode {
ASSIGNMENT_CREATE_FAILED(HttpStatus.BAD_REQUEST, "ASSIGNMENT400", "과제 생성에 실패했습니다.");

private final HttpStatus status;
private final String code;
private final String message;
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
import com.example.Piroin.project.domain.assignment.entity.AssignmentItem;
import org.springframework.data.jpa.repository.JpaRepository;

public interface AssignmentItemRepository extends JpaRepository<AssignmentItem, Long> {
public interface AssignmentItemRepository extends JpaRepository<AssignmentItem, Integer> {
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
package com.example.Piroin.project.domain.assignment.repository;

public interface AssignmentRepository {
import com.example.Piroin.project.domain.assignment.entity.Assignment;
import org.springframework.data.jpa.repository.JpaRepository;

public interface AssignmentRepository extends JpaRepository<Assignment, Integer> {
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,51 @@
package com.example.Piroin.project.domain.assignment.service;

import com.example.Piroin.project.domain.assignment.dto.CreateAssignmentRequest;
import com.example.Piroin.project.domain.assignment.dto.CreateAssignmentResponse;
import com.example.Piroin.project.domain.assignment.entity.Assignment;
import com.example.Piroin.project.domain.assignment.entity.AssignmentItem;
import com.example.Piroin.project.domain.assignment.enums.AssignmentStatus;
import com.example.Piroin.project.domain.assignment.repository.AssignmentItemRepository;
import com.example.Piroin.project.domain.assignment.repository.AssignmentRepository;
import com.example.Piroin.project.domain.user.entity.User;
import com.example.Piroin.project.domain.user.repository.UserRepository;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@RequiredArgsConstructor
@Transactional
public class AssignmentService {

private final AssignmentRepository assignmentRepository;
private final AssignmentItemRepository assignmentItemRepository;
private final UserRepository userRepository;

public CreateAssignmentResponse createAssignment(CreateAssignmentRequest request) {

Assignment assignment = Assignment.builder()
.title(request.getTitle())
.week(request.getWeek())
.sessionDate(request.getSessionDate())
.build();

assignmentRepository.save(assignment);

List<User> users = userRepository.findAll();

List<AssignmentItem> assignmentItems = users.stream()
.map(user -> AssignmentItem.builder()
.user(user)
.assignment(assignment)
.submitted(AssignmentStatus.PENDING)
.build())
.toList();

assignmentItemRepository.saveAll(assignmentItems);

return new CreateAssignmentResponse(assignment.getId());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ public boolean updateUserStatus(Integer userId, UpdateUserStatusReq req) {

// 과제 상태 변경 코드
if (req.getAssignmentItemId() != null && req.getAssignmentStatus() != null) {
AssignmentItem assignmentItem = assignmentItemRepository.findById(req.getAssignmentItemId())
AssignmentItem assignmentItem = assignmentItemRepository.findById(Math.toIntExact(req.getAssignmentItemId()))
.orElseThrow(() -> new IllegalArgumentException("과제 기록을 찾을 수 없습니다."));

if (!assignmentItem.getUser().getId().equals(userId)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ public interface UserRepository extends JpaRepository<User, Long> {

List<User> findByRole(Role role);

List<User> findAll();

// 학생 이름으로 검색기능
List<User> findByNameContainingAndRole(String name, Role role);
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,35 @@
package com.example.Piroin.project.global.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;

import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SwaggerConfig {

@Bean
public OpenAPI openAPI() {

String jwtSchemeName = "JWT TOKEN";

SecurityRequirement securityRequirement = new SecurityRequirement()
.addList(jwtSchemeName);

SecurityScheme securityScheme = new SecurityScheme()
.name(jwtSchemeName)
.type(SecurityScheme.Type.HTTP)
.scheme("bearer")
.bearerFormat("JWT");

return new OpenAPI()
.info(new Info()
.title("Piro Project API")
.description("API 명세서")
.version("1.0.0"));
.version("1.0.0"))
.addSecurityItem(securityRequirement)
.schemaRequirement(jwtSchemeName, securityScheme);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ALTER TABLE assignment_item
DROP CONSTRAINT chk_assignment_item_submitted;

ALTER TABLE assignment_item
ADD CONSTRAINT chk_assignment_item_submitted
CHECK (submitted IN (
'SUCCESS',
'INSUFFICIENT',
'FAILURE',
'PENDING'
));
Loading