mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 10:11:13 -05:00
370 lines
11 KiB
Markdown
370 lines
11 KiB
Markdown
# PHASE 3: Sacred Pipeline - Submissions
|
|
**Status:** ⬜ Not Started
|
|
**Estimated Time:** 20-25 hours
|
|
**Priority:** ⚠️ CRITICAL - THIS IS THE HEART OF THRILLWIKI
|
|
**Depends On:** Phase 1 (Foundation), Phase 2 (Authentication)
|
|
**Blocks:** All entity creation/editing features
|
|
|
|
---
|
|
|
|
## 🎯 Phase Goal
|
|
Replace the ENTIRE submission system from Supabase to Django while maintaining 100% Sacred Pipeline integrity: **Form → Submission → Moderation → Approval → Versioning → Display**
|
|
|
|
---
|
|
|
|
## ⚠️ CRITICAL WARNING
|
|
The Sacred Pipeline is NON-NEGOTIABLE. Every single entity creation/edit MUST flow through:
|
|
1. User submits form
|
|
2. Creates submission record
|
|
3. Goes to moderation queue
|
|
4. Moderator approves/rejects
|
|
5. On approval → creates/updates entity + version history
|
|
6. Displays on site
|
|
|
|
**NEVER bypass moderation!** Exception: Users with moderator+ roles skip queue.
|
|
|
|
---
|
|
|
|
## 📋 Prerequisites
|
|
- [x] Phase 1 complete (API client, types, base service)
|
|
- [x] Phase 2 complete (Authentication working)
|
|
- [ ] Django submission endpoints tested
|
|
- [ ] Understanding of `entitySubmissionHelpers.ts` (1,200+ lines!)
|
|
- [ ] Django Sacred Pipeline working and tested
|
|
|
|
---
|
|
|
|
## 🗂️ Files to Create/Modify
|
|
|
|
```
|
|
src/services/submissions/
|
|
├── submissionService.ts (NEW)
|
|
├── types.ts (NEW)
|
|
└── index.ts (NEW)
|
|
|
|
src/lib/
|
|
├── entitySubmissionHelpers.ts (MAJOR REWRITE - 1,200+ lines!)
|
|
|
|
Forms that need updating:
|
|
src/components/forms/
|
|
├── ParkForm.tsx (MODIFY)
|
|
├── RideForm.tsx (MODIFY)
|
|
├── CompanyForm.tsx (MODIFY)
|
|
├── RideModelForm.tsx (MODIFY)
|
|
└── TimelineEventForm.tsx (MODIFY)
|
|
```
|
|
|
|
---
|
|
|
|
## ✅ Task 3.1: Submission Service Core (8 hours)
|
|
|
|
### Checklist
|
|
- [ ] Create `src/services/submissions/submissionService.ts`
|
|
- [ ] Implement create submission
|
|
- [ ] `createSubmission(data: SubmissionData): Promise<Submission>`
|
|
- [ ] Handle single entity submissions
|
|
- [ ] Handle composite submissions (park + operator)
|
|
- [ ] Map form data to Django schema
|
|
- [ ] Implement create with items
|
|
- [ ] `createSubmissionWithItems(items: SubmissionItem[]): Promise<Submission>`
|
|
- [ ] Handle dependency order
|
|
- [ ] Handle temp IDs for relationships
|
|
- [ ] Implement get submission
|
|
- [ ] `getSubmission(id: string): Promise<Submission>`
|
|
- [ ] Include all submission items
|
|
- [ ] Include relational data
|
|
- [ ] Implement list submissions
|
|
- [ ] `listSubmissions(filters?: SubmissionFilters): Promise<Submission[]>`
|
|
- [ ] Filter by user
|
|
- [ ] Filter by status
|
|
- [ ] Filter by type
|
|
- [ ] Implement update submission status
|
|
- [ ] For moderators only
|
|
- [ ] Handle in moderation service
|
|
- [ ] Handle errors properly
|
|
- [ ] Validation errors
|
|
- [ ] Rate limiting
|
|
- [ ] Network errors
|
|
- [ ] Add retry logic
|
|
- [ ] Test with simple submission
|
|
- [ ] Test with composite submission
|
|
|
|
### Django Endpoints
|
|
```typescript
|
|
POST /api/v1/submissions/ // Create submission
|
|
POST /api/v1/submissions/with-items/ // Create with items
|
|
GET /api/v1/submissions/{id}/ // Get submission
|
|
GET /api/v1/submissions/ // List submissions
|
|
GET /api/v1/submissions/my/ // User's submissions
|
|
```
|
|
|
|
### Acceptance Criteria
|
|
- [ ] Can create park submission
|
|
- [ ] Can create ride submission
|
|
- [ ] Can create composite (park + operator)
|
|
- [ ] Submission goes to moderation queue
|
|
- [ ] Errors are handled correctly
|
|
- [ ] Rate limiting works
|
|
|
|
---
|
|
|
|
## ✅ Task 3.2: Rewrite entitySubmissionHelpers.ts (12 hours)
|
|
|
|
### ⚠️ THIS IS THE BIG ONE
|
|
|
|
This file has 1,200+ lines of Supabase code. Every function must be rewritten to use Django service.
|
|
|
|
### Functions to Rewrite
|
|
|
|
#### Park Submissions
|
|
- [ ] `submitParkCreation()` - Create new park
|
|
- [ ] Use submission service
|
|
- [ ] Handle location data
|
|
- [ ] Handle operator/owner references
|
|
- [ ] Handle images
|
|
- [ ] Test simple park creation
|
|
- [ ] Test park + operator creation
|
|
- [ ] Test park + operator + owner creation
|
|
|
|
- [ ] `submitParkUpdate()` - Edit existing park
|
|
- [ ] Fetch existing park data
|
|
- [ ] Extract changed fields only
|
|
- [ ] Block new photo uploads (use gallery)
|
|
- [ ] Allow banner/card reassignments
|
|
- [ ] Test park edit
|
|
|
|
#### Ride Submissions
|
|
- [ ] `submitRideCreation()` - Create new ride
|
|
- [ ] Handle park reference
|
|
- [ ] Handle manufacturer/designer references
|
|
- [ ] Handle ride model reference
|
|
- [ ] Handle images
|
|
- [ ] Handle technical specifications
|
|
- [ ] Test simple ride creation
|
|
- [ ] Test ride + manufacturer creation
|
|
- [ ] Test ride + park + manufacturer creation
|
|
|
|
- [ ] `submitRideUpdate()` - Edit existing ride
|
|
- [ ] Fetch existing ride data
|
|
- [ ] Extract changed fields
|
|
- [ ] Block new photo uploads
|
|
- [ ] Test ride edit
|
|
|
|
#### Company Submissions
|
|
- [ ] `submitManufacturerCreation()` - Create manufacturer
|
|
- [ ] `submitManufacturerUpdate()` - Edit manufacturer
|
|
- [ ] `submitDesignerCreation()` - Create designer
|
|
- [ ] `submitDesignerUpdate()` - Edit designer
|
|
- [ ] `submitOperatorCreation()` - Create operator
|
|
- [ ] `submitOperatorUpdate()` - Edit operator
|
|
- [ ] `submitPropertyOwnerCreation()` - Create property owner
|
|
- [ ] `submitPropertyOwnerUpdate()` - Edit property owner
|
|
|
|
#### Ride Model Submissions
|
|
- [ ] `submitRideModelCreation()` - Create ride model
|
|
- [ ] Handle manufacturer reference
|
|
- [ ] Handle technical specifications
|
|
- [ ] Test ride model creation
|
|
|
|
- [ ] `submitRideModelUpdate()` - Edit ride model
|
|
- [ ] Test ride model edit
|
|
|
|
#### Timeline Event Submissions
|
|
- [ ] `submitTimelineEvent()` - Create timeline event
|
|
- [ ] Handle entity references
|
|
- [ ] Handle date precision
|
|
- [ ] Test timeline creation
|
|
|
|
- [ ] `submitTimelineEventUpdate()` - Edit timeline event
|
|
- [ ] Test timeline edit
|
|
|
|
#### Composite Submissions
|
|
- [ ] `submitCompositeCreation()` - Master function
|
|
- [ ] Handle dependency ordering
|
|
- [ ] Map temp IDs to order indices
|
|
- [ ] Validate all temp refs
|
|
- [ ] Handle all entity combinations:
|
|
- [ ] Park + Operator
|
|
- [ ] Park + Operator + Owner
|
|
- [ ] Ride + Manufacturer
|
|
- [ ] Ride + Manufacturer + Model
|
|
- [ ] Ride + Park + Manufacturer + Model
|
|
- [ ] Test all combinations
|
|
|
|
### CRITICAL REQUIREMENTS
|
|
1. **NO JSON in SQL** - Use relational tables:
|
|
- `park_submissions`
|
|
- `ride_submissions`
|
|
- `company_submissions`
|
|
- `ride_model_submissions`
|
|
- `timeline_event_submissions`
|
|
|
|
2. **Rate Limiting** - Keep existing logic:
|
|
- `checkRateLimitOrThrow()`
|
|
- `recordSubmissionAttempt()`
|
|
|
|
3. **Ban Checking** - Keep existing logic:
|
|
- Check if user is banned
|
|
- Report ban evasion attempts
|
|
|
|
4. **Image Handling**:
|
|
- Upload images first
|
|
- Only allow uploads on creation
|
|
- Block uploads on edits (use gallery)
|
|
- Allow banner/card reassignments
|
|
|
|
5. **Error Handling**:
|
|
- Retry logic with exponential backoff
|
|
- Validation errors don't retry
|
|
- Network errors do retry (max 3)
|
|
- User-friendly error messages
|
|
|
|
6. **Validation**:
|
|
- Client-side validation before submit
|
|
- Use validation functions
|
|
- Clear error messages
|
|
|
|
### Testing Checklist
|
|
- [ ] Create park (simple)
|
|
- [ ] Create park + operator
|
|
- [ ] Create park + operator + owner (same company)
|
|
- [ ] Create park + operator + owner (different companies)
|
|
- [ ] Edit park
|
|
- [ ] Create ride (simple)
|
|
- [ ] Create ride + manufacturer
|
|
- [ ] Create ride + manufacturer + model
|
|
- [ ] Create ride + park + manufacturer + model
|
|
- [ ] Edit ride
|
|
- [ ] Create manufacturer
|
|
- [ ] Edit manufacturer
|
|
- [ ] Create designer
|
|
- [ ] Edit designer
|
|
- [ ] Create operator
|
|
- [ ] Edit operator
|
|
- [ ] Create property owner
|
|
- [ ] Edit property owner
|
|
- [ ] Create ride model
|
|
- [ ] Edit ride model
|
|
- [ ] Create timeline event
|
|
- [ ] Edit timeline event
|
|
- [ ] Rate limiting works
|
|
- [ ] Ban checking works
|
|
- [ ] Validation works
|
|
- [ ] Error handling works
|
|
- [ ] Retry logic works
|
|
- [ ] All go to moderation queue
|
|
- [ ] Moderators skip queue
|
|
|
|
### Acceptance Criteria
|
|
- [ ] Zero `supabase.*` calls in file
|
|
- [ ] All 16+ submission types work
|
|
- [ ] Composite submissions work
|
|
- [ ] Sacred Pipeline intact
|
|
- [ ] Rate limiting works
|
|
- [ ] Ban checking works
|
|
- [ ] Images upload correctly
|
|
- [ ] Validation prevents bad data
|
|
- [ ] Errors are user-friendly
|
|
- [ ] All submissions go to moderation
|
|
- [ ] TypeScript compiles without errors
|
|
|
|
---
|
|
|
|
## 🎯 Phase Completion Criteria
|
|
|
|
### Code Quality
|
|
- [ ] Zero Supabase calls in `entitySubmissionHelpers.ts`
|
|
- [ ] Zero Supabase calls in form components
|
|
- [ ] All TypeScript errors resolved
|
|
- [ ] No linter warnings
|
|
- [ ] Code well-documented
|
|
- [ ] Consistent error handling
|
|
|
|
### Functionality - MUST TEST ALL
|
|
- [ ] Park creation works
|
|
- [ ] Park editing works
|
|
- [ ] Park + operator creation works
|
|
- [ ] Ride creation works
|
|
- [ ] Ride editing works
|
|
- [ ] Ride + manufacturer creation works
|
|
- [ ] Ride + manufacturer + model creation works
|
|
- [ ] Manufacturer creation/editing works
|
|
- [ ] Designer creation/editing works
|
|
- [ ] Operator creation/editing works
|
|
- [ ] Property owner creation/editing works
|
|
- [ ] Ride model creation/editing works
|
|
- [ ] Timeline event creation/editing works
|
|
- [ ] Composite submissions work
|
|
- [ ] All submissions go to moderation queue
|
|
- [ ] Moderators can skip queue
|
|
- [ ] Rate limiting prevents spam
|
|
- [ ] Ban checking prevents abuse
|
|
- [ ] Images upload correctly
|
|
- [ ] Validation catches errors
|
|
- [ ] Error messages are clear
|
|
|
|
### Sacred Pipeline Integrity
|
|
- [ ] ✅ Form captured correctly
|
|
- [ ] ✅ Submission created in Django
|
|
- [ ] ✅ Goes to moderation queue
|
|
- [ ] ✅ Moderator can approve/reject
|
|
- [ ] ✅ Approval creates entity + version
|
|
- [ ] ✅ Entity displays on site
|
|
- [ ] ✅ Version history recorded
|
|
- [ ] ✅ NEVER bypasses moderation (except moderators)
|
|
|
|
---
|
|
|
|
## 📊 Progress Tracking
|
|
|
|
**Started:** [Date]
|
|
**Completed:** [Date]
|
|
**Time Spent:** [Hours]
|
|
|
|
### Tasks Completed
|
|
- [ ] Task 3.1: Submission Service Core
|
|
- [ ] Task 3.2: Rewrite entitySubmissionHelpers.ts
|
|
- [ ] Park submissions
|
|
- [ ] Ride submissions
|
|
- [ ] Company submissions
|
|
- [ ] Ride model submissions
|
|
- [ ] Timeline event submissions
|
|
- [ ] Composite submissions
|
|
- [ ] Testing all submission types
|
|
|
|
---
|
|
|
|
## 🚨 Blockers & Issues
|
|
|
|
Document any issues:
|
|
|
|
1. **Issue:** [Description]
|
|
- **Impact:** [Impact]
|
|
- **Resolution:** [Resolution]
|
|
|
|
---
|
|
|
|
## 📝 Notes
|
|
|
|
**Important Decisions:**
|
|
- [Date] - [Decision about submission flow]
|
|
|
|
**Learnings:**
|
|
- [Date] - [Important learning]
|
|
|
|
---
|
|
|
|
## ⏭️ Next Phase
|
|
|
|
Once complete, proceed to [Phase 4: Entity Services](./PHASE_04_ENTITY_SERVICES.md)
|
|
|
|
---
|
|
|
|
## 🆘 If You Get Stuck
|
|
|
|
1. Check Django submission endpoints work: `django/api/v1/endpoints/submissions.py`
|
|
2. Check Django submission services: `django/apps/entities/services/`
|
|
3. Review Sacred Pipeline docs: `django/SACRED_PIPELINE_AUDIT_AND_IMPLEMENTATION_PLAN.md`
|
|
4. Test with Postman/curl first
|
|
5. Don't proceed until submissions work end-to-end
|