aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/com/pinapelz/Database.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/pinapelz/Database.java')
-rw-r--r--src/main/java/com/pinapelz/Database.java140
1 files changed, 140 insertions, 0 deletions
diff --git a/src/main/java/com/pinapelz/Database.java b/src/main/java/com/pinapelz/Database.java
index e43212d..0e8e984 100644
--- a/src/main/java/com/pinapelz/Database.java
+++ b/src/main/java/com/pinapelz/Database.java
@@ -7,6 +7,7 @@ import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.sql.*;
+import java.sql.Types;
import java.util.Properties;
public class Database {
@@ -214,6 +215,43 @@ public class Database {
}
}
+ public ResultSet getUniqueOriginalFilesFromPartials(int directoryId, String search) {
+ StringBuilder sql = new StringBuilder("""
+ SELECT DISTINCT
+ original_filename,
+ mime_type,
+ directory_id,
+ MAX(created_at) as created_at,
+ SUM(part_size) as size,
+ MAX(file_description) as file_description
+ FROM file_partials
+ WHERE directory_id = ?
+ """);
+
+ if (search != null && !search.trim().isEmpty()) {
+ sql.append(" AND LOWER(original_filename) LIKE ?");
+ }
+
+ sql.append("""
+ GROUP BY original_filename, mime_type, directory_id
+ ORDER BY original_filename ASC
+ """);
+
+ try {
+ PreparedStatement ps = conn.prepareStatement(sql.toString());
+ int paramIndex = 1;
+ ps.setInt(paramIndex++, directoryId);
+
+ if (search != null && !search.trim().isEmpty()) {
+ ps.setString(paramIndex++, "%" + search.toLowerCase() + "%");
+ }
+
+ return ps.executeQuery();
+ } catch (SQLException e) {
+ throw new RuntimeException("Failed to fetch unique original files from partials", e);
+ }
+ }
+
public boolean deleteDirectory(int directoryId) throws SQLException {
String checkSql = """
SELECT COUNT(*) as file_count
@@ -246,4 +284,106 @@ public class Database {
}
}
+ public long recordFilePartial(String channelId, String messageId, int directoryId,
+ String partName, int partNumber, long partSize,
+ String originalFilename, String description, String mimeType) throws SQLException {
+ String sql = """
+ INSERT INTO file_partials (
+ disc_channel_id,
+ disc_message_id,
+ directory_id,
+ part_name,
+ part_number,
+ part_size,
+ original_filename,
+ file_description,
+ mime_type,
+ uploaded_via_webhook
+ )
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+ RETURNING partial_id
+ """;
+
+ try (PreparedStatement ps = conn.prepareStatement(sql)) {
+ ps.setString(1, channelId);
+ ps.setString(2, messageId);
+ ps.setInt(3, directoryId);
+ ps.setString(4, partName);
+ ps.setInt(5, partNumber);
+ ps.setLong(6, partSize);
+ ps.setString(7, originalFilename);
+ ps.setString(8, description);
+ ps.setString(9, mimeType);
+ ps.setBoolean(10, true);
+
+ try (ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ return rs.getLong("partial_id");
+ }
+ throw new SQLException("Failed to get partial ID");
+ }
+ }
+ }
+
+ public boolean checkPartialExists(String partName, int directoryId) throws SQLException {
+ String sql = """
+ SELECT COUNT(*) as count
+ FROM file_partials
+ WHERE part_name = ? AND directory_id = ?
+ """;
+
+ try (PreparedStatement ps = conn.prepareStatement(sql)) {
+ ps.setString(1, partName);
+ ps.setInt(2, directoryId);
+ try (ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ return rs.getInt("count") > 0;
+ }
+ return false;
+ }
+ }
+ }
+
+ public boolean deleteFilePartials(String originalFilename, int directoryId) throws SQLException {
+ String sql = """
+ DELETE FROM file_partials
+ WHERE original_filename = ? AND directory_id = ?
+ """;
+
+ try (PreparedStatement ps = conn.prepareStatement(sql)) {
+ ps.setString(1, originalFilename);
+ ps.setInt(2, directoryId);
+ int rowsAffected = ps.executeUpdate();
+ return rowsAffected > 0;
+ }
+ }
+
+ public ResultSet getFilePartialsByOriginalFilename(String originalFilename, int directoryId) {
+ String sql = """
+ SELECT
+ partial_id,
+ disc_channel_id,
+ disc_message_id,
+ part_name,
+ part_number,
+ part_size,
+ original_filename,
+ mime_type,
+ uploaded_via_webhook,
+ created_at
+ FROM file_partials
+ WHERE original_filename = ? AND directory_id = ?
+ ORDER BY part_number ASC
+ """;
+
+ try {
+ PreparedStatement ps = conn.prepareStatement(sql);
+ ps.setString(1, originalFilename);
+ ps.setInt(2, directoryId);
+ return ps.executeQuery();
+ } catch (SQLException e) {
+ throw new RuntimeException("Failed to fetch file partials", e);
+ }
+ }
+
}
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage