doc update
This commit is contained in:
@@ -1,303 +0,0 @@
|
||||
# Stage 2 Frontend Refactor - COMPLETE
|
||||
|
||||
**Date:** November 25, 2025
|
||||
**Status:** ✅ Core Refactor Complete (22 files updated)
|
||||
**Remaining Work:** ⚠️ 4 legacy components need refactoring
|
||||
|
||||
---
|
||||
|
||||
## 📊 Summary
|
||||
|
||||
Successfully updated **22 frontend files** to align with the Stage 1 backend schema changes. All deprecated Content model fields removed from core application flows. Application is **functional** with new schema.
|
||||
|
||||
### Deprecated Fields Removed
|
||||
- ❌ `entity_type` (Content) → ✅ `content_type` (post/page/product/service/category/tag)
|
||||
- ❌ `cluster_role` → (removed entirely)
|
||||
- ❌ `sync_status` (Content) → (removed - kept only for Integration model)
|
||||
- ❌ `meta_title` (Content) → ✅ use `title` directly
|
||||
- ❌ `meta_description` (Content) → (removed)
|
||||
- ❌ `primary_keyword` (Content) → (removed)
|
||||
- ❌ `secondary_keywords` (Content) → (removed)
|
||||
- ❌ `tags` (Content array field) → ✅ `taxonomy_terms` array
|
||||
- ❌ `categories` (Content array field) → ✅ `taxonomy_terms` array
|
||||
- ❌ `word_count` (Content) → (removed)
|
||||
- ❌ `generated_at` → ✅ `created_at`
|
||||
- ❌ `task_id` (Content OneToOne) → (removed - tasks no longer linked to content)
|
||||
|
||||
### New Fields Added
|
||||
- ✅ `content_type`: Enum choices (post, page, product, service, category, tag)
|
||||
- ✅ `content_structure`: Enum choices (article, listicle, guide, comparison, product_page)
|
||||
- ✅ `taxonomy_terms`: Array of {id, name, taxonomy} objects
|
||||
- ✅ `source`: Enum (igny8, wordpress)
|
||||
- ✅ `external_id`: String (WordPress post ID, etc.)
|
||||
- ✅ `external_url`: String (live URL)
|
||||
- ✅ `cluster_id`: Foreign key to Cluster
|
||||
- ✅ `cluster_name`: Denormalized for display
|
||||
|
||||
---
|
||||
|
||||
## ✅ Files Updated (22 Files)
|
||||
|
||||
### Phase 1-2: API & Configuration Layer (5 files)
|
||||
1. **`src/services/api.ts`**
|
||||
- Updated `Content`, `Task`, `ContentIdea`, `ContentFilters` interfaces
|
||||
- Removed: `entity_type`, `cluster_role`, `sync_status`, `meta_title`, `meta_description`, `primary_keyword`, `word_count`, `task_id`
|
||||
- Added: `content_type`, `content_structure`, `taxonomy_terms`, `source`, `external_id`, `external_url`
|
||||
|
||||
2. **`src/services/integration.api.ts`**
|
||||
- ✅ Verified clean (sync_status correctly typed for Integration model)
|
||||
|
||||
3. **`src/config/pages/tasks.config.tsx`**
|
||||
- Removed `entity_type` and `cluster_role` columns
|
||||
- Updated `content_type` options: `blog_post` → `post`, added `page/product/service/category/tag`
|
||||
- Updated `content_structure` options: removed deprecated values
|
||||
|
||||
4. **`src/config/pages/content.config.tsx`**
|
||||
- **Major restructure**: Added `content_type`, `content_structure`, `cluster_name`, `taxonomy_terms` columns
|
||||
- Removed: `primary_keyword`, `secondary_keywords`, `tags`, `categories`, `word_count`, `entity_type`, `cluster_role`, `sync_status`
|
||||
- Updated status values: `draft/review/publish` → `draft/published`
|
||||
- Changed field: `generated_at` → `created_at`
|
||||
|
||||
5. **`src/config/pages/ideas.config.tsx`**
|
||||
- Removed `site_entity_type` and `cluster_role` columns/filters
|
||||
- Updated content type defaults
|
||||
|
||||
### Phase 3: State Management (1 file)
|
||||
6. **`src/store/plannerStore.ts`**
|
||||
- ✅ Verified clean (no deprecated fields)
|
||||
|
||||
### Phase 4: Planner Module (3 files)
|
||||
7. **`src/config/pages/clusters.config.tsx`**
|
||||
- Made cluster names clickable (Link to `/clusters/:id`)
|
||||
|
||||
8. **`src/pages/Planner/Ideas.tsx`**
|
||||
- Removed `entityTypeFilter` state and handlers
|
||||
- Updated default values: `blog_post` → `article/post`
|
||||
|
||||
9. **`src/pages/Planner/Dashboard.tsx`**
|
||||
- ✅ Verified clean
|
||||
|
||||
### Phase 5: Writer Module (3 files)
|
||||
10. **`src/pages/Writer/Tasks.tsx`**
|
||||
- Removed `entityTypeFilter` state
|
||||
- Fixed `formData` defaults: `blog_post` → `article/post`
|
||||
|
||||
11. **`src/pages/Writer/Content.tsx`**
|
||||
- Removed `syncStatusFilter` state
|
||||
- Updated metrics: removed "Synced/Pending" metric
|
||||
- Changed `sortBy` default: `generated_at` → `created_at`
|
||||
- Updated `getItemDisplayName`: removed `meta_title` fallback
|
||||
|
||||
12. **`src/pages/Writer/Dashboard.tsx`**
|
||||
- Removed `review` status from content stats
|
||||
- Updated task status handling: `pending/in_progress/completed` → `queued/completed`
|
||||
- Updated chart categories: removed "In Review"
|
||||
|
||||
13. **`src/pages/Writer/ContentView.tsx`**
|
||||
- Removed `meta_title` and `meta_description` from PageMeta
|
||||
|
||||
### Phase 6: Sites Module (3 files)
|
||||
14. **`src/pages/Sites/Content.tsx`**
|
||||
- Removed `primary_keyword` from Content interface
|
||||
- Updated status options: `draft/review/publish` → `draft/published`
|
||||
- Changed `sortBy` default: `generated_at` → `created_at`
|
||||
|
||||
15. **`src/pages/Sites/Settings.tsx`**
|
||||
- ✅ Verified clean (meta_title/meta_description are for **Site SEO**, not Content)
|
||||
|
||||
16. **`src/pages/Sites/List.tsx`**
|
||||
- ✅ Verified clean
|
||||
|
||||
### Phase 7: Cluster Detail (2 files)
|
||||
17. **`src/pages/Planner/ClusterDetail.tsx`**
|
||||
- ✅ **NEW PAGE CREATED**
|
||||
- Tabs: Articles, Pages, Products, Taxonomy
|
||||
- Displays content with new schema fields (content_type, content_structure, taxonomy_terms)
|
||||
|
||||
18. **`src/App.tsx`**
|
||||
- Added `/planner/clusters/:id` route with lazy loading
|
||||
|
||||
### Phase 8: PostEditor (Partial) (1 file)
|
||||
19. **`src/pages/Sites/PostEditor.tsx`**
|
||||
- ✅ Updated `Content` interface (removed all deprecated fields)
|
||||
- ✅ Updated initial state and `loadPost` function
|
||||
- ✅ Fixed `handleSave` (removed task creation logic)
|
||||
- ✅ Updated `CONTENT_TYPES` and `STATUS_OPTIONS`
|
||||
- ⚠️ **SEO and Metadata tabs still reference deprecated fields** (needs UI rewrite)
|
||||
|
||||
### Phase 9: Optimizer Module (2 files)
|
||||
20. **`src/pages/Optimizer/ContentSelector.tsx`**
|
||||
- Removed `syncStatus` from filters state
|
||||
- Removed sync_status filter logic
|
||||
- ⚠️ Still displays `SyncStatusBadge` in UI (line 262)
|
||||
|
||||
21. **`src/pages/Optimizer/AnalysisPreview.tsx`**
|
||||
- Changed `entity_type` → `content_type`
|
||||
- Removed `word_count` and `sync_status` display
|
||||
|
||||
### Phase 10: Linker Module (1 file)
|
||||
22. **`src/pages/Linker/ContentList.tsx`**
|
||||
- Removed `cluster_role` display from cluster badges
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Known Remaining Work (4 Legacy Components)
|
||||
|
||||
These components need **major refactoring** to fully remove deprecated field references:
|
||||
|
||||
### 1. **`src/components/content/ContentFilter.tsx`**
|
||||
**Issue:** Still has `syncStatus` filter with UI controls
|
||||
**Impact:** Low (filter doesn't break anything, just doesn't filter)
|
||||
**Fix Required:** Remove entire "Sync Status Filter" section
|
||||
|
||||
### 2. **`src/components/common/ToggleTableRow.tsx`**
|
||||
**Issue:** Extensive fallback logic for `primary_keyword`, `meta_description`, `tags`, `categories`
|
||||
**Impact:** Low (falls back to empty when fields don't exist)
|
||||
**Fix Required:** Refactor to use only `taxonomy_terms` array
|
||||
|
||||
### 3. **`src/pages/Sites/PostEditor.tsx` (SEO/Metadata Tabs)**
|
||||
**Issue:** SEO tab has inputs for `meta_title`, `meta_description`, `primary_keyword`, `secondary_keywords`
|
||||
**Issue:** Metadata tab has tag/category management for deprecated fields
|
||||
**Impact:** Medium (UI sections don't work, but don't break core functionality)
|
||||
**Fix Required:** Complete UI redesign for these tabs
|
||||
|
||||
### 4. **`src/components/optimizer/OptimizationScores.tsx`**
|
||||
**Issue:** Interface has `word_count`, `has_meta_title`, `has_meta_description`, `has_primary_keyword`
|
||||
**Impact:** Low (internal to Optimizer module)
|
||||
**Fix Required:** Update interface and scoring logic
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Application Status
|
||||
|
||||
### ✅ Functional Features
|
||||
- ✅ Planner module (Keywords, Clusters, Ideas)
|
||||
- ✅ Writer module (Tasks, Content, Dashboard)
|
||||
- ✅ Sites module (List, Content browsing)
|
||||
- ✅ Cluster detail pages with content filtering
|
||||
- ✅ Content creation and editing (basic)
|
||||
- ✅ API calls using new schema
|
||||
- ✅ Table/Grid views with correct columns
|
||||
|
||||
### ⚠️ Partially Functional
|
||||
- ⚠️ PostEditor (Content tab works, SEO/Metadata tabs broken)
|
||||
- ⚠️ Optimizer (content selection works, analysis displays partial data)
|
||||
- ⚠️ Content metadata display (shows title only, no SEO fields)
|
||||
|
||||
### ❌ Non-Critical Broken Features
|
||||
- ❌ PostEditor SEO tab
|
||||
- ❌ PostEditor Metadata tab
|
||||
- ❌ Content filter by sync status (Optimizer)
|
||||
- ❌ ToggleTableRow metadata expansion (shows minimal data)
|
||||
|
||||
---
|
||||
|
||||
## 📋 Migration Checklist
|
||||
|
||||
- [x] Update API type definitions
|
||||
- [x] Update config files (table columns/filters)
|
||||
- [x] Update page components (remove deprecated state/handlers)
|
||||
- [x] Update default values (blog_post → post/article)
|
||||
- [x] Update status enums (draft/review/publish → draft/published)
|
||||
- [x] Update field references (generated_at → created_at)
|
||||
- [x] Create Cluster detail page
|
||||
- [x] Add routing for new pages
|
||||
- [ ] Refactor ContentFilter component
|
||||
- [ ] Refactor ToggleTableRow component
|
||||
- [ ] Redesign PostEditor SEO/Metadata tabs
|
||||
- [ ] Update OptimizationScores interface
|
||||
- [ ] Run `npm run build` to verify TypeScript compilation
|
||||
- [ ] Update tests for new schema
|
||||
- [ ] Update Storybook stories (if applicable)
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Developer Notes
|
||||
|
||||
### Field Mapping Reference
|
||||
```typescript
|
||||
// OLD SCHEMA → NEW SCHEMA
|
||||
entity_type → content_type (enum: post, page, product, service, category, tag)
|
||||
cluster_role → (removed)
|
||||
sync_status → (removed from Content, kept for Integration)
|
||||
meta_title → title (just use title directly)
|
||||
meta_description → (removed - not in backend Content model)
|
||||
primary_keyword → (removed)
|
||||
secondary_keywords → (removed)
|
||||
tags → taxonomy_terms (filter by taxonomy === 'tag')
|
||||
categories → taxonomy_terms (filter by taxonomy === 'category')
|
||||
word_count → (removed)
|
||||
generated_at → created_at
|
||||
task_id → (removed - OneToOne relationship removed)
|
||||
html_content → content_html (renamed for consistency)
|
||||
```
|
||||
|
||||
### Status Value Changes
|
||||
```typescript
|
||||
// Task Status
|
||||
OLD: 'pending' | 'in_progress' | 'completed'
|
||||
NEW: 'queued' | 'completed'
|
||||
|
||||
// Content Status
|
||||
OLD: 'draft' | 'review' | 'publish'
|
||||
NEW: 'draft' | 'published'
|
||||
```
|
||||
|
||||
### Content Type Changes
|
||||
```typescript
|
||||
// Content Type (formerly entity_type)
|
||||
OLD: 'blog_post' | 'article' | 'guide' | 'tutorial'
|
||||
NEW: 'post' | 'page' | 'product' | 'service' | 'category' | 'tag'
|
||||
|
||||
// Content Structure
|
||||
OLD: 'cluster_hub' | 'landing_page' | 'pillar_page' | 'supporting_page'
|
||||
NEW: 'article' | 'listicle' | 'guide' | 'comparison' | 'product_page'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Next Steps
|
||||
|
||||
1. **Build Test**
|
||||
```bash
|
||||
cd frontend
|
||||
npm run build
|
||||
```
|
||||
- Expect TypeScript errors in: ContentFilter, ToggleTableRow, PostEditor, OptimizationScores
|
||||
- All other files should compile successfully
|
||||
|
||||
2. **Run Application**
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
- Core functionality should work
|
||||
- PostEditor SEO/Metadata tabs will show UI but won't save data
|
||||
- Content listings will display correctly
|
||||
|
||||
3. **Refactor Remaining Components** (priority order)
|
||||
- HIGH: PostEditor SEO/Metadata tabs (user-facing)
|
||||
- MEDIUM: ContentFilter component (visible but low impact)
|
||||
- LOW: ToggleTableRow (edge case display)
|
||||
- LOW: OptimizationScores (internal interface)
|
||||
|
||||
---
|
||||
|
||||
## 📝 Breaking Changes Summary
|
||||
|
||||
**For Backend API Consumers:**
|
||||
- Content creation no longer requires `task_id`
|
||||
- Content responses include `taxonomy_terms` array instead of `tags`/`categories`
|
||||
- Status values changed (see above)
|
||||
- Field names changed (see mapping above)
|
||||
|
||||
**For Frontend Developers:**
|
||||
- Import path changes: `Content` interface updated in `services/api.ts`
|
||||
- Config files use new column definitions
|
||||
- Default form values changed (check `formData` initialization)
|
||||
- Status filters must use new enum values
|
||||
|
||||
---
|
||||
|
||||
**Completion Date:** November 25, 2025
|
||||
**Completion Rate:** 85% (22/26 planned files updated)
|
||||
**Status:** Ready for testing and iterative refinement
|
||||
Reference in New Issue
Block a user