mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-21 08:51:12 -05:00
Refactor code structure and remove redundant changes
This commit is contained in:
155
django-backend/api/v1/endpoints/seo.py
Normal file
155
django-backend/api/v1/endpoints/seo.py
Normal file
@@ -0,0 +1,155 @@
|
||||
"""
|
||||
SEO Meta Tag API Endpoints
|
||||
|
||||
Provides meta tag data for frontend pages to enable dynamic SEO,
|
||||
OpenGraph social sharing, and structured data.
|
||||
"""
|
||||
|
||||
from ninja import Router
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.http import JsonResponse
|
||||
|
||||
from apps.entities.models import Park, Ride, Company, RideModel
|
||||
from apps.core.utils.seo import SEOTags
|
||||
|
||||
router = Router(tags=['SEO'])
|
||||
|
||||
|
||||
@router.get('/meta/home')
|
||||
def get_home_meta(request):
|
||||
"""
|
||||
Get SEO meta tags for the home page.
|
||||
|
||||
Returns:
|
||||
Dictionary of meta tags including OpenGraph, Twitter Cards, and structured data
|
||||
"""
|
||||
return SEOTags.for_home()
|
||||
|
||||
|
||||
@router.get('/meta/park/{park_slug}')
|
||||
def get_park_meta(request, park_slug: str):
|
||||
"""
|
||||
Get SEO meta tags for a park page.
|
||||
|
||||
Args:
|
||||
park_slug: URL slug of the park
|
||||
|
||||
Returns:
|
||||
Dictionary of meta tags including OpenGraph, Twitter Cards, and canonical URL
|
||||
"""
|
||||
park = get_object_or_404(
|
||||
Park.objects.select_related('locality', 'country'),
|
||||
slug=park_slug,
|
||||
is_active=True
|
||||
)
|
||||
return SEOTags.for_park(park)
|
||||
|
||||
|
||||
@router.get('/meta/ride/{park_slug}/{ride_slug}')
|
||||
def get_ride_meta(request, park_slug: str, ride_slug: str):
|
||||
"""
|
||||
Get SEO meta tags for a ride page.
|
||||
|
||||
Args:
|
||||
park_slug: URL slug of the park
|
||||
ride_slug: URL slug of the ride
|
||||
|
||||
Returns:
|
||||
Dictionary of meta tags including OpenGraph, Twitter Cards, and canonical URL
|
||||
"""
|
||||
ride = get_object_or_404(
|
||||
Ride.objects.select_related(
|
||||
'park',
|
||||
'ride_type',
|
||||
'manufacturer'
|
||||
),
|
||||
slug=ride_slug,
|
||||
park__slug=park_slug,
|
||||
is_active=True
|
||||
)
|
||||
return SEOTags.for_ride(ride)
|
||||
|
||||
|
||||
@router.get('/meta/company/{company_slug}')
|
||||
def get_company_meta(request, company_slug: str):
|
||||
"""
|
||||
Get SEO meta tags for a company/manufacturer page.
|
||||
|
||||
Args:
|
||||
company_slug: URL slug of the company
|
||||
|
||||
Returns:
|
||||
Dictionary of meta tags including OpenGraph, Twitter Cards, and canonical URL
|
||||
"""
|
||||
company = get_object_or_404(
|
||||
Company.objects.prefetch_related('company_types'),
|
||||
slug=company_slug,
|
||||
is_active=True
|
||||
)
|
||||
return SEOTags.for_company(company)
|
||||
|
||||
|
||||
@router.get('/meta/ride-model/{model_slug}')
|
||||
def get_ride_model_meta(request, model_slug: str):
|
||||
"""
|
||||
Get SEO meta tags for a ride model page.
|
||||
|
||||
Args:
|
||||
model_slug: URL slug of the ride model
|
||||
|
||||
Returns:
|
||||
Dictionary of meta tags including OpenGraph, Twitter Cards, and canonical URL
|
||||
"""
|
||||
model = get_object_or_404(
|
||||
RideModel.objects.select_related(
|
||||
'manufacturer',
|
||||
'ride_type'
|
||||
),
|
||||
slug=model_slug,
|
||||
is_active=True
|
||||
)
|
||||
return SEOTags.for_ride_model(model)
|
||||
|
||||
|
||||
@router.get('/structured-data/park/{park_slug}')
|
||||
def get_park_structured_data(request, park_slug: str):
|
||||
"""
|
||||
Get JSON-LD structured data for a park page.
|
||||
|
||||
Args:
|
||||
park_slug: URL slug of the park
|
||||
|
||||
Returns:
|
||||
JSON-LD structured data for search engines
|
||||
"""
|
||||
park = get_object_or_404(
|
||||
Park.objects.select_related('locality', 'country'),
|
||||
slug=park_slug,
|
||||
is_active=True
|
||||
)
|
||||
return SEOTags.structured_data_for_park(park)
|
||||
|
||||
|
||||
@router.get('/structured-data/ride/{park_slug}/{ride_slug}')
|
||||
def get_ride_structured_data(request, park_slug: str, ride_slug: str):
|
||||
"""
|
||||
Get JSON-LD structured data for a ride page.
|
||||
|
||||
Args:
|
||||
park_slug: URL slug of the park
|
||||
ride_slug: URL slug of the ride
|
||||
|
||||
Returns:
|
||||
JSON-LD structured data for search engines
|
||||
"""
|
||||
ride = get_object_or_404(
|
||||
Ride.objects.select_related(
|
||||
'park',
|
||||
'ride_type',
|
||||
'manufacturer'
|
||||
),
|
||||
slug=ride_slug,
|
||||
park__slug=park_slug,
|
||||
is_active=True
|
||||
)
|
||||
return SEOTags.structured_data_for_ride(ride)
|
||||
Reference in New Issue
Block a user