From 3760d61e2eb0802879df470e44fef5e868072e64 Mon Sep 17 00:00:00 2001 From: Harkamal Randhawa Date: Mon, 6 Apr 2026 20:38:29 -0600 Subject: [PATCH] add message attachment fields --- .../backend/dto/chat/MessageRequest.java | 43 +++++++++++++++--- .../backend/dto/chat/MessageResponse.java | 40 +++++++++++++++++ .../com/petshop/backend/entity/Message.java | 45 ++++++++++++++++++- .../petshop/backend/service/ChatService.java | 16 +++++-- 4 files changed, 132 insertions(+), 12 deletions(-) diff --git a/backend/src/main/java/com/petshop/backend/dto/chat/MessageRequest.java b/backend/src/main/java/com/petshop/backend/dto/chat/MessageRequest.java index cb03d310..cecedfbd 100644 --- a/backend/src/main/java/com/petshop/backend/dto/chat/MessageRequest.java +++ b/backend/src/main/java/com/petshop/backend/dto/chat/MessageRequest.java @@ -1,18 +1,15 @@ package com.petshop.backend.dto.chat; -import jakarta.validation.constraints.NotBlank; - public class MessageRequest { - @NotBlank(message = "Message content is required") private String content; + private String attachmentUrl; + private String attachmentName; + private String attachmentMimeType; + private Long attachmentSizeBytes; public MessageRequest() { } - public MessageRequest(String content) { - this.content = content; - } - public String getContent() { return content; } @@ -20,4 +17,36 @@ public class MessageRequest { public void setContent(String content) { this.content = content; } + + public String getAttachmentUrl() { + return attachmentUrl; + } + + public void setAttachmentUrl(String attachmentUrl) { + this.attachmentUrl = attachmentUrl; + } + + public String getAttachmentName() { + return attachmentName; + } + + public void setAttachmentName(String attachmentName) { + this.attachmentName = attachmentName; + } + + public String getAttachmentMimeType() { + return attachmentMimeType; + } + + public void setAttachmentMimeType(String attachmentMimeType) { + this.attachmentMimeType = attachmentMimeType; + } + + public Long getAttachmentSizeBytes() { + return attachmentSizeBytes; + } + + public void setAttachmentSizeBytes(Long attachmentSizeBytes) { + this.attachmentSizeBytes = attachmentSizeBytes; + } } diff --git a/backend/src/main/java/com/petshop/backend/dto/chat/MessageResponse.java b/backend/src/main/java/com/petshop/backend/dto/chat/MessageResponse.java index 25cffae5..fba1c7c8 100644 --- a/backend/src/main/java/com/petshop/backend/dto/chat/MessageResponse.java +++ b/backend/src/main/java/com/petshop/backend/dto/chat/MessageResponse.java @@ -11,6 +11,10 @@ public class MessageResponse { private String content; private LocalDateTime timestamp; private Boolean isRead; + private String attachmentUrl; + private String attachmentName; + private String attachmentMimeType; + private Long attachmentSizeBytes; public MessageResponse() { } @@ -32,6 +36,10 @@ public class MessageResponse { response.setContent(message.getContent()); response.setTimestamp(message.getTimestamp()); response.setIsRead(message.getIsRead()); + response.setAttachmentUrl(message.getAttachmentUrl()); + response.setAttachmentName(message.getAttachmentName()); + response.setAttachmentMimeType(message.getAttachmentMimeType()); + response.setAttachmentSizeBytes(message.getAttachmentSizeBytes()); return response; } @@ -82,4 +90,36 @@ public class MessageResponse { public void setIsRead(Boolean isRead) { this.isRead = isRead; } + + public String getAttachmentUrl() { + return attachmentUrl; + } + + public void setAttachmentUrl(String attachmentUrl) { + this.attachmentUrl = attachmentUrl; + } + + public String getAttachmentName() { + return attachmentName; + } + + public void setAttachmentName(String attachmentName) { + this.attachmentName = attachmentName; + } + + public String getAttachmentMimeType() { + return attachmentMimeType; + } + + public void setAttachmentMimeType(String attachmentMimeType) { + this.attachmentMimeType = attachmentMimeType; + } + + public Long getAttachmentSizeBytes() { + return attachmentSizeBytes; + } + + public void setAttachmentSizeBytes(Long attachmentSizeBytes) { + this.attachmentSizeBytes = attachmentSizeBytes; + } } diff --git a/backend/src/main/java/com/petshop/backend/entity/Message.java b/backend/src/main/java/com/petshop/backend/entity/Message.java index 33777bf5..7c7bc498 100644 --- a/backend/src/main/java/com/petshop/backend/entity/Message.java +++ b/backend/src/main/java/com/petshop/backend/entity/Message.java @@ -19,9 +19,20 @@ public class Message { @Column(nullable = false) private Long senderId; - @Column(nullable = false, columnDefinition = "TEXT") + @Column(columnDefinition = "TEXT") private String content; + @Column(length = 255) + private String attachmentUrl; + + @Column(length = 255) + private String attachmentName; + + @Column(length = 100) + private String attachmentMimeType; + + private Long attachmentSizeBytes; + @CreationTimestamp @Column(nullable = false, updatable = false) private LocalDateTime timestamp; @@ -88,4 +99,36 @@ public class Message { public void setIsRead(Boolean isRead) { this.isRead = isRead; } + + public String getAttachmentUrl() { + return attachmentUrl; + } + + public void setAttachmentUrl(String attachmentUrl) { + this.attachmentUrl = attachmentUrl; + } + + public String getAttachmentName() { + return attachmentName; + } + + public void setAttachmentName(String attachmentName) { + this.attachmentName = attachmentName; + } + + public String getAttachmentMimeType() { + return attachmentMimeType; + } + + public void setAttachmentMimeType(String attachmentMimeType) { + this.attachmentMimeType = attachmentMimeType; + } + + public Long getAttachmentSizeBytes() { + return attachmentSizeBytes; + } + + public void setAttachmentSizeBytes(Long attachmentSizeBytes) { + this.attachmentSizeBytes = attachmentSizeBytes; + } } diff --git a/backend/src/main/java/com/petshop/backend/service/ChatService.java b/backend/src/main/java/com/petshop/backend/service/ChatService.java index e39d9c55..e076daed 100644 --- a/backend/src/main/java/com/petshop/backend/service/ChatService.java +++ b/backend/src/main/java/com/petshop/backend/service/ChatService.java @@ -77,7 +77,8 @@ public class ChatService { return conversations.stream() .map(conv -> { List messages = messageRepository.findByConversationIdOrderByTimestampAsc(conv.getId()); - String lastMessage = messages.isEmpty() ? "" : messages.get(messages.size() - 1).getContent(); + Message last = messages.isEmpty() ? null : messages.get(messages.size() - 1); + String lastMessage = last != null && last.getContent() != null ? last.getContent() : ""; return ConversationResponse.fromEntity(conv, lastMessage); }) .collect(Collectors.toList()); @@ -97,7 +98,8 @@ public class ChatService { } List messages = messageRepository.findByConversationIdOrderByTimestampAsc(conversationId); - String lastMessage = messages.isEmpty() ? "" : messages.get(messages.size() - 1).getContent(); + Message last = messages.isEmpty() ? null : messages.get(messages.size() - 1); + String lastMessage = last != null && last.getContent() != null ? last.getContent() : ""; return ConversationResponse.fromEntity(conversation, lastMessage); } @@ -124,6 +126,10 @@ public class ChatService { message.setConversationId(conversationId); message.setSenderId(userId); message.setContent(request.getContent()); + message.setAttachmentUrl(request.getAttachmentUrl()); + message.setAttachmentName(request.getAttachmentName()); + message.setAttachmentMimeType(request.getAttachmentMimeType()); + message.setAttachmentSizeBytes(request.getAttachmentSizeBytes()); message.setIsRead(false); message = messageRepository.save(message); @@ -158,7 +164,8 @@ public class ChatService { conversationRepository.save(conversation); List messages = messageRepository.findByConversationIdOrderByTimestampAsc(conversationId); - String lastMessage = messages.isEmpty() ? "" : messages.get(messages.size() - 1).getContent(); + Message last = messages.isEmpty() ? null : messages.get(messages.size() - 1); + String lastMessage = last != null && last.getContent() != null ? last.getContent() : ""; return ConversationResponse.fromEntity(conversation, lastMessage); } @@ -180,7 +187,8 @@ public class ChatService { conversation = conversationRepository.save(conversation); List messages = messageRepository.findByConversationIdOrderByTimestampAsc(conversationId); - String lastMessage = messages.isEmpty() ? "" : messages.get(messages.size() - 1).getContent(); + Message last = messages.isEmpty() ? null : messages.get(messages.size() - 1); + String lastMessage = last != null && last.getContent() != null ? last.getContent() : ""; return ConversationResponse.fromEntity(conversation, lastMessage); }