mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-28 18:47:05 -05:00
3.4 KiB
3.4 KiB
ThrillWiki Implementation Plan
User Review Required
Important
Measurement Unit System: The backend will store all values in Metric. The Frontend (Nuxt Composables) will handle conversion to Imperial based on user preference. Moderation Workflow: A State Machine (Pending -> Claimed -> Approved) will be enforced for all user submissions.
Proposed Changes
Backend (Django + DRF)
App Structure & Models
apps/core: Base models (SluggedModel,TimeStampedModel), History (pghistory,SlugHistory), Utilities.apps/accounts:User,UserProfile(bio, location, visual prefs),Auth(MFA, Magic Link).apps/parks:Park(name, location, dates, status, owner/operator FKs).apps/rides:Ride(name, park FK, model FK, specs: height/speed/etc stored in metric).Manufacturer,Designer,RideModel(Company models).RideCredit(M2M: User <-> Ride). Attributes:count,first_ridden_at,notes,ranking.
apps/reviews:Review(User, Entity GenericFK, rating 1-5, text, helpful votes).apps/media:Photo(image, user, caption, entity GenericFK),Video.apps/lists:UserList(Custom rankings/lists).apps/moderation:Submission(User, ContentType, Object ID, Changes JSON, Status: Pending/Claimed/Approved/Rejected, Moderator FK),Report.apps/blog:Post,Tag.apps/support:Ticket(Contact form).
API & Logic
- DRF ViewSets: Full CRUD for all entities (read-only for public, authenticated for mutations).
- Moderation Middleware/Signals: Intercept mutations to create
Submissionrecords instead of direct saves for non-staff. - Versioning:
pghistoryandSlugHistoryare already partially implemented incore. - Search: Global search endpoint.
- Geolocation:
PostGISintegrations (already partially inparks.location_utils).
Frontend (Nuxt 4)
Architecture
- Directory Structure:
app/pages/: File-based routing (e.g.,parks/[slug].vue).app/components/: Reusable UI components (Design System).app/composables/: Logic reuse (useUnits,useAuth,useApi).app/stores/: Pinia stores (userStore,toastStore).app/layouts/:default.vue,auth.vue.
- Tech Stack: Nuxt 4, Nuxt UI (Tailwind based), Pinia, VueUse.
Key Features & Composables
useUnits: Reactively converts metric props to imperial if user pref is set.useAuth: Handles JWT/Session, MFA state, User fetching.useModeration: For moderators to claim/approve actions.- Forms:
Zodschema validation matching DRF serializers.
Design System
- Theme: Dark/Light mode support (built-in to Nuxt UI).
- Components:
EntityCard(Park/Ride summary).StandardLayout(Hero, Tabs, Content).MediaGallery.ReviewList.
Verification Plan
Automated Tests
- Backend:
pytestfor Model constraints, API endpoints, and Moderation flow. - Frontend:
vitestfor Unit/Composable tests. E2E tests for critical flows (Submission -> Moderation -> Publish).
Manual Verification
- Ride Credits: User adds a ride, verifies count increments.
- Moderation: User submits data -> Mod claims -> Mod approves -> Public data updates.
- Units: Toggle preference, verify stats update (e.g., km/h -> mph).