mirror of
https://github.com/hwanny1128/HGZero.git
synced 2026-06-13 05:59:11 +00:00
회의록 템플릿 선택 API 개발
This commit is contained in:
@@ -123,4 +123,11 @@ public class Meeting {
|
||||
this.participants.add(participantEmail);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 템플릿 적용
|
||||
*/
|
||||
public void applyTemplate(String templateId) {
|
||||
this.templateId = templateId;
|
||||
}
|
||||
}
|
||||
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
package com.unicorn.hgzero.meeting.biz.service;
|
||||
|
||||
import com.unicorn.hgzero.meeting.biz.domain.Meeting;
|
||||
import com.unicorn.hgzero.meeting.biz.usecase.in.meeting.ApplyTemplateUseCase;
|
||||
import com.unicorn.hgzero.meeting.biz.usecase.out.MeetingReader;
|
||||
import com.unicorn.hgzero.meeting.biz.usecase.out.MeetingWriter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* 회의록 템플릿 적용 서비스
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
@Transactional
|
||||
public class ApplyTemplateService implements ApplyTemplateUseCase {
|
||||
|
||||
private final MeetingReader meetingReader;
|
||||
private final MeetingWriter meetingWriter;
|
||||
|
||||
@Override
|
||||
public Meeting applyTemplate(ApplyTemplateCommand command) {
|
||||
log.debug("템플릿 적용 시작 - meetingId: {}, templateId: {}",
|
||||
command.meetingId(), command.templateId());
|
||||
|
||||
// 회의 조회
|
||||
Meeting meeting = meetingReader.findById(command.meetingId())
|
||||
.orElseThrow(() -> new IllegalArgumentException("회의를 찾을 수 없습니다: " + command.meetingId()));
|
||||
|
||||
// 템플릿 적용 (회의 도메인에서 처리)
|
||||
meeting.applyTemplate(command.templateId());
|
||||
|
||||
// 회의 정보 업데이트
|
||||
Meeting updatedMeeting = meetingWriter.save(meeting);
|
||||
|
||||
log.debug("템플릿 적용 완료 - meetingId: {}, templateId: {}",
|
||||
command.meetingId(), command.templateId());
|
||||
|
||||
return updatedMeeting;
|
||||
}
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package com.unicorn.hgzero.meeting.biz.usecase.in.meeting;
|
||||
|
||||
import com.unicorn.hgzero.meeting.biz.domain.Meeting;
|
||||
|
||||
/**
|
||||
* 회의록 템플릿 적용 UseCase
|
||||
*/
|
||||
public interface ApplyTemplateUseCase {
|
||||
|
||||
/**
|
||||
* 회의에 템플릿을 적용
|
||||
*
|
||||
* @param command 템플릿 적용 명령
|
||||
* @return 업데이트된 회의 정보
|
||||
*/
|
||||
Meeting applyTemplate(ApplyTemplateCommand command);
|
||||
|
||||
/**
|
||||
* 템플릿 적용 명령
|
||||
*/
|
||||
record ApplyTemplateCommand(
|
||||
String meetingId,
|
||||
String templateId
|
||||
) {}
|
||||
}
|
||||
+9
-2
@@ -38,6 +38,7 @@ public class MeetingController {
|
||||
private final GetMeetingUseCase getMeetingUseCase;
|
||||
private final CancelMeetingUseCase cancelMeetingUseCase;
|
||||
private final InviteParticipantUseCase inviteParticipantUseCase;
|
||||
private final ApplyTemplateUseCase applyTemplateUseCase;
|
||||
|
||||
/**
|
||||
* 회의 예약
|
||||
@@ -112,11 +113,17 @@ public class MeetingController {
|
||||
|
||||
log.info("템플릿 적용 요청 - meetingId: {}, templateId: {}", meetingId, request.getTemplateId());
|
||||
|
||||
var meetingData = getMeetingUseCase.getMeeting(meetingId);
|
||||
var meetingData = applyTemplateUseCase.applyTemplate(
|
||||
new ApplyTemplateUseCase.ApplyTemplateCommand(
|
||||
meetingId,
|
||||
request.getTemplateId()
|
||||
)
|
||||
);
|
||||
|
||||
var meetingDTO = MeetingDTO.from(meetingData);
|
||||
var response = MeetingResponse.from(meetingDTO);
|
||||
|
||||
log.info("템플릿 적용 완료 - meetingId: {}", meetingId);
|
||||
log.info("템플릿 적용 완료 - meetingId: {}, templateId: {}", meetingId, request.getTemplateId());
|
||||
|
||||
return ResponseEntity.ok(ApiResponse.success(response));
|
||||
}
|
||||
|
||||
+2
-4
@@ -17,9 +17,7 @@ import jakarta.validation.constraints.NotBlank;
|
||||
public class SelectTemplateRequest {
|
||||
|
||||
@NotBlank(message = "템플릿 ID는 필수입니다")
|
||||
@Schema(description = "템플릿 ID", example = "template-001", required = true)
|
||||
@Schema(description = "템플릿 ID", example = "general", required = true,
|
||||
allowableValues = {"general", "scrum", "kickoff", "weekly"})
|
||||
private String templateId;
|
||||
|
||||
@Schema(description = "커스터마이징 옵션", example = "섹션 순서 변경 또는 추가 섹션 포함")
|
||||
private String customization;
|
||||
}
|
||||
Reference in New Issue
Block a user