keywrod slibrary page dsigning
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user