88import org .springframework .jdbc .core .BatchPreparedStatementSetter ;
99import org .springframework .jdbc .core .JdbcTemplate ;
1010import org .springframework .stereotype .Repository ;
11+ import org .springframework .transaction .support .TransactionTemplate ;
1112
1213import java .sql .*;
1314import java .util .ArrayList ;
2324@ Repository
2425public class MessageCacheRepository {
2526 private final JdbcTemplate jdbcTemplate ;
27+ private final TransactionTemplate template ;
28+
29+ /**
30+ * Replaces the entire message cache with a {@link List} of {@link CachedMessage} objects.
31+ *
32+ * @param messages The new message cache.
33+ */
34+ public void replaceWithList (@ NotNull List <CachedMessage > messages ) {
35+ template .execute (_ -> {
36+ clear ();
37+ insertList (messages );
38+ return null ;
39+ });
40+ }
41+
42+ private void clear () throws DataAccessException {
43+ jdbcTemplate .update ("DELETE FROM message_cache_attachments WHERE 1 = 1" );
44+ jdbcTemplate .update ("DELETE FROM message_cache WHERE 1 = 1" );
45+ }
2646
2747 /**
2848 * Inserts a {@link List} of {@link CachedMessage} objects.
2949 *
3050 * @param messages The List to insert.
31- * @throws SQLException If an error occurs.
51+ * @throws DataAccessException If an error occurs.
3252 */
3353 public void insertList (@ NotNull List <CachedMessage > messages ) throws DataAccessException {
3454 jdbcTemplate .batchUpdate ("MERGE INTO message_cache (message_id, author_id, channel_id, message_content) VALUES (?, ?, ?, ?)" ,
@@ -78,11 +98,10 @@ public int getBatchSize() {
7898 * Gets all Messages from the Database.
7999 *
80100 * @return A {@link List} of {@link CachedMessage}s.
81- * @throws SQLException If anything goes wrong.
82101 */
83102 public List <CachedMessage > getAll () throws DataAccessException {
84103 List <CachedMessage > messagesWithLink = jdbcTemplate .query (
85- "SELECT * FROM message_cache LEFT JOIN message_cache_attachments ON message_cache.message_id = message_cache_attachments.message_id" ,
104+ "SELECT * FROM message_cache LEFT JOIN message_cache_attachments ON message_cache.message_id = message_cache_attachments.message_id ORDER BY message_cache.message_id ASC " ,
86105 (rs , _ ) -> this .read (rs ));
87106 Map <Long , CachedMessage > messages =new LinkedHashMap <>();
88107 for (CachedMessage msg : messagesWithLink ) {
@@ -95,22 +114,6 @@ public List<CachedMessage> getAll() throws DataAccessException {
95114 return new ArrayList <>(messages .values ());
96115 }
97116
98- /**
99- * Deletes the given amount of Messages.
100- *
101- * @param amount The amount to delete.
102- * @return If any rows we're affected.
103- * @throws SQLException If anything goes wrong.
104- */
105- public boolean delete (int amount ) throws DataAccessException {
106- int rows = jdbcTemplate .update ("DELETE FROM message_cache LIMIT ?" , amount );
107- if (rows > 0 ){
108- jdbcTemplate .update ("DELETE FROM message_cache_attachments WHERE message_id NOT IN (SELECT message_id FROM message_cache)" );
109- return true ;
110- }
111- return false ;
112- }
113-
114117 private CachedMessage read (ResultSet rs ) throws SQLException {
115118 List <String > attachments = new ArrayList <>();
116119 String attachment = rs .getString ("link" );
0 commit comments