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
Expand Up @@ -8,6 +8,7 @@
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

Expand All @@ -19,28 +20,26 @@ public class CurriculumController {
private final CurriculumService curriculumService;

@GetMapping
public ResponseEntity<List<CurriculumResDTO.GetSessionRes>> getAllSessions() {
return ResponseEntity.ok(curriculumService.getAllSessions());
public ResponseEntity<List<CurriculumResDTO.CreateDayRes>> getAllDays() {
return ResponseEntity.ok(curriculumService.getAllDays());
}

@PostMapping
public ResponseEntity<CurriculumResDTO.CreateSessionRes> createSession(
@RequestBody CurriculumReqDTO.CreateSessionReq req) {
CurriculumResDTO.CreateSessionRes response = curriculumService.createSession(req);
return ResponseEntity.status(HttpStatus.CREATED).body(response);
public ResponseEntity<CurriculumResDTO.CreateDayRes> createDay(
@RequestBody CurriculumReqDTO.CreateDayReq req) {
return ResponseEntity.status(HttpStatus.CREATED).body(curriculumService.createDay(req));
}

@PatchMapping("/{sessionId}")
public ResponseEntity<CurriculumResDTO.UpdateSessionRes> updateSession(
@PathVariable Long sessionId,
@RequestBody CurriculumReqDTO.UpdateSessionReq req) {
CurriculumResDTO.UpdateSessionRes response = curriculumService.updateSession(sessionId, req);
return ResponseEntity.ok(response);
@PatchMapping("/{sessionDate}")
public ResponseEntity<CurriculumResDTO.CreateDayRes> updateDay(
@PathVariable LocalDate sessionDate,
@RequestBody CurriculumReqDTO.UpdateDayReq req) {
return ResponseEntity.ok(curriculumService.updateDay(sessionDate, req));
}

@DeleteMapping("/{sessionId}")
public ResponseEntity<Map<String, String>> deleteSession(@PathVariable Long sessionId) {
curriculumService.deleteSession(sessionId);
@DeleteMapping("/{sessionDate}")
public ResponseEntity<Map<String, String>> deleteDay(@PathVariable LocalDate sessionDate) {
curriculumService.deleteDay(sessionDate);
return ResponseEntity.ok(Map.of("message", "세션이 정상적으로 삭제되었습니다."));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,95 +3,71 @@
import com.example.Piroin.project.domain.curriculum.dto.CurriculumReqDTO;
import com.example.Piroin.project.domain.curriculum.dto.CurriculumResDTO;
import com.example.Piroin.project.domain.curriculum.entity.StudySession;
import com.example.Piroin.project.domain.curriculum.enums.SessionDayPart;
import com.example.Piroin.project.domain.curriculum.enums.SessionStatus;
import com.example.Piroin.project.domain.user.entity.User;

import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;

public class CurriculumConverter {

public static StudySession toStudySession(CurriculumReqDTO.CreateSessionReq req, User user) {
public static StudySession toStudySession(CurriculumReqDTO.SessionReq sessionReq,
CurriculumReqDTO.CreateDayReq req,
User user) {
return StudySession.builder()
.createdBy(user)
.generation(req.getGeneration())
.week(req.getWeek())
.sessionDate(req.getSessionDate())
.dayPart(req.getDayPart())
.title(req.getTitle())
.hostName(req.getHostName() != null ? req.getHostName() : "(미정)")
.dayPart(sessionReq.getDayPart())
.title(sessionReq.getTitle())
.hostName(sessionReq.getHostName() != null ? sessionReq.getHostName() : "(미정)")
.status(SessionStatus.BEFORE_SESSION)
.description(req.getDescription())
.sessionMaterialUrl(req.getSessionMaterialUrl())
.assignmentUrl(req.getAssignmentUrl())
.recordingUrl(req.getRecordingUrl())
.recordingPassword(req.getRecordingPassword())
.sessionMaterialName(req.getSessionMaterialName())
.assignmentName(req.getAssignmentName())
.sessionMaterialUrl(sessionReq.getSessionMaterialUrl())
.sessionMaterialName(sessionReq.getSessionMaterialName())
.recordingUrl(sessionReq.getRecordingUrl())
.recordingPassword(sessionReq.getRecordingPassword())
.assignmentUrl(sessionReq.getAssignmentUrl())
.assignmentName(sessionReq.getAssignmentName())
.createdAt(LocalDateTime.now())
.updatedAt(LocalDateTime.now())
.build();
}

public static CurriculumResDTO.CreateSessionRes toCreateSessionRes(StudySession session) {
return new CurriculumResDTO.CreateSessionRes(
session.getId(),
session.getCreatedBy().getName(),
session.getGeneration(),
session.getWeek(),
session.getSessionDate(),
session.getDayPart(),
session.getTitle(),
session.getHostName(),
session.getStatus(),
session.getDescription(),
session.getSessionMaterialUrl(),
session.getAssignmentUrl(),
session.getRecordingUrl(),
session.getRecordingPassword(),
session.getSessionMaterialName(),
session.getAssignmentName(),
session.getCreatedAt()
);
}
public static CurriculumResDTO.CreateDayRes toCreateDayRes(List<StudySession> sessions) {
StudySession first = sessions.get(0);

public static CurriculumResDTO.GetSessionRes toGetSessionRes(StudySession session) {
return new CurriculumResDTO.GetSessionRes(
session.getId(),
session.getWeek(),
session.getSessionDate(),
session.getDayPart(),
session.getTitle(),
session.getHostName(),
session.getStatus(),
session.getDescription(),
session.getSessionMaterialUrl(),
session.getAssignmentUrl(),
session.getRecordingUrl(),
session.getRecordingPassword(),
session.getSessionMaterialName(),
session.getAssignmentName()
// assignment는 PM 세션 기준으로 저장/조회. 운영 기간 6주 고정
StudySession pm = sessions.stream()
.filter(s -> s.getDayPart() == SessionDayPart.PM)
.findFirst()
.orElse(null);

return new CurriculumResDTO.CreateDayRes(
first.getSessionDate(),
first.getGeneration(),
first.getWeek(),
pm != null ? pm.getAssignmentUrl() : null,
pm != null ? pm.getAssignmentName() : null,
sessions.stream().map(CurriculumConverter::toSessionInfo).collect(Collectors.toList()),
first.getCreatedAt()
);
}

public static CurriculumResDTO.UpdateSessionRes toUpdateSessionRes(StudySession session) {
return new CurriculumResDTO.UpdateSessionRes(
public static CurriculumResDTO.SessionInfo toSessionInfo(StudySession session) {
return new CurriculumResDTO.SessionInfo(
session.getId(),
session.getCreatedBy().getName(),
session.getGeneration(),
session.getWeek(),
session.getSessionDate(),
session.getDayPart(),
session.getTitle(),
session.getHostName(),
session.getStatus(),
session.getDescription(),
session.getSessionMaterialUrl(),
session.getAssignmentUrl(),
session.getRecordingUrl(),
session.getRecordingPassword(),
session.getSessionMaterialName(),
session.getAssignmentName(),
session.getUpdatedAt()
session.getRecordingUrl(),
session.getRecordingPassword()
);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,44 +6,56 @@
import lombok.NoArgsConstructor;

import java.time.LocalDate;
import java.util.List;

public class CurriculumReqDTO {

@Getter
@NoArgsConstructor
public static class CreateSessionReq {
private Long userId;
public static class CreateDayReq {
private Integer generation;
private Long week;
private LocalDate sessionDate;
private List<SessionReq> sessions;
}

@Getter
@NoArgsConstructor
public static class SessionReq {
private SessionDayPart dayPart;
private String title;
private String hostName;
private String description;
private String sessionMaterialUrl;
private String assignmentUrl;
private String sessionMaterialName;
private String recordingUrl;
private String recordingPassword;
private String sessionMaterialName;
// PM에만 사용
private String assignmentUrl;
private String assignmentName;
}

@Getter
@NoArgsConstructor
public static class UpdateSessionReq {
public static class UpdateDayReq {
private Integer generation;
private Long week;
private LocalDate sessionDate;
private LocalDate newSessionDate;
private List<UpdateSessionItemReq> sessions;
}

@Getter
@NoArgsConstructor
public static class UpdateSessionItemReq {
private SessionDayPart dayPart;
private SessionStatus status;
private String title;
private String hostName;
private SessionStatus status;
private String description;
private String sessionMaterialUrl;
private String assignmentUrl;
private String sessionMaterialName;
private String recordingUrl;
private String recordingPassword;
private String sessionMaterialName;
private String assignmentUrl;
private String assignmentName;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,77 +2,33 @@

import com.example.Piroin.project.domain.curriculum.enums.SessionDayPart;
import com.example.Piroin.project.domain.curriculum.enums.SessionStatus;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

public class CurriculumResDTO {

@Getter
@AllArgsConstructor
public static class CreateSessionRes {
private Long id;
private String createdBy;
private Integer generation;
private Long week;
private LocalDate sessionDate;
private SessionDayPart dayPart;
private String title;
private String hostName;
private SessionStatus status;
private String description;
private String sessionMaterialUrl;
private String assignmentUrl;
private String recordingUrl;
private String recordingPassword;
private String sessionMaterialName;
private String assignmentName;
private LocalDateTime createdAt;
}

@Getter
@AllArgsConstructor
public static class GetSessionRes {
private Long id;
private Long week;
private LocalDate sessionDate;
private SessionDayPart dayPart;
private String title;
private String hostName;
private SessionStatus status;
private String description;
private String sessionMaterialUrl;
private String assignmentUrl;
private String recordingUrl;
private String recordingPassword;
private String sessionMaterialName;
private String assignmentName;
}

@Getter
@AllArgsConstructor
public static class UpdateSessionRes {
private Long id;
private String createdBy;
private Integer generation;
private Long week;
private LocalDate sessionDate;
private SessionDayPart dayPart;
private String title;
private String hostName;
private SessionStatus status;
private String description;
private String sessionMaterialUrl;
private String assignmentUrl;
private String recordingUrl;
private String recordingPassword;
private String sessionMaterialName;
private String assignmentName;
private LocalDateTime updatedAt;
}
public record SessionInfo(
Long sessionId,
SessionDayPart dayPart,
String title,
String hostName,
SessionStatus status,
String sessionMaterialUrl,
String sessionMaterialName,
String recordingUrl,
String recordingPassword
) {}

public record CreateDayRes(
LocalDate sessionDate,
Integer generation,
Long week,
String assignmentUrl,
String assignmentName,
List<SessionInfo> sessions,
LocalDateTime createdAt
) {}

public record QnaSessionsResponse(
List<ActiveSessionResponse> activeSessions,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,29 +76,24 @@ public class StudySession {
private LocalDateTime createdAt;
private LocalDateTime updatedAt;

public void update(Integer generation, Long week, LocalDate sessionDate, SessionDayPart dayPart,
String title, String hostName, SessionStatus status, String description,
String sessionMaterialUrl, String assignmentUrl, String recordingUrl,
String recordingPassword, String sessionMaterialName, String assignmentName) {
public void updateFull(Integer generation, Long week, LocalDate sessionDate, SessionStatus status, String title, String hostName,
String sessionMaterialUrl, String sessionMaterialName,
String recordingUrl, String recordingPassword,
String assignmentUrl, String assignmentName) {
if (generation != null) this.generation = generation;
if (week != null) this.week = week;
if (sessionDate != null) this.sessionDate = sessionDate;
if (dayPart != null) this.dayPart = dayPart;
if (title != null) this.title = title;
if (hostName != null) this.hostName = hostName;
if (status != null) this.status = status;
if (description != null) this.description = description;
if (sessionMaterialUrl != null) this.sessionMaterialUrl = sessionMaterialUrl;
if (assignmentUrl != null) this.assignmentUrl = assignmentUrl;
if (recordingUrl != null) this.recordingUrl = recordingUrl;
if (recordingPassword != null) this.recordingPassword = recordingPassword;
if (sessionMaterialName != null) this.sessionMaterialName = sessionMaterialName;
if (assignmentName != null) this.assignmentName = assignmentName;
this.title = title;
this.hostName = (hostName != null && !hostName.isBlank()) ? hostName : "(미정)";
this.sessionMaterialUrl = sessionMaterialUrl;
this.sessionMaterialName = sessionMaterialName;
this.recordingUrl = recordingUrl;
this.recordingPassword = recordingPassword;
this.assignmentUrl = assignmentUrl;
this.assignmentName = assignmentName;
this.updatedAt = LocalDateTime.now();
}

public LocalDate getDate() {
return null;
}
}

Loading
Loading