Work on delete chat

This commit is contained in:
2025-08-01 20:59:59 +03:30
parent c6616863a1
commit 3cdbb7e24b
5 changed files with 242 additions and 12 deletions
@@ -2,10 +2,7 @@ package org.to.telegramfinalproject.Database;
import org.to.telegramfinalproject.Models.PrivateChat;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.*;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
@@ -133,4 +130,129 @@ public class PrivateChatDatabase {
return null;
}
private static PrivateChat extractPrivateChat(ResultSet rs) throws SQLException {
UUID chatId = UUID.fromString(rs.getString("chat_id"));
UUID user1 = rs.getObject("user1_id", UUID.class);
UUID user2 = rs.getObject("user2_id", UUID.class);
boolean user1Deleted = rs.getBoolean("user1_deleted");
boolean user2Deleted = rs.getBoolean("user2_deleted");
LocalDateTime createdAt = rs.getTimestamp("created_at").toLocalDateTime();
return new PrivateChat(chatId, user1, user2, user1Deleted, user2Deleted, createdAt);
}
public static void markChatDeleted(UUID userId, UUID chatId) {
String sql = """
UPDATE private_chat
SET user1_deleted = CASE WHEN user1_id = ? THEN true ELSE user1_deleted END,
user2_deleted = CASE WHEN user2_id = ? THEN true ELSE user2_deleted END
WHERE chat_id = ?
""";
try (Connection conn = ConnectionDb.connect();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setObject(1, userId);
stmt.setObject(2, userId);
stmt.setObject(3, chatId);
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void unmarkChatDeleted(UUID userId, UUID chatId) {
String sql = """
UPDATE private_chat
SET user1_deleted = CASE WHEN user1_id = ? THEN false ELSE user1_deleted END,
user2_deleted = CASE WHEN user2_id = ? THEN false ELSE user2_deleted END
WHERE chat_id = ?
""";
try (Connection conn = ConnectionDb.connect();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setObject(1, userId);
stmt.setObject(2, userId);
stmt.setObject(3, chatId);
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void markUser1Deleted(UUID chatId) {
updateBoolField(chatId, "user1_deleted", true);
}
public static void markUser2Deleted(UUID chatId) {
updateBoolField(chatId, "user2_deleted", true);
}
public static void markBothDeleted(UUID chatId) {
String sql = "UPDATE private_chat SET user1_deleted = true, user2_deleted = true WHERE chat_id = ?";
try (Connection conn = ConnectionDb.connect(); PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setObject(1, chatId);
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
private static void updateBoolField(UUID chatId, String field, boolean value) {
String sql = "UPDATE private_chat SET " + field + " = ? WHERE chat_id = ?";
try (Connection conn = ConnectionDb.connect(); PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setBoolean(1, value);
ps.setObject(2, chatId);
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static PrivateChat findById(UUID chatId) {
String sql = "SELECT * FROM private_chat WHERE chat_id = ?";
try (Connection conn = ConnectionDb.connect(); PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setObject(1, chatId);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
UUID user1_id = (UUID) rs.getObject("user1_id");
UUID user2_id = (UUID) rs.getObject("user2_id");
boolean user1_deleted = rs.getBoolean("user1_deleted");
boolean user2_deleted = rs.getBoolean("user2_deleted");
LocalDateTime created_at = rs.getTimestamp("created_at").toLocalDateTime();
return new PrivateChat(chatId, user1_id, user2_id, user1_deleted, user2_deleted, created_at);
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static void clearDeletedFlag(UUID senderId, UUID receiverId) {
String sql = """
UPDATE private_chat
SET user1_deleted = CASE WHEN user1_id = ? THEN false ELSE user1_deleted END,
user2_deleted = CASE WHEN user2_id = ? THEN false ELSE user2_deleted END
WHERE (user1_id = ? AND user2_id = ?) OR (user1_id = ? AND user2_id = ?)
""";
try (Connection conn = ConnectionDb.connect(); PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setObject(1, senderId);
ps.setObject(2, senderId);
ps.setObject(3, senderId);
ps.setObject(4, receiverId);
ps.setObject(5, receiverId);
ps.setObject(6, senderId);
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
}