fix: AgendaSection opinions 필드 제거 및 DB 마이그레이션 스크립트 추가

- AgendaSection 도메인 및 Entity에서 opinions 필드 제거
- ParticipantOpinion 내부 클래스 삭제
- MeetingAiController 및 AgendaSectionResponse에서 opinions 관련 로직 제거
- agenda_sections 테이블 마이그레이션 SQL 스크립트 추가
  * agenda_number: varchar(50) → integer 변환
  * decisions, pending_items, todos: text → json 변환
  * opinions 컬럼 삭제
- 자동 백업 및 롤백 기능 포함

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Minseo-Jo
2025-10-29 11:19:16 +09:00
parent 621d4c16df
commit 96e09ae83d
3 changed files with 142 additions and 28 deletions
@@ -162,16 +162,6 @@ public class MeetingAiController {
}
private AgendaSectionResponse.AgendaSectionItem convertToAgendaSectionItem(AgendaSection section) {
List<AgendaSectionResponse.AgendaSectionItem.ParticipantOpinion> opinions = null;
if (section.getOpinions() != null) {
opinions = section.getOpinions().stream()
.map(op -> AgendaSectionResponse.AgendaSectionItem.ParticipantOpinion.builder()
.speaker(op.getSpeaker())
.opinion(op.getOpinion())
.build())
.collect(Collectors.toList());
}
List<AgendaSectionResponse.AgendaSectionItem.TodoItem> todos = null;
if (section.getTodos() != null) {
todos = section.getTodos().stream()
@@ -194,7 +184,6 @@ public class MeetingAiController {
.discussions(section.getDiscussions())
.decisions(section.getDecisions())
.pendingItems(section.getPendingItems())
.opinions(opinions)
.todos(todos)
.createdAt(section.getCreatedAt())
.updatedAt(section.getUpdatedAt())
@@ -58,9 +58,6 @@ public class AgendaSectionResponse {
@Schema(description = "보류 사항 목록")
private List<String> pendingItems;
@Schema(description = "참석자별 의견")
private List<ParticipantOpinion> opinions;
@Schema(description = "AI 추출 Todo 목록")
private List<TodoItem> todos;
@@ -72,20 +69,6 @@ public class AgendaSectionResponse {
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
private LocalDateTime updatedAt;
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "참석자 의견")
public static class ParticipantOpinion {
@Schema(description = "발언자 이름", example = "김민준")
private String speaker;
@Schema(description = "의견 내용", example = "타겟 고객층을 명확히 설정하여 마케팅 전략 수립 필요")
private String opinion;
}
@Getter
@Builder
@NoArgsConstructor