Send text message

This commit is contained in:
2025-07-30 18:00:56 +03:30
parent 7608dd47e0
commit c6eea66966
10 changed files with 386 additions and 82 deletions
@@ -1,5 +1,6 @@
package org.to.telegramfinalproject.Database;
import org.to.telegramfinalproject.Models.FileAttachment;
import org.to.telegramfinalproject.Models.Message;
import java.sql.*;
@@ -12,38 +13,55 @@ import java.util.stream.Collectors;
public class MessageDatabase {
public static void save(Message message) {
String sql = """
INSERT INTO messages (
message_id, sender_id, receiver_type, receiver_id, content,
message_type, file_url, send_at, status,
reply_to_id, is_edited, original_message_id, forwarded_by, forwarded_from
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
""";
public static boolean insertMessage(UUID messageId, UUID senderId, UUID receiverId,
String receiverType, String content, String messageType) {
String sql = "INSERT INTO messages (message_id, sender_id, receiver_type, receiver_id, content, message_type) " +
"VALUES (?, ?, ?, ?, ?, ?)";
try (Connection conn = ConnectionDb.connect();
PreparedStatement stmt = conn.prepareStatement(sql)) {
PreparedStatement ps = conn.prepareStatement(sql)) {
stmt.setObject(1, message.getMessage_id());
stmt.setObject(2, message.getSender_id());
stmt.setString(3, message.getReceiver_type());
stmt.setObject(4, message.getReceiver_id());
stmt.setString(5, message.getContent());
stmt.setString(6, message.getMessage_type());
stmt.setString(7, message.getFile_url());
stmt.setObject(8, message.getSend_at());
stmt.setString(9, message.getStatus());
stmt.setObject(10, message.getReply_to_id());
stmt.setBoolean(11, message.isIs_edited());
stmt.setObject(12, message.getOriginal_message_id());
stmt.setObject(13, message.getForwarded_by());
stmt.setObject(14, message.getForwarded_from());
ps.setObject(1, messageId);
ps.setObject(2, senderId);
ps.setString(3, receiverType);
ps.setObject(4, receiverId);
ps.setString(5, content);
ps.setString(6, messageType);
stmt.executeUpdate();
return ps.executeUpdate() > 0;
} catch (SQLException e) {
System.err.println("❌ Error saving message: " + e.getMessage());
e.printStackTrace();
return false;
}
}
public static boolean insertAttachments(UUID messageId, List<FileAttachment> attachments) {
String sql = "INSERT INTO message_attachments (attachment_id, message_id, file_url, file_type) " +
"VALUES (?, ?, ?, ?)";
try (Connection conn = ConnectionDb.connect();
PreparedStatement ps = conn.prepareStatement(sql)) {
for (FileAttachment att : attachments) {
ps.setObject(1, UUID.randomUUID());
ps.setObject(2, messageId);
ps.setString(3, att.getFileUrl());
ps.setString(4, att.getFileType());
ps.addBatch();
}
ps.executeBatch();
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
@@ -100,7 +118,6 @@ public class MessageDatabase {
UUID.fromString(rs.getString("receiver_id")),
rs.getString("content"),
rs.getString("message_type"),
rs.getString("file_url"),
rs.getTimestamp("send_at").toLocalDateTime(),
rs.getString("status"),
rs.getObject("reply_to_id") != null ? UUID.fromString(rs.getString("reply_to_id")) : null,
@@ -118,6 +135,31 @@ public class MessageDatabase {
return messages;
}
public static List<FileAttachment> getAttachments(UUID messageId) {
List<FileAttachment> attachments = new ArrayList<>();
String sql = "SELECT file_url, file_type FROM message_attachments WHERE message_id = ?";
try (Connection conn = ConnectionDb.connect();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setObject(1, messageId);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
attachments.add(new FileAttachment(
rs.getString("file_url"),
rs.getString("file_type")
));
}
} catch (SQLException e) {
e.printStackTrace();
}
return attachments;
}
public static LocalDateTime getLastMessageTimeBetween(UUID user1, UUID user2, String type) {
String sql = """
@@ -177,7 +219,6 @@ public class MessageDatabase {
UUID.fromString(rs.getString("receiver_id")),
rs.getString("content"),
rs.getString("message_type"),
rs.getString("file_url"),
rs.getTimestamp("send_at").toLocalDateTime(),
rs.getString("status"),
(UUID) rs.getObject("reply_to_id"),