add message attachment fields

This commit is contained in:
2026-04-06 20:38:29 -06:00
parent 31a4356d83
commit 6bde4f4e47
4 changed files with 132 additions and 12 deletions

View File

@@ -1,18 +1,15 @@
package com.petshop.backend.dto.chat; package com.petshop.backend.dto.chat;
import jakarta.validation.constraints.NotBlank;
public class MessageRequest { public class MessageRequest {
@NotBlank(message = "Message content is required")
private String content; private String content;
private String attachmentUrl;
private String attachmentName;
private String attachmentMimeType;
private Long attachmentSizeBytes;
public MessageRequest() { public MessageRequest() {
} }
public MessageRequest(String content) {
this.content = content;
}
public String getContent() { public String getContent() {
return content; return content;
} }
@@ -20,4 +17,36 @@ public class MessageRequest {
public void setContent(String content) { public void setContent(String content) {
this.content = 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;
}
} }

View File

@@ -11,6 +11,10 @@ public class MessageResponse {
private String content; private String content;
private LocalDateTime timestamp; private LocalDateTime timestamp;
private Boolean isRead; private Boolean isRead;
private String attachmentUrl;
private String attachmentName;
private String attachmentMimeType;
private Long attachmentSizeBytes;
public MessageResponse() { public MessageResponse() {
} }
@@ -32,6 +36,10 @@ public class MessageResponse {
response.setContent(message.getContent()); response.setContent(message.getContent());
response.setTimestamp(message.getTimestamp()); response.setTimestamp(message.getTimestamp());
response.setIsRead(message.getIsRead()); response.setIsRead(message.getIsRead());
response.setAttachmentUrl(message.getAttachmentUrl());
response.setAttachmentName(message.getAttachmentName());
response.setAttachmentMimeType(message.getAttachmentMimeType());
response.setAttachmentSizeBytes(message.getAttachmentSizeBytes());
return response; return response;
} }
@@ -82,4 +90,36 @@ public class MessageResponse {
public void setIsRead(Boolean isRead) { public void setIsRead(Boolean isRead) {
this.isRead = 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;
}
} }

View File

@@ -19,9 +19,20 @@ public class Message {
@Column(nullable = false) @Column(nullable = false)
private Long senderId; private Long senderId;
@Column(nullable = false, columnDefinition = "TEXT") @Column(columnDefinition = "TEXT")
private String content; 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 @CreationTimestamp
@Column(nullable = false, updatable = false) @Column(nullable = false, updatable = false)
private LocalDateTime timestamp; private LocalDateTime timestamp;
@@ -88,4 +99,36 @@ public class Message {
public void setIsRead(Boolean isRead) { public void setIsRead(Boolean isRead) {
this.isRead = 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;
}
} }

View File

@@ -77,7 +77,8 @@ public class ChatService {
return conversations.stream() return conversations.stream()
.map(conv -> { .map(conv -> {
List<Message> messages = messageRepository.findByConversationIdOrderByTimestampAsc(conv.getId()); List<Message> 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); return ConversationResponse.fromEntity(conv, lastMessage);
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());
@@ -97,7 +98,8 @@ public class ChatService {
} }
List<Message> messages = messageRepository.findByConversationIdOrderByTimestampAsc(conversationId); List<Message> 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); return ConversationResponse.fromEntity(conversation, lastMessage);
} }
@@ -124,6 +126,10 @@ public class ChatService {
message.setConversationId(conversationId); message.setConversationId(conversationId);
message.setSenderId(userId); message.setSenderId(userId);
message.setContent(request.getContent()); message.setContent(request.getContent());
message.setAttachmentUrl(request.getAttachmentUrl());
message.setAttachmentName(request.getAttachmentName());
message.setAttachmentMimeType(request.getAttachmentMimeType());
message.setAttachmentSizeBytes(request.getAttachmentSizeBytes());
message.setIsRead(false); message.setIsRead(false);
message = messageRepository.save(message); message = messageRepository.save(message);
@@ -158,7 +164,8 @@ public class ChatService {
conversationRepository.save(conversation); conversationRepository.save(conversation);
List<Message> messages = messageRepository.findByConversationIdOrderByTimestampAsc(conversationId); List<Message> 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); return ConversationResponse.fromEntity(conversation, lastMessage);
} }
@@ -180,7 +187,8 @@ public class ChatService {
conversation = conversationRepository.save(conversation); conversation = conversationRepository.save(conversation);
List<Message> messages = messageRepository.findByConversationIdOrderByTimestampAsc(conversationId); List<Message> 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); return ConversationResponse.fromEntity(conversation, lastMessage);
} }