mirror of
https://github.com/hwanny1128/HGZero.git
synced 2026-01-21 17:16:24 +00:00
Chore: 회의록 상세 조회 API - AgendaSection 업데이트 반영
This commit is contained in:
parent
77f38abe48
commit
764a620980
File diff suppressed because it is too large
Load Diff
@ -920,8 +920,10 @@ public class MinutesController {
|
||||
.modifiedAt(agendaSection.getUpdatedAt() != null ? agendaSection.getUpdatedAt() : LocalDateTime.now())
|
||||
.build();
|
||||
|
||||
// 안건 상세 내용 구성 - JSON 파싱
|
||||
List<String> discussionsList = parseJsonToList(agendaSection.getDiscussions());
|
||||
// 안건 상세 내용 구성
|
||||
// discussions는 이제 TEXT 타입이므로 별도 파싱 로직 적용
|
||||
List<String> discussionsList = parseDiscussionsText(agendaSection.getDiscussions());
|
||||
// decisions는 JSON 문자열로 저장되어 있으므로 파싱 필요
|
||||
List<String> decisionsList = parseJsonToList(agendaSection.getDecisions());
|
||||
|
||||
MinutesDetailResponse.AgendaDetails details = MinutesDetailResponse.AgendaDetails.builder()
|
||||
@ -1055,6 +1057,41 @@ public class MinutesController {
|
||||
return discussions;
|
||||
}
|
||||
|
||||
/**
|
||||
* AgendaSection의 discussions TEXT 필드 파싱
|
||||
*/
|
||||
private List<String> parseDiscussionsText(String discussions) {
|
||||
if (discussions == null || discussions.trim().isEmpty()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
// **논의 사항:** 형식으로 저장된 텍스트 파싱
|
||||
List<String> discussionsList = new ArrayList<>();
|
||||
|
||||
// 줄바꿈으로 분리하고 - 로 시작하는 항목 추출
|
||||
String[] lines = discussions.split("\n");
|
||||
for (String line : lines) {
|
||||
line = line.trim();
|
||||
if (line.startsWith("-") || line.startsWith("•") || line.startsWith("*")) {
|
||||
// 불릿 포인트 제거
|
||||
String item = line.substring(1).trim();
|
||||
if (!item.isEmpty()) {
|
||||
discussionsList.add(item);
|
||||
}
|
||||
} else if (!line.isEmpty() && !line.contains("논의") && !line.contains(":**")) {
|
||||
// 불릿 포인트가 없는 텍스트도 포함
|
||||
discussionsList.add(line);
|
||||
}
|
||||
}
|
||||
|
||||
if (discussionsList.isEmpty()) {
|
||||
// 구조화되지 않은 경우 전체 텍스트 반환
|
||||
discussionsList.add(discussions.trim());
|
||||
}
|
||||
|
||||
return discussionsList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 회의록 섹션 내용에서 결정사항 추출
|
||||
*/
|
||||
|
||||
@ -3,11 +3,14 @@ package com.unicorn.hgzero.meeting.infra.gateway.entity;
|
||||
import com.unicorn.hgzero.common.entity.BaseTimeEntity;
|
||||
import com.unicorn.hgzero.meeting.biz.domain.AgendaSection;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 회의 안건 섹션 엔티티
|
||||
* agenda_sections 테이블과 매핑
|
||||
* 안건별 회의록 섹션 Entity
|
||||
* PostgreSQL JSON 컬럼을 사용하여 구조화된 데이터 저장
|
||||
*/
|
||||
@Entity
|
||||
@Table(name = "agenda_sections")
|
||||
@ -18,7 +21,7 @@ import lombok.*;
|
||||
public class AgendaSectionEntity extends BaseTimeEntity {
|
||||
|
||||
@Id
|
||||
@Column(length = 36)
|
||||
@Column(name = "id", length = 36)
|
||||
private String id;
|
||||
|
||||
@Column(name = "minutes_id", length = 36, nullable = false)
|
||||
@ -39,20 +42,20 @@ public class AgendaSectionEntity extends BaseTimeEntity {
|
||||
@Column(name = "discussions", columnDefinition = "TEXT")
|
||||
private String discussions;
|
||||
|
||||
@Column(name = "decisions", columnDefinition = "TEXT")
|
||||
@Column(name = "decisions", columnDefinition = "json")
|
||||
private String decisions;
|
||||
|
||||
@Column(name = "opinions", columnDefinition = "TEXT")
|
||||
private String opinions;
|
||||
|
||||
@Column(name = "pending_items", columnDefinition = "TEXT")
|
||||
@Column(name = "pending_items", columnDefinition = "json")
|
||||
private String pendingItems;
|
||||
|
||||
@Column(name = "todos", columnDefinition = "TEXT")
|
||||
@Column(name = "opinions", columnDefinition = "json")
|
||||
private String opinions;
|
||||
|
||||
@Column(name = "todos", columnDefinition = "json")
|
||||
private String todos;
|
||||
|
||||
/**
|
||||
* 도메인 객체로 변환
|
||||
* Domain 객체로 변환
|
||||
*/
|
||||
public AgendaSection toDomain() {
|
||||
return AgendaSection.builder()
|
||||
@ -64,8 +67,8 @@ public class AgendaSectionEntity extends BaseTimeEntity {
|
||||
.aiSummaryShort(this.aiSummaryShort)
|
||||
.discussions(this.discussions)
|
||||
.decisions(this.decisions)
|
||||
.opinions(this.opinions)
|
||||
.pendingItems(this.pendingItems)
|
||||
.opinions(this.opinions)
|
||||
.todos(this.todos)
|
||||
.createdAt(this.getCreatedAt())
|
||||
.updatedAt(this.getUpdatedAt())
|
||||
@ -73,21 +76,22 @@ public class AgendaSectionEntity extends BaseTimeEntity {
|
||||
}
|
||||
|
||||
/**
|
||||
* 도메인 객체에서 엔티티 생성
|
||||
* Domain 객체에서 Entity 생성
|
||||
*/
|
||||
public static AgendaSectionEntity fromDomain(AgendaSection domain) {
|
||||
public static AgendaSectionEntity fromDomain(AgendaSection section) {
|
||||
return AgendaSectionEntity.builder()
|
||||
.id(domain.getId())
|
||||
.minutesId(domain.getMinutesId())
|
||||
.meetingId(domain.getMeetingId())
|
||||
.agendaNumber(domain.getAgendaNumber())
|
||||
.agendaTitle(domain.getAgendaTitle())
|
||||
.aiSummaryShort(domain.getAiSummaryShort())
|
||||
.discussions(domain.getDiscussions())
|
||||
.decisions(domain.getDecisions())
|
||||
.opinions(domain.getOpinions())
|
||||
.pendingItems(domain.getPendingItems())
|
||||
.todos(domain.getTodos())
|
||||
.id(section.getId())
|
||||
.minutesId(section.getMinutesId())
|
||||
.meetingId(section.getMeetingId())
|
||||
.agendaNumber(section.getAgendaNumber())
|
||||
.agendaTitle(section.getAgendaTitle())
|
||||
.aiSummaryShort(section.getAiSummaryShort())
|
||||
.discussions(section.getDiscussions())
|
||||
.decisions(section.getDecisions())
|
||||
.pendingItems(section.getPendingItems())
|
||||
.opinions(section.getOpinions())
|
||||
.todos(section.getTodos())
|
||||
.build();
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user