backend implementation of filters

This commit is contained in:
Corban-Lee Jones 2024-05-01 17:29:27 +01:00
parent 75536bdbea
commit df4f68fae5
7 changed files with 55 additions and 11 deletions

View File

@ -135,7 +135,7 @@ class SubscriptionSerializer(DynamicModelSerializer):
class Meta:
model = Subscription
fields = ("id", "name", "url", "guild_id", "channels_count", "creation_datetime", "extra_notes", "active")
fields = ("id", "name", "url", "guild_id", "channels_count", "creation_datetime", "extra_notes", "filters", "active")
class SavedGuildSerializer(DynamicModelSerializer):

View File

@ -173,7 +173,7 @@ class Subscription_ListView(generics.ListCreateAPIView):
# queryset = Subscription.objects.all().order_by("-creation_datetime")
filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter]
filterset_fields = ["id", "name", "url", "guild_id", "creation_datetime", "extra_notes", "active"]
filterset_fields = ["id", "name", "url", "guild_id", "creation_datetime", "extra_notes", "filters", "active"]
search_fields = ["name", "extra_notes"]
ordering_fields = ["creation_datetime", "guild_id"]

View File

@ -0,0 +1,18 @@
# Generated by Django 5.0.1 on 2024-05-01 13:20
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('home', '0018_remove_filter_keywords_is_not_null'),
]
operations = [
migrations.AddField(
model_name='subscription',
name='filters',
field=models.ManyToManyField(to='home.filter'),
),
]

View File

@ -216,6 +216,8 @@ class Subscription(models.Model):
blank=True,
)
filters = models.ManyToManyField(to="home.Filter")
active = models.BooleanField(
default=True,
)

View File

@ -7,7 +7,7 @@ async function ajaxRequest(url, method, data) {
xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
}
}
if (data) {
options.data = data;
options.processData = false;

View File

@ -119,8 +119,6 @@ $("#filterForm").on("submit", async function(event) {
regex = advancedFiltering ? $("#filterRegex").val() : "";
guildId = getCurrentlyActiveServer().guild_id;
if (advancedFiltering) {
keywords = "";
}
@ -133,6 +131,7 @@ $("#filterForm").on("submit", async function(event) {
if (filterPrimaryKey) {
showToast("success", "Filter Saved", "Filter ID " + filterPrimaryKey);
await loadFilters(guildId);
await loadFilterOptions(guildId);
}
$("#filterFormModal").modal("hide");
@ -187,3 +186,19 @@ $(document).on("selectedServerChange", async function() {
const activeServer = getCurrentlyActiveServer();
await loadFilters(activeServer.guild_id);
});
$("#deleteSelectedFiltersBtn").on("click", async function() {
var rows = filtersTable.rows(".selected").data();
$.each(rows, async function() {
// alert(JSON.stringify(this, null, 4));
await deleteFilter(this.id);
showToast("danger", "Deleted Filter", "Filter ID: " + this.id)
})
setTimeout(async () => {
const guildId = getCurrentlyActiveServer().guild_id;
await loadFilters(guildId);
loadFilterOptions(guildId);
}, 500)
})

View File

@ -104,6 +104,9 @@ async function showEditSubModal(subId) {
const channels = await getSubChannels(subscription.id);
$("#subChannels").val("").change();
$("#subChannels").val(channels.results.map(channel => channel.channel_id)).change();
$("#subFilters").val("").change();
$("#subFilters").val(subscription.filters).change();
}
$("#subId").val(subId);
@ -118,9 +121,14 @@ $("#subForm").on("submit", async function(event) {
url = $("#subUrl").val();
guildId = getCurrentlyActiveServer().guild_id;
extraNotes = $("#subExtraNotes").val();
subChannels = $("#subChannels option:selected").toArray().map(item => item.value)
subChannels = $("#subChannels option:selected").toArray().map(channel => channel.value);
subFilters = $("#subFilters option:selected").toArray().map(filter => parseInt(filter.value));
active = true;
// alert(JSON.stringify(subFilters, null, 4));
var subPrimaryKey = await saveSubscription(id, name, url, guildId, extraNotes, subFilters, active);
var subPrimaryKey = await saveSubscription(id, name, url, guildId, extraNotes);
await deleteSubChannels(subPrimaryKey);
subChannels.forEach(async channelId => {
await saveSubChannel(channelId, subPrimaryKey);
@ -133,13 +141,14 @@ $("#subForm").on("submit", async function(event) {
$("#subFormModal").modal("hide");
});
async function saveSubscription(id, name, url, guildId, extraNotes) {
async function saveSubscription(id, name, url, guildId, extraNotes, filters, active) {
var formData = new FormData();
formData.append("name", name);
formData.append("url", url);
formData.append("guild_id", guildId);
formData.append("extra_notes", extraNotes);
formData.append("active", true);
filters.forEach(filter => formData.append("filters", filter));
formData.append("active", active);
var response;
@ -213,9 +222,9 @@ $("#deleteSelectedSubscriptionsBtn").on("click", async function() {
// alert(JSON.stringify(this, null, 4));
await deleteSubscription(this.id);
showToast("danger", "Deleted Subscription", "Subscription ID: " + this.id)
})
});
loadSubscriptions(getCurrentlyActiveServer().guild_id);
await loadSubscriptions(getCurrentlyActiveServer().guild_id);
})
async function loadChannelOptions(guildId) {