Skip to content

Commit

Permalink
refactor: create, update 메소드 도메인으로 이동
Browse files Browse the repository at this point in the history
service에서 curriculum과 day를 처리하는 로직을 domain으로 옮김
  • Loading branch information
ybkang1108 committed Jan 24, 2025
1 parent ff5eb99 commit 31ad47d
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 76 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

@RestController
@RequestMapping("/studies")
@Tag(name = "Study")
@Tag(name = "Study", description = "스터디 API")
@RequiredArgsConstructor
public class StudyController {

Expand All @@ -22,7 +22,7 @@ public class StudyController {

@Operation(summary = "스터디 생성", description = "자율스터디를 생성합니다.")
@PostMapping()
public ResponseEntity<Long> createStudy(@RequestBody StudyCreateRequest request) {
public ResponseEntity<Long> createStudy(@RequestBody StudyCreateUpdateRequest request) {
Long studyId = studentStudyService.createStudy(request);

return ResponseEntity.ok(studyId);
Expand All @@ -46,8 +46,8 @@ public ResponseEntity<?> getStudyDetail(@PathVariable("studyId") Long studyId) {

@Operation(summary = "스터디 수정", description = "스터디 정보를 수정합니다. 스터디장만 수정할 수 있습니다.")
@PatchMapping("/{studyId}")
public ResponseEntity<?> updateStudy(
@PathVariable("studyId") Long studyId, @RequestBody StudyCreateRequest updateRequest) {
public ResponseEntity<StudyResponse> updateStudy(
@PathVariable("studyId") Long studyId, @RequestBody StudyCreateUpdateRequest updateRequest) {

leaderStudyService.updateStudy(studyId, updateRequest);

Expand All @@ -60,6 +60,6 @@ public ResponseEntity<String> deleteStudy(@PathVariable("studyId") Long studyId)

leaderStudyService.deleteStudy(studyId);

return ResponseEntity.status(HttpStatus.NO_CONTENT).body("스터디가 삭제되었습니다.");
return ResponseEntity.status(HttpStatus.RESET_CONTENT).body("스터디가 삭제되었습니다.");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,10 @@

import static com.gdgoc.study_group.exception.ErrorCode.STUDY_NOT_FOUND;

import com.gdgoc.study_group.curriculum.domain.Curriculum;
import com.gdgoc.study_group.day.domain.Day;
import com.gdgoc.study_group.exception.CustomException;
import com.gdgoc.study_group.study.dao.StudyRepository;
import com.gdgoc.study_group.study.domain.Study;
import com.gdgoc.study_group.study.dto.StudyCreateRequest;
import com.gdgoc.study_group.study.dto.StudyCreateUpdateRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -28,35 +26,19 @@ public class LeaderStudyService {
* @param request 수정할 스터디의 정보
*/
@Transactional(readOnly = false)
public void updateStudy(Long studyId, StudyCreateRequest request) {
public void updateStudy(Long studyId, StudyCreateUpdateRequest request) {
Study study =
studyRepository.findById(studyId).orElseThrow(() -> new CustomException(STUDY_NOT_FOUND));

study.update(
request.name(),
request.description(),
request.requirement(),
request.question(),
request.maxParticipants(),
request.studyStatus());

study.getCurriculums().clear();
study
.getCurriculums()
.addAll(
request.curriculums().stream()
.map(
curriculumDTO ->
Curriculum.create(study, curriculumDTO.week(), curriculumDTO.subject()))
.toList());

study.getDays().clear();
study
.getDays()
.addAll(
request.days().stream()
.map(dayDTO -> Day.create(study, dayDTO.day(), dayDTO.startTime()))
.toList());
request.name(),
request.description(),
request.requirement(),
request.question(),
request.maxParticipants(),
request.studyStatus(),
request.curriculums(),
request.days());

studyRepository.save(study);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,11 @@

import static com.gdgoc.study_group.exception.ErrorCode.STUDY_NOT_FOUND;

import com.gdgoc.study_group.curriculum.domain.Curriculum;
import com.gdgoc.study_group.day.domain.Day;
import com.gdgoc.study_group.exception.CustomException;
import com.gdgoc.study_group.study.dao.StudyRepository;
import com.gdgoc.study_group.study.domain.Study;
import com.gdgoc.study_group.study.dto.*;
import java.util.List;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -28,7 +25,7 @@ public class StudentStudyService {
* @return ResponseDTO 반환
*/
@Transactional(readOnly = false)
public Long createStudy(StudyCreateRequest request) {
public Long createStudy(StudyCreateUpdateRequest request) {

Study study =
Study.create(
Expand All @@ -41,21 +38,7 @@ public Long createStudy(StudyCreateRequest request) {

// TODO: 스터디를 생성한 유저를 스터디장으로 설정한 뒤 studyMembers에 추가

// 등록된 커리큘럼이 있다면 엔티티로 변환하여 리스트에 추가
List<Curriculum> curriculums =
request.curriculums().stream()
.map(
curriculumDTO ->
Curriculum.create(study, curriculumDTO.week(), curriculumDTO.subject()))
.collect(Collectors.toList());

// 등록된 스터디 날짜가 있다면 엔티티로 변환하여 리스트에 추가
List<Day> days =
request.days().stream()
.map(dayDTO -> Day.create(study, dayDTO.day(), dayDTO.startTime()))
.collect(Collectors.toList());

study.addInfo(curriculums, days);
study.addInfo(request.curriculums(), request.days());
studyRepository.save(study);

return study.getId();
Expand Down
60 changes: 37 additions & 23 deletions src/main/java/com/gdgoc/study_group/study/domain/Study.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,24 @@

import com.gdgoc.study_group.answer.domain.Answer;
import com.gdgoc.study_group.curriculum.domain.Curriculum;
import com.gdgoc.study_group.curriculum.dto.CurriculumDTO;
import com.gdgoc.study_group.day.domain.Day;
import com.gdgoc.study_group.day.dto.DayDTO;
import com.gdgoc.study_group.round.domain.Round;
import com.gdgoc.study_group.study.dto.StudyCreateUpdateRequest;
import com.gdgoc.study_group.studyMember.domain.StudyMember;
import jakarta.persistence.*;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import lombok.*;

@Entity
@Getter
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class Study {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down Expand Up @@ -43,22 +50,6 @@ public class Study {
private Integer maxParticipants; // null == 인원 제한 X
private Boolean isApplicationClosed = false; // 멤버 지원 종료 여부(기본값은 지원 가능)

@Builder(access = AccessLevel.PRIVATE)
private Study(
String name,
String description,
String requirement,
String question,
Integer maxParticipants,
StudyStatus studyStatus) {
this.name = name;
this.description = description;
this.requirement = requirement;
this.question = question;
this.maxParticipants = maxParticipants;
this.studyStatus = studyStatus;
}

public static Study create(
String name,
String description,
Expand All @@ -76,23 +67,46 @@ public static Study create(
.build();
}

public void addInfo(List<Curriculum> curriculums, List<Day> days) {
public void addInfo(List<CurriculumDTO> curriculumDTOs, List<DayDTO> dayDTOs) {
// 등록된 커리큘럼이 있다면 엔티티로 변환하여 리스트에 추가
List<Curriculum> curriculums = curriculumDTOs.stream()
.map(curriculumDTO -> Curriculum.create(this, curriculumDTO.week(), curriculumDTO.subject()))
.toList();

// 등록된 스터디 날짜가 있다면 엔티티로 변환하여 리스트에 추가
List<Day> days = dayDTOs.stream()
.map(dayDTO -> Day.create(this, dayDTO.day(), dayDTO.startTime()))
.toList();


this.curriculums.addAll(curriculums);
this.days.addAll(days);
}

public void update(
String name,
String description,
String requirement,
String question,
Integer maxParticipants,
StudyStatus studyStatus) {
String name,
String description,
String requirement,
String question,
Integer maxParticipants,
StudyStatus studyStatus,
List<CurriculumDTO> curriculumDTOs,
List<DayDTO> dayDTOs) {
this.name = name;
this.description = description;
this.requirement = requirement;
this.question = question;
this.maxParticipants = maxParticipants;
this.studyStatus = studyStatus;

this.getCurriculums().clear();
this.getCurriculums().addAll(curriculumDTOs.stream()
.map(curriculumDTO -> Curriculum.create(this, curriculumDTO.week(), curriculumDTO.subject()))
.toList());

this.getDays().clear();
this.getDays().addAll(dayDTOs.stream()
.map(dayDTO -> Day.create(this, dayDTO.day(), dayDTO.startTime()))
.toList());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import jakarta.validation.constraints.NotNull;
import java.util.List;

public record StudyCreateRequest(
public record StudyCreateUpdateRequest(
@NotBlank(message = "스터디 이름을 입력해 주세요.") @Schema(description = "스터디 이름") String name,
@NotBlank(message = "스터디 소개를 입력해 주세요.") @Schema(description = "스터디 소개") String description,
@Schema(description = "스터디 자원 자격") String requirement,
Expand Down

0 comments on commit 31ad47d

Please sign in to comment.