Move exists check to the add command instead of the database insert routine so it can run earlier

This commit is contained in:
2024-12-11 02:30:29 -05:00
parent 4aee41c9a8
commit d90fcfa32a
3 changed files with 15 additions and 13 deletions

View File

@ -126,21 +126,10 @@ zblock_feed_info_err zblock_feed_info_exists(PGconn *conn, const char *url, u64s
return ZBLOCK_FEED_INFO_OK;
}
// Insert new feed into the database
// Insert new feed into the database. This function assumes that you have already verified that it has not been added previously.
zblock_feed_info_err zblock_feed_info_insert(PGconn *conn, zblock_feed_info *feed) {
if (!conn || !feed) return ZBLOCK_FEED_INFO_INVALID_ARGS;
// check if the feed already exists
{
int feed_exists;
zblock_feed_info_err exists_error = zblock_feed_info_exists(conn, feed->url, feed->channel_id, &feed_exists);
if (exists_error) {
return exists_error;
} else if (feed_exists) {
return ZBLOCK_FEED_INFO_EXISTS;
}
}
uint64_t channel_id_be = htobe64(feed->channel_id);
uint64_t guild_id_be = htobe64(feed->guild_id);
const char *const insert_params[] = {feed->url, feed->last_pubDate, (char *) &channel_id_be, feed->title, (char *) &guild_id_be};

View File

@ -54,7 +54,7 @@ zblock_feed_info_err zblock_feed_info_retrieve_list_item(PGconn *conn, zblock_fe
// check if the feed currently exists. the result is in the exists pointer.
zblock_feed_info_err zblock_feed_info_exists(PGconn *conn, const char *url, u64snowflake channel_id, int *exists);
// Insert new feed into the database
// Insert new feed into the database. This function assumes that you have already verified that it has not been added previously.
zblock_feed_info_err zblock_feed_info_insert(PGconn *conn, zblock_feed_info *feed);
// deletes feed from the database

13
main.c
View File

@ -226,6 +226,19 @@ static void bot_command_add(struct discord *client, const struct discord_interac
feed.channel_id = event->channel_id;
feed.guild_id = event->guild_id;
// check if the feed already exists
{
int feed_exists;
zblock_feed_info_err exists_error = zblock_feed_info_exists(database_conn, feed.url, feed.channel_id, &feed_exists);
if (exists_error) {
snprintf(msg, sizeof(msg), "Error adding feed: %s", zblock_feed_info_strerror(exists_error));
goto send_msg;
} else if (feed_exists) {
snprintf(msg, sizeof(msg), "Error adding feed: It has already been added to this channel");
goto send_msg;
}
}
mrss_t *mrss_feed;
mrss_error_t mrss_error = mrss_parse_url(feed.url, &mrss_feed);
if (mrss_error) {