from django.conf import settings from django.contrib.sitemaps import Sitemap from django.utils.translation import gettext_lazy as _ from core.models import Brand, Category, Product from core.utils.seo_builders import any_non_digital from evibes.settings import LANGUAGE_CODE class StaticPagesSitemap(Sitemap): # type: ignore [type-arg] protocol = "https" changefreq = "monthly" priority = 0.8 limit = 1000 PAGES = [ { "name": _("Home"), "path": f"/{LANGUAGE_CODE}", "lastmod": settings.RELEASE_DATE, }, { "name": _("Contact Us"), "path": f"/{LANGUAGE_CODE}/contact-us", "lastmod": settings.RELEASE_DATE, }, { "name": _("About Us"), "path": f"/{LANGUAGE_CODE}/about-us", "lastmod": settings.RELEASE_DATE, }, { "name": _("Payment Information"), "path": f"/{LANGUAGE_CODE}/help/payments", "lastmod": settings.RELEASE_DATE, }, ] if any_non_digital(): PAGES.append( { "name": _("Delivery"), "path": f"/{LANGUAGE_CODE}/help/delivery", "lastmod": settings.RELEASE_DATE, } ) def items(self): return self.PAGES def location(self, obj): return obj["path"] def lastmod(self, obj): return obj.get("lastmod") # class FeaturedProductsSitemap(Sitemap): # type: ignore [type-arg] # protocol = "https" # changefreq = "daily" # priority = 0.9 # limit = 25000 # # def items(self): # return ( # Product.objects.filter( # is_active=True, # brand__is_active=True, # category__is_active=True, # stocks__isnull=False, # stocks__vendor__is_active=True, # ) # .only("uuid", "name", "modified", "slug") # .order_by("-modified") # ) # # def lastmod(self, obj): # return obj.modified # # def location(self, obj): # return f"/{LANGUAGE_CODE}/product/{obj.slug}" class ProductSitemap(Sitemap): # type: ignore [type-arg] protocol = "https" changefreq = "daily" priority = 0.9 limit = 25000 def items(self): return ( Product.objects.filter( is_active=True, brand__is_active=True, category__is_active=True, stocks__isnull=False, stocks__vendor__is_active=True, ) .only("uuid", "name", "modified", "slug") .order_by("-modified") ) def lastmod(self, obj): return obj.modified def location(self, obj): return f"/{LANGUAGE_CODE}/product/{obj.slug}" class CategorySitemap(Sitemap): # type: ignore [type-arg] protocol = "https" changefreq = "weekly" priority = 0.7 limit = 10000 def items(self): return Category.objects.filter(is_active=True).only("uuid", "name", "modified").order_by("-modified") def lastmod(self, obj): return obj.modified def location(self, obj): return f"/{LANGUAGE_CODE}/catalog/{obj.slug}" class BrandSitemap(Sitemap): # type: ignore [type-arg] protocol = "https" changefreq = "weekly" priority = 0.6 limit = 10000 def items(self): return Brand.objects.filter(is_active=True).only("uuid", "name", "modified").order_by("-modified") def lastmod(self, obj): return obj.modified def location(self, obj): return f"/{LANGUAGE_CODE}/brand/{obj.slug}"