mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 10:11:09 -05:00
- Created critical functionality audit report identifying 7 critical issues affecting production readiness. - Added design assessment report highlighting exceptional design quality and minor cosmetic fixes needed. - Documented non-authenticated features testing results confirming successful functionality and public access. - Implemented ride search form with autocomplete functionality and corresponding templates for search results. - Developed tests for ride autocomplete functionality, ensuring proper filtering and authentication checks.
3.0 KiB
3.0 KiB
# Ride Search Feature Specification
## Overview
Extend the existing park search infrastructure to support searching rides. This follows the established:
- Authentication-first
- BaseAutocomplete pattern
- HTMX + AlpineJS frontend
Rides are related to parks via a ForeignKey. Search results must reference both ride and parent park. ## Technical Specification ### Models & Filters - Model:
- Filter:
- Query:
- Fields:
- URL route
- Partial template
- search/mixins.py – add
- search/forms.py – add
- search/urls.py – register ride endpoints (
- rides/views.py – add
- search/templates/search/partials/_ride_search.html
- rides/templates/rides/partials/ride_results.html
## Integration Points - Combined search component toggles between park and ride modes.
- Ride result links to
- Shared styles and layout from
- Use
- Limit autocomplete to top 10 for responsiveness. ## Frontend Component Design - HTMX:
- AlpineJS: manage local state for selection, clearing on blur.
- Reuse CSS classes from park search for unified UX. ## Testing Strategy - Unit tests for
- Form tests for
- View tests (
- HTMX integration: AJAX responses include expected HTML using pytest-django + django-htmx.
- Performance: benchmark large resultset to ensure truncation and quick response.
- Authentication-first
- BaseAutocomplete pattern
- HTMX + AlpineJS frontend
Rides are related to parks via a ForeignKey. Search results must reference both ride and parent park. ## Technical Specification ### Models & Filters - Model:
Ride in rides/models.py with fields name, park (ForeignKey → Park), duration, thrill_rating, etc.- Filter:
RideFilter in search/filters.py (create if missing) supporting min_thrill, max_duration, and park__id.
### Autocomplete
- Class RideAutocomplete extends BaseAutocomplete.- Query:
Ride.objects.filter(name__icontains=query) limited to 10 results.
### Search Form
- Class RideSearchForm uses autocomplete widget bound to RideAutocomplete.- Fields:
query (CharField), park (HiddenField or Select), min_thrill, max_duration.
### Views & Templates
- View RideSearchView decorated with @login_required.- URL route
'search/rides/' in search/urls.py.- Partial template
search/templates/search/partials/_ride_search.html with HTMX attributes (hx-get, hx-trigger="input changed delay:300ms").
## File & Component Structure
- memory-bank/features/search/rides.md- search/mixins.py – add
RideAutocomplete- search/forms.py – add
RideSearchForm- search/urls.py – register ride endpoints (
autocomplete/, results/)- rides/views.py – add
RideSearchView- search/templates/search/partials/_ride_search.html
- rides/templates/rides/partials/ride_results.html
## Integration Points - Combined search component toggles between park and ride modes.
- Ride result links to
ParkDetailView for context.- Shared styles and layout from
search/templates/search/layouts/base.html.
## Database Query Optimization
- Add DB index on Ride.name and Ride.park_id.- Use
select_related('park') in view/queryset.- Limit autocomplete to top 10 for responsiveness. ## Frontend Component Design - HTMX:
<input> with hx-get="/search/rides/autocomplete/", update target container.- AlpineJS: manage local state for selection, clearing on blur.
- Reuse CSS classes from park search for unified UX. ## Testing Strategy - Unit tests for
RideAutocomplete.- Form tests for
RideSearchForm.- View tests (
login_required, filter logic) in [rides/tests/test_search_view.py].- HTMX integration: AJAX responses include expected HTML using pytest-django + django-htmx.
- Performance: benchmark large resultset to ensure truncation and quick response.