keywrod slibrary page dsigning

This commit is contained in:
IGNY8 VPS (Salman)
2026-01-18 19:56:49 +00:00
parent aa03e15eea
commit 4cf27fa875
9 changed files with 1151 additions and 323 deletions

View File

@@ -867,6 +867,8 @@ class SeedKeywordViewSet(viewsets.ReadOnlyModelViewSet):
sector_name = self.request.query_params.get('sector_name')
difficulty_min = self.request.query_params.get('difficulty_min')
difficulty_max = self.request.query_params.get('difficulty_max')
volume_min = self.request.query_params.get('volume_min')
volume_max = self.request.query_params.get('volume_max')
if industry_id:
queryset = queryset.filter(industry_id=industry_id)
@@ -888,6 +890,18 @@ class SeedKeywordViewSet(viewsets.ReadOnlyModelViewSet):
queryset = queryset.filter(difficulty__lte=int(difficulty_max))
except (ValueError, TypeError):
pass
# Volume range filtering
if volume_min is not None:
try:
queryset = queryset.filter(volume__gte=int(volume_min))
except (ValueError, TypeError):
pass
if volume_max is not None:
try:
queryset = queryset.filter(volume__lte=int(volume_max))
except (ValueError, TypeError):
pass
return queryset
@@ -1106,9 +1120,9 @@ class SeedKeywordViewSet(viewsets.ReadOnlyModelViewSet):
# Get already-added keyword IDs if site_id provided
already_added_ids = set()
if site_id:
from igny8_core.business.models import SiteKeyword
from igny8_core.business.planning.models import Keywords
already_added_ids = set(
SiteKeyword.objects.filter(
Keywords.objects.filter(
site_id=site_id,
seed_keyword__isnull=False
).values_list('seed_keyword_id', flat=True)
@@ -1230,7 +1244,7 @@ class SeedKeywordViewSet(viewsets.ReadOnlyModelViewSet):
Get cascading filter options for Keywords Library.
Returns industries, sectors (filtered by industry), and available filter values.
"""
from django.db.models import Count, Min, Max
from django.db.models import Count, Min, Max, Q
try:
industry_id = request.query_params.get('industry_id')
@@ -1310,7 +1324,7 @@ class SeedKeywordViewSet(viewsets.ReadOnlyModelViewSet):
Accepts a list of seed_keyword IDs and adds them to the specified site.
"""
from django.db import transaction
from igny8_core.business.models import SiteKeyword
from igny8_core.business.planning.models import Keywords
try:
site_id = request.data.get('site_id')
@@ -1331,7 +1345,7 @@ class SeedKeywordViewSet(viewsets.ReadOnlyModelViewSet):
)
# Verify site access
from igny8_core.business.models import Site
from igny8_core.auth.models import Site
site = Site.objects.filter(id=site_id).first()
if not site:
return error_response(
@@ -1365,12 +1379,19 @@ class SeedKeywordViewSet(viewsets.ReadOnlyModelViewSet):
# Get already existing
existing_seed_ids = set(
SiteKeyword.objects.filter(
Keywords.objects.filter(
site_id=site_id,
seed_keyword_id__in=keyword_ids
).values_list('seed_keyword_id', flat=True)
)
# Get site sectors mapped by industry_sector_id for fast lookup
from igny8_core.auth.models import Sector
site_sectors = {
s.industry_sector_id: s
for s in Sector.objects.filter(site=site, is_deleted=False, is_active=True)
}
added_count = 0
skipped_count = 0
@@ -1380,14 +1401,17 @@ class SeedKeywordViewSet(viewsets.ReadOnlyModelViewSet):
skipped_count += 1
continue
SiteKeyword.objects.create(
# Find the site's sector that matches this keyword's industry_sector
site_sector = site_sectors.get(seed_kw.sector_id)
if not site_sector:
# Skip if site doesn't have this sector
skipped_count += 1
continue
Keywords.objects.create(
site=site,
keyword=seed_kw.keyword,
sector=site_sector,
seed_keyword=seed_kw,
volume=seed_kw.volume,
difficulty=seed_kw.difficulty,
source='library',
is_active=True
)
added_count += 1