|
2 | 2 |
|
3 | 3 | import com.ajanuary.watson.alarms.ScheduledDM; |
4 | 4 | import com.ajanuary.watson.alarms.WithId; |
| 5 | +import com.ajanuary.watson.newsletter.NewsletterDbItem; |
5 | 6 | import com.ajanuary.watson.programme.DiscordItem; |
6 | 7 | import com.ajanuary.watson.programme.DiscordThread; |
7 | 8 | import com.ajanuary.watson.programme.Status; |
@@ -718,5 +719,96 @@ insert into comms_log(discord_message_id) values (?) |
718 | 719 | throw e; |
719 | 720 | } |
720 | 721 | } |
| 722 | + |
| 723 | + public Optional<NewsletterDbItem> getNewsletterItem(String id) throws SQLException { |
| 724 | + try (var connection = dataSource.getConnection(); |
| 725 | + var statement = |
| 726 | + connection.prepareStatement( |
| 727 | + """ |
| 728 | + select |
| 729 | + discord_message_id, |
| 730 | + content_checksum |
| 731 | + from |
| 732 | + newsletter_items |
| 733 | + where |
| 734 | + id = ? |
| 735 | + """)) { |
| 736 | + statement.setString(1, id); |
| 737 | + var rs = statement.executeQuery(); |
| 738 | + if (!rs.next()) { |
| 739 | + return Optional.empty(); |
| 740 | + } |
| 741 | + return Optional.of( |
| 742 | + new NewsletterDbItem(id, rs.getString(1), rs.getString(2))); |
| 743 | + } |
| 744 | + } |
| 745 | + |
| 746 | + public void insertNewsletterItem(String id, String discordMessageId, String contentChecksum) |
| 747 | + throws SQLException { |
| 748 | + try (var connection = dataSource.getConnection(); |
| 749 | + var statement = |
| 750 | + connection.prepareStatement( |
| 751 | + """ |
| 752 | + insert into newsletter_items (id, discord_message_id, content_checksum) |
| 753 | + values (?, ?, ?) |
| 754 | + """)) { |
| 755 | + statement.setString(1, id); |
| 756 | + statement.setString(2, discordMessageId); |
| 757 | + statement.setString(3, contentChecksum); |
| 758 | + var rowsAffected = statement.executeUpdate(); |
| 759 | + if (rowsAffected != 1) { |
| 760 | + throw new SQLException( |
| 761 | + "Error inserting newsletter item. Expected to insert 1 row but got " + rowsAffected); |
| 762 | + } |
| 763 | + } |
| 764 | + } |
| 765 | + |
| 766 | + public void updateNewsletterItem(String id, String contentChecksum) throws SQLException { |
| 767 | + try (var connection = dataSource.getConnection(); |
| 768 | + var statement = |
| 769 | + connection.prepareStatement( |
| 770 | + """ |
| 771 | + update newsletter_items |
| 772 | + set content_checksum = ? |
| 773 | + where id = ? |
| 774 | + """)) { |
| 775 | + statement.setString(1, contentChecksum); |
| 776 | + statement.setString(2, id); |
| 777 | + var rowsAffected = statement.executeUpdate(); |
| 778 | + if (rowsAffected != 1) { |
| 779 | + throw new SQLException( |
| 780 | + "Error updating newsletter item. Expected to update 1 row but got " + rowsAffected); |
| 781 | + } |
| 782 | + } |
| 783 | + } |
| 784 | + |
| 785 | + public void deleteNewsletterItem(String id) throws SQLException { |
| 786 | + try (var connection = dataSource.getConnection(); |
| 787 | + var statement = |
| 788 | + connection.prepareStatement( |
| 789 | + """ |
| 790 | + delete from newsletter_items |
| 791 | + where id = ? |
| 792 | + """)) { |
| 793 | + statement.setString(1, id); |
| 794 | + statement.executeUpdate(); |
| 795 | + } |
| 796 | + } |
| 797 | + |
| 798 | + public List<String> getAllNewsletterIds() throws SQLException { |
| 799 | + try (var connection = dataSource.getConnection(); |
| 800 | + var statement = |
| 801 | + connection.prepareStatement( |
| 802 | + """ |
| 803 | + select id from newsletter_items |
| 804 | + """)) { |
| 805 | + var rs = statement.executeQuery(); |
| 806 | + var results = new ArrayList<String>(); |
| 807 | + while (rs.next()) { |
| 808 | + results.add(rs.getString(1)); |
| 809 | + } |
| 810 | + return results; |
| 811 | + } |
| 812 | + } |
721 | 813 | } |
722 | 814 | } |
0 commit comments