feat: Introduce lists and reviews apps, refactor user list functionality from accounts, and add user profile fields.

This commit is contained in:
pacnpal
2025-12-26 09:27:44 -05:00
parent ed04b30469
commit cd8868a591
37 changed files with 5900 additions and 281 deletions

48
BACKEND_STRUCTURE.md Normal file
View File

@@ -0,0 +1,48 @@
# Backend Structure Plan
## Apps Overview
### 1. `apps.core`
- **Responsibility**: Base classes, shared utilities, history tracking.
- **Existing**: `SluggedModel`, `TrackedModel`, `pghistory`.
### 2. `apps.accounts`
- **Responsibility**: User authentication and profiles.
- **Existing**: `User`, `UserProfile`, `UserDeletionRequest`, `UserNotification`.
- **Missing**: `RideCredit` (although `UserProfile` has aggregate stats, individual credits are needed).
### 3. `apps.parks`
- **Responsibility**: Park management.
- **Existing**: `Park`, `ParkArea`.
### 4. `apps.rides`
- **Responsibility**: Ride data (rides, coasters, credits), Companies.
- **Existing**: `RideModel`, `RideModelVariant`, `RideModelPhoto`, `Ride` (with FSM `status`).
- **Proposed Additions**:
- `RideCredit` (M2M: User <-> Ride). **Attributes**: `count`, `first_ridden_at`, `notes`, `rating`. **Constraint**: Unique(user, ride).
### 5. `apps.moderation`
- **Responsibility**: Content pipeline.
- **Existing**: Check `apps/moderation` (likely `Submission`).
- **Constraint**: Status State Machine (Pending -> Claimed -> Approved).
### 6. `apps.media`
- **Responsibility**: Photos and Videos.
- **Existing**: `Photo` (GenericFK).
### 7. `apps.reviews`
- **Responsibility**: User reviews.
- **Proposed**: `Review` model (User, Entity GenericFK, rating 1-5, text, helpful votes).
### 8. `apps.lists`
- **Responsibility**: User Rankings/Lists.
- **Existing**: `TopList`, `TopListItem` (in `apps.accounts` currently? Or should move to `apps.lists`?). `accounts/models.py` has `TopList`.
- **Proposal**: Move `TopList` to `apps.lists` for better separation if it grows, or keep in `accounts` if tightly coupled. Spec suggests "11. USER LISTS" is a major feature.
### 9. `apps.blog`
- **Responsibility**: Blog posts.
- **Proposed**: `Post`, `Tag`.
### 10. `apps.support`
- **Responsibility**: Contact form.
- **Proposed**: `Ticket`.