""" 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)