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 @@ -196,7 +196,7 @@ private List<ApplicationResponse.DecisionContextItemDTO> toDecisionContextItems(
.time(applicationTimeline.getDecisionTimeline().getTimestamp())
.memberId(memberId)
.memberName(member != null ? member.getName() : null)
.profileImage(member != null ? member.getProfileImage() : null)
.profileImage(memberUseCase.getProfileImageUrl(member) )
.dialogueContent(applicationTimeline.getDecisionTimeline().getUtterance())
.build();
})
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,13 @@
package com.whylog.server.domain.meeting.dto;

import com.whylog.server.domain.meeting.entity.Dialogue;
import com.whylog.server.domain.meeting.entity.Meeting;
import com.whylog.server.domain.meeting.entity.MeetingAnalysis;
import com.whylog.server.domain.meeting.enums.MeetingStatus;
import com.whylog.server.domain.meeting.socket.MeetingParticipant;
import com.whylog.server.domain.user.entity.Member;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.List;

Expand Down Expand Up @@ -196,15 +192,6 @@ public static class ParticipantDTO {
@Schema(description = "참여자 프로필 사진 URL", example = "https://example.com/profile/user-1.jpg")
private String profileImage;

public static List<ParticipantDTO> create(List<Member> members) {
return members.stream().map(member -> ParticipantDTO.builder()
.memberId(member.getId())
.name(member.getName())
.profileImage(member.getProfileImage())
.build()
).toList();
}

}

@Getter
Expand All @@ -223,44 +210,6 @@ public static class DialogueDTO {
@Schema(description = "말한 시간", example = "00:22")
private String timestamp;

public static List<DialogueDTO> create(Meeting meeting, List<Dialogue> dialogues) {
LocalDateTime startDateTime = meeting.getStartDateTime();

return dialogues.stream().map(dialogue -> DialogueDTO.builder()
.memberId(dialogue.getMember().getId())
.content(dialogue.getContent())
.timestamp(formatElapsed(startDateTime, dialogue.getSpeechDateTime()))
.build()
).toList();
}

private static String formatElapsed(LocalDateTime startDateTime, LocalDateTime speechDateTime) {
if (startDateTime == null || speechDateTime == null) {
return null;
}

Duration elapsed = Duration.between(startDateTime, speechDateTime);
if (elapsed.isNegative()) {
return "00:00";
}

long totalSeconds = elapsed.getSeconds();
long minutes = totalSeconds / 60;
long seconds = totalSeconds % 60;
return String.format("%02d:%02d", minutes, seconds);
}

}

public static HistoryListDTO create(Meeting meeting, List<Dialogue> dialogues, List<Member> participants ) {

List<ParticipantDTO> participantDtoList = ParticipantDTO.create(participants);
List<DialogueDTO> dialogueDtoList = DialogueDTO.create(meeting, dialogues);
return HistoryListDTO.builder()
.participants(participantDtoList)
.dialogues(dialogueDtoList)
.build();

}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,14 @@
import com.whylog.server.domain.meeting.entity.MeetingMember;
import com.whylog.server.domain.meeting.enums.MeetingStatus;
import com.whylog.server.domain.user.entity.Member;
import com.whylog.server.domain.user.service.MemberUseCase;
import com.whylog.server.global.apiPayload.exception.ParameterRequiredException;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

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

@Service
Expand All @@ -20,6 +23,7 @@ public class MeetingQueryService {

private final MeetingUseCase meetingUseCase;
private final MeetingAudioReplayService meetingAudioReplayService;
private final MemberUseCase memberUseCase;

// 미팅 목록 조회
@Transactional(readOnly = true)
Expand Down Expand Up @@ -69,7 +73,7 @@ private List<MeetingResponse.MeetingParticipantInfo> memberToParticipantsInfo(Li
.map(member -> MeetingResponse.MeetingParticipantInfo.builder()
.memberId(member.getId())
.name(member.getName())
.profileImage(member.getProfileImage())
.profileImage(memberUseCase.getProfileImageUrl(member))
.build()
).toList();
}
Expand Down Expand Up @@ -109,7 +113,50 @@ public MeetingResponse.HistoryListDTO getDialogueHistory(Long meetingId) {
.toList();

// dto 생성 및 반환
return MeetingResponse.HistoryListDTO.create(meeting, dialogues, members);
return createHistoryListDto(meeting, dialogues, members);
}

private MeetingResponse.HistoryListDTO createHistoryListDto(Meeting meeting, List<Dialogue> dialogues, List<Member> members) {
return MeetingResponse.HistoryListDTO.builder()
.participants(createParticipantDtos(members))
.dialogues(createDialogueDtos(meeting, dialogues))
.build();
}

private List<MeetingResponse.HistoryListDTO.ParticipantDTO> createParticipantDtos(List<Member> members) {
return members.stream().map(member -> MeetingResponse.HistoryListDTO.ParticipantDTO.builder()
.memberId(member.getId())
.name(member.getName())
.profileImage(memberUseCase.getProfileImageUrl(member))
.build()
).toList();
}

private List<MeetingResponse.HistoryListDTO.DialogueDTO> createDialogueDtos(Meeting meeting, List<Dialogue> dialogues) {
LocalDateTime startDateTime = meeting.getStartDateTime();

return dialogues.stream().map(dialogue -> MeetingResponse.HistoryListDTO.DialogueDTO.builder()
.memberId(dialogue.getMember().getId())
.content(dialogue.getContent())
.timestamp(formatElapsed(startDateTime, dialogue.getSpeechDateTime()))
.build()
).toList();
}

private String formatElapsed(LocalDateTime startDateTime, LocalDateTime speechDateTime) {
if (startDateTime == null || speechDateTime == null) {
return null;
}

Duration elapsed = Duration.between(startDateTime, speechDateTime);
if (elapsed.isNegative()) {
return "00:00";
}

long totalSeconds = elapsed.getSeconds();
long minutes = totalSeconds / 60;
long seconds = totalSeconds % 60;
return String.format("%02d:%02d", minutes, seconds);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import com.whylog.server.domain.user.exception.MemberNotFoundException;
import com.whylog.server.domain.user.repository.MemberRepository;
import java.util.List;

import com.whylog.server.global.external.s3.S3Client;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

Expand All @@ -12,6 +14,7 @@
public class MemberUseCase {

private final MemberRepository memberRepository;
private final S3Client s3Client;

// id로 member 조회
public Member findMemberById(Long id){
Expand All @@ -28,4 +31,13 @@ public List<Member> findMembersByIds(List<Long> memberIds) {
return memberRepository.findAllById(memberIds);
}

public String getProfileImageUrl(Member member) {

if(member == null)
return null;

// s3Client.getFileUrl에서 null 검사 해줘서 바로 리턴해줘도 됨
return s3Client.getFileUrl(member.getProfileImage());
}

}
Loading