mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 07:31:07 -05:00
- Introduced Next.js integration guide for ThrillWiki API, detailing authentication, core domain APIs, data structures, and implementation patterns. - Documented the migration to Rich Choice Objects, highlighting changes for frontend developers and enhanced metadata availability. - Fixed the missing `get_by_slug` method in the Ride model, ensuring proper functionality of ride detail endpoints. - Created a test script to verify manufacturer syncing with ride models, ensuring data integrity across related models.
188 lines
5.2 KiB
Markdown
188 lines
5.2 KiB
Markdown
# Park Detail Endpoints Documentation
|
|
|
|
## Overview
|
|
|
|
The ThrillWiki API provides multiple endpoints for accessing park information with different levels of detail and functionality.
|
|
|
|
## Available Endpoints
|
|
|
|
### 1. Basic Park Detail
|
|
**Endpoint:** `GET /api/v1/parks/{park-slug}/`
|
|
**Purpose:** Fast loading of core park information
|
|
|
|
**Response includes:**
|
|
- Basic park details (name, slug, status, description)
|
|
- Location information with coordinates
|
|
- Operator and property owner details
|
|
- Park statistics (ride count, coaster count, average rating)
|
|
- Park areas/themed sections
|
|
- Photo information (primary, banner, card images)
|
|
- **Does NOT include individual ride details**
|
|
|
|
### 2. Park Rides List (Paginated)
|
|
**Endpoint:** `GET /api/v1/parks/{park-slug}/rides/`
|
|
**Purpose:** Paginated list of all rides at a specific park
|
|
|
|
**Query Parameters:**
|
|
- `page` - Page number for pagination
|
|
- `page_size` - Number of results per page (max 100, default 20)
|
|
- `category` - Filter by ride category (RC, FR, WR, etc.)
|
|
- `status` - Filter by operational status
|
|
- `search` - Search rides by name or description
|
|
- `ordering` - Order results by field
|
|
|
|
**Response includes:**
|
|
- Paginated list of rides with full details
|
|
- Each ride includes: name, slug, category, status, manufacturer, ratings, capacity, dates
|
|
- Pagination metadata (count, next, previous)
|
|
|
|
### 3. Individual Park Ride Detail
|
|
**Endpoint:** `GET /api/v1/parks/{park-slug}/rides/{ride-slug}/`
|
|
**Purpose:** Comprehensive details for a specific ride within park context
|
|
|
|
**Response includes:**
|
|
- Complete ride information
|
|
- Park context information
|
|
- Manufacturer and designer details
|
|
- Technical specifications
|
|
- Photos and media
|
|
|
|
### 4. Comprehensive Park Detail (RESTORED)
|
|
**Endpoint:** `GET /api/v1/parks/{park-slug}/detail/`
|
|
**Purpose:** Complete park information with rides summary
|
|
|
|
**Response includes:**
|
|
- All basic park detail information
|
|
- **Plus:** `rides_summary` object containing:
|
|
- `total_count` - Total number of rides at the park
|
|
- `sample` - First 10 rides with full details
|
|
- `full_list_url` - Link to paginated rides endpoint
|
|
|
|
## Usage Examples
|
|
|
|
### Basic Park Info (Fast Loading)
|
|
```bash
|
|
curl "http://localhost:8000/api/v1/parks/cedar-point/"
|
|
```
|
|
|
|
### All Rides at Park (Paginated)
|
|
```bash
|
|
# First page
|
|
curl "http://localhost:8000/api/v1/parks/cedar-point/rides/"
|
|
|
|
# With filtering
|
|
curl "http://localhost:8000/api/v1/parks/cedar-point/rides/?category=RC&status=OPERATING"
|
|
|
|
# With pagination
|
|
curl "http://localhost:8000/api/v1/parks/cedar-point/rides/?page=2&page_size=10"
|
|
```
|
|
|
|
### Comprehensive Park Detail (With Rides Summary)
|
|
```bash
|
|
curl "http://localhost:8000/api/v1/parks/cedar-point/detail/"
|
|
```
|
|
|
|
### Specific Ride at Park
|
|
```bash
|
|
curl "http://localhost:8000/api/v1/parks/cedar-point/rides/millennium-force/"
|
|
```
|
|
|
|
## Frontend Implementation Strategy
|
|
|
|
### Recommended Approach
|
|
1. **Initial Page Load:** Use `/parks/{slug}/` for fast park header/info
|
|
2. **Progressive Enhancement:** Load rides via `/parks/{slug}/rides/` with pagination
|
|
3. **Alternative:** Use `/parks/{slug}/detail/` for single-request comprehensive data
|
|
|
|
### Performance Considerations
|
|
- Basic park detail: ~2KB response, very fast
|
|
- Rides list: ~20KB per page (20 rides), paginated
|
|
- Comprehensive detail: ~25KB response, includes rides sample
|
|
|
|
### Caching Strategy
|
|
- Basic park data: Long cache (park info changes rarely)
|
|
- Rides data: Medium cache (ride status may change)
|
|
- Comprehensive detail: Medium cache (combines both)
|
|
|
|
## Response Structure Examples
|
|
|
|
### Basic Park Detail Response
|
|
```json
|
|
{
|
|
"id": 249,
|
|
"name": "Cedar Point",
|
|
"slug": "cedar-point",
|
|
"status": "OPERATING",
|
|
"description": "Roller coaster capital of the world",
|
|
"location": {
|
|
"city": "Sandusky",
|
|
"state": "OH",
|
|
"country": "USA",
|
|
"latitude": 41.4814,
|
|
"longitude": -82.6838
|
|
},
|
|
"operator": {
|
|
"id": 339,
|
|
"name": "Cedar Fair",
|
|
"slug": "cedar-fair"
|
|
},
|
|
"ride_count": 4,
|
|
"coaster_count": 0,
|
|
"average_rating": "8.16"
|
|
}
|
|
```
|
|
|
|
### Comprehensive Detail Response (Additional Fields)
|
|
```json
|
|
{
|
|
// ... all basic park fields ...
|
|
"rides_summary": {
|
|
"total_count": 4,
|
|
"sample": [
|
|
{
|
|
"id": 591,
|
|
"name": "Cyclone",
|
|
"slug": "cyclone",
|
|
"category": "FR",
|
|
"status": "OPERATING",
|
|
"average_rating": "8.91"
|
|
}
|
|
// ... up to 10 rides
|
|
],
|
|
"full_list_url": "/api/v1/parks/cedar-point/rides/"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Paginated Rides Response
|
|
```json
|
|
{
|
|
"count": 4,
|
|
"next": null,
|
|
"previous": null,
|
|
"results": [
|
|
{
|
|
"id": 591,
|
|
"name": "Cyclone",
|
|
"slug": "cyclone",
|
|
"category": "FR",
|
|
"status": "OPERATING",
|
|
"description": "Exciting FR ride with thrilling elements",
|
|
"park": {
|
|
"id": 249,
|
|
"name": "Cedar Point",
|
|
"slug": "cedar-point"
|
|
},
|
|
"average_rating": "8.91",
|
|
"capacity_per_hour": 1359,
|
|
"opening_date": "1999-10-10"
|
|
}
|
|
// ... more rides
|
|
]
|
|
}
|
|
```
|
|
|
|
## Historical Context
|
|
|
|
The `/detail/` endpoint was temporarily removed during API refactoring but has been restored based on user feedback. It provides a middle-ground solution between the basic park endpoint and separate rides pagination, offering comprehensive park data with a rides preview in a single request.
|