daangn-daangn / daangn-server

🥕당근 서버 리포지토리🥕
4 stars 2 forks source link

'채팅방' 이미지 처리 추가 API 개발 #78

Closed cotchan closed 2 years ago

cotchan commented 2 years ago

작업내용

PR

목차

  1. 채팅방에서 '이미지' 전송 시 sync를 맞출 수 있도록 추가 API 개발
    • 문제상황
    • 해결방법
  2. 채팅방에서 '이미지' 복수 개 전송할 수 있도록 처리
    • 문제상황
    • 해결방법

채팅방에서 '이미지' 전송 시 sync를 맞출 수 있도록 추가 API 개발

문제상황

해결방법

request 예시

{
    "img_files": ["test1.jpg"]
}

response 예시

{
    "origin_name": "test1.jpg",
    "image_name": "15785614-e0e9-4d4f-97aa-9a09abb05a6dtest1.jpg",
    "presigned_url": "https://project-club-bucket.s3.ap-northeast-2.amazonaws.com/chat-image/15785614-e0e9-4d4f-97aa-9a09abb05a6dtest1.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20220626T084527Z&X-Amz-SignedHeaders=host&X-Amz-Expires=600&X-Amz-Credential=AKIA4EAIYFA45U7IOW6L%2F20220626%2Fap-northeast-2%2Fs3%2Faws4_request&X-Amz-Signature=20efb322e9ae20ccc939afd1f9e18352266b1d449d7b123b1c16ad84f5f0c924"
}

채팅방에서 '이미지' 복수 개 전송할 수 있도록 처리

문제상황

해결방법

@Getter
@NoArgsConstructor
public class ChatMessage {

    private Long senderId;
    private MessageType messageType;
    private String message;
    private List<String> imgUrls = new ArrayList<>();
    private LocalDateTime createdAt;

    public Optional<String> getMessage() {
        return ofNullable(message);
    }

    public static ChatMessage ofMessage(Long senderId,
                                        MessageType messageType,
                                        String message) {

        checkArgument(senderId != null, "senderId 값은 필수입니다.");
        checkArgument(messageType != null, "messageType 값은 필수입니다.");
        checkArgument(isNotEmpty(message), "message 값은 필수입니다.");

        return ChatMessage.builder()
                .senderId(senderId)
                .messageType(messageType)
                .message(message)
                .imgUrls(null)
                .build();
    }

    public static ChatMessage ofImage(Long senderId, List<String> imgUrls) {
        checkArgument(senderId != null, "senderId 값은 필수입니다.");
        checkArgument(imgUrls != null, "imgUrls 값은 필수입니다.");
        checkArgument(imgUrls.size() <= 10, "message 값은 필수입니다.");

        return ChatMessage.builder()
                .senderId(senderId)
                .messageType(MessageType.IMAGE)
                .message(null)
                .imgUrls(imgUrls)
                .build();
    }
    //...
}