255 lines
7.0 KiB
Markdown
255 lines
7.0 KiB
Markdown
# Django Admin Cleanup - Implementation Status
|
|
|
|
## Status: COMPLETED (January 4, 2026)
|
|
|
|
---
|
|
|
|
## What Was Done
|
|
|
|
### 1. Fixed Duplicate Model Registration
|
|
**File:** `backend/igny8_core/business/billing/admin.py`
|
|
|
|
- `AccountPaymentMethod` was registered in BOTH:
|
|
- `modules/billing/admin.py` (with AccountAdminMixin - KEPT)
|
|
- `business/billing/admin.py` (simpler version - REMOVED)
|
|
- Commented out the duplicate registration in `business/billing/admin.py`
|
|
|
|
### 2. Simplified Admin Site Configuration
|
|
**File:** `backend/igny8_core/admin/site.py`
|
|
|
|
- Removed complex `get_app_list()` override (was 250+ lines)
|
|
- Removed `get_sidebar_list()` override
|
|
- Removed `each_context()` override with debug logging
|
|
- Kept only:
|
|
- Custom URLs for dashboard, reports, and monitoring
|
|
- Index redirect to dashboard
|
|
- Navigation is now handled by Unfold's built-in `SIDEBAR.navigation` setting
|
|
|
|
### 3. Added Proper Unfold Navigation Configuration
|
|
**File:** `backend/igny8_core/settings.py`
|
|
|
|
Added complete `UNFOLD["SIDEBAR"]["navigation"]` config with:
|
|
- Dashboard link
|
|
- Reports section (6 reports)
|
|
- Accounts & Users group
|
|
- Plans & Billing group
|
|
- Credits group
|
|
- Planning group
|
|
- Writing group
|
|
- Taxonomy group
|
|
- Publishing group
|
|
- Automation group
|
|
- AI Configuration group (NEW - consolidated)
|
|
- Global Settings group
|
|
- Resources group
|
|
- Logs & Monitoring group
|
|
- Django Admin group
|
|
|
|
Each item has proper Material Design icons.
|
|
|
|
### 4. Added Site Logo Configuration
|
|
**File:** `backend/igny8_core/settings.py`
|
|
|
|
```python
|
|
"SITE_ICON": {
|
|
"light": lambda request: "/static/admin/img/logo-light.svg",
|
|
"dark": lambda request: "/static/admin/img/logo-dark.svg",
|
|
},
|
|
```
|
|
|
|
**Note:** Logo SVG files need to be created at these paths for the logo to display.
|
|
|
|
---
|
|
|
|
## Verification Results
|
|
|
|
```bash
|
|
# Django system check
|
|
$ docker exec igny8_backend python manage.py check
|
|
System check identified no issues (0 silenced).
|
|
|
|
# Admin registry test
|
|
$ docker exec igny8_backend python manage.py shell -c "..."
|
|
Total registered models: 63
|
|
Admin site ready!
|
|
|
|
# UNFOLD config test
|
|
Navigation items: 20
|
|
```
|
|
|
|
---
|
|
|
|
## What Was NOT Done (and why)
|
|
|
|
### Models NOT Hidden from Admin
|
|
|
|
These models were originally planned for removal but are **actively used**:
|
|
|
|
| Model | Reason Kept |
|
|
|-------|-------------|
|
|
| `IntegrationSettings` | Used by AI functions, settings, integration views |
|
|
| `AIPrompt` | Used by ai/prompts.py, management commands |
|
|
| `AuthorProfile` | Used by content generation |
|
|
| `Strategy` | Used by content planning |
|
|
|
|
---
|
|
|
|
## Admin Sidebar Structure (Final)
|
|
|
|
```
|
|
Dashboard
|
|
Reports
|
|
├── Revenue
|
|
├── Usage
|
|
├── Content
|
|
├── Data Quality
|
|
├── Token Usage
|
|
└── AI Cost Analysis
|
|
|
|
─── Core ───
|
|
Accounts & Users
|
|
├── Accounts
|
|
├── Users
|
|
├── Sites
|
|
├── Sectors
|
|
└── Site Access
|
|
|
|
Plans & Billing
|
|
├── Plans
|
|
├── Subscriptions
|
|
├── Invoices
|
|
├── Payments
|
|
├── Credit Packages
|
|
└── Payment Methods
|
|
|
|
Credits
|
|
├── Transactions
|
|
├── Usage Log
|
|
└── Plan Limits
|
|
|
|
─── Content ───
|
|
Planning
|
|
├── Keywords
|
|
├── Clusters
|
|
└── Content Ideas
|
|
|
|
Writing
|
|
├── Tasks
|
|
├── Content
|
|
├── Images
|
|
└── Image Prompts
|
|
|
|
Taxonomy
|
|
├── Taxonomies
|
|
├── Relations
|
|
├── Attributes
|
|
└── Cluster Maps
|
|
|
|
─── Automation ───
|
|
Publishing
|
|
├── Integrations
|
|
├── Publishing Records
|
|
├── Deployments
|
|
└── Sync Events
|
|
|
|
Automation
|
|
├── Configs
|
|
└── Runs
|
|
|
|
─── Configuration ───
|
|
AI Configuration
|
|
├── AI Models
|
|
├── Credit Costs
|
|
├── Billing Config
|
|
└── AI Task Logs
|
|
|
|
Global Settings
|
|
├── Integration Settings
|
|
├── Module Settings
|
|
├── AI Prompts
|
|
├── Author Profiles
|
|
└── Strategies
|
|
|
|
Resources
|
|
├── Industries
|
|
├── Industry Sectors
|
|
└── Seed Keywords
|
|
|
|
─── System ───
|
|
Logs & Monitoring
|
|
├── System Health
|
|
├── API Monitor
|
|
├── Debug Console
|
|
├── Celery Tasks
|
|
└── Admin Log
|
|
|
|
Django Admin
|
|
├── Groups
|
|
├── Permissions
|
|
├── Content Types
|
|
└── Sessions
|
|
```
|
|
|
|
---
|
|
|
|
## Files Changed
|
|
|
|
| File | Change |
|
|
|------|--------|
|
|
| `backend/igny8_core/settings.py` | Added full UNFOLD navigation config |
|
|
| `backend/igny8_core/admin/site.py` | Simplified to ~60 lines (was ~350) |
|
|
| `backend/igny8_core/business/billing/admin.py` | Commented out duplicate AccountPaymentMethod |
|
|
|
|
---
|
|
|
|
## Phase 2: AI Models & Credits Refactor - COMPLETED
|
|
|
|
### IntegrationProvider Model Created
|
|
- New model: `IntegrationProvider` in `modules/system/models.py`
|
|
- Centralized storage for ALL external service API keys
|
|
- Supports: AI providers, payment gateways, email services, storage
|
|
- Migrated OpenAI and Runware API keys from GlobalIntegrationSettings
|
|
- Admin interface added in `modules/system/admin.py`
|
|
- Added to admin sidebar under "Global Settings"
|
|
|
|
### AIModelConfig Enhanced
|
|
- Added `tokens_per_credit` - for text models (e.g., 1000 tokens = 1 credit)
|
|
- Added `credits_per_image` - for image models (e.g., 1, 5, 15 credits)
|
|
- Added `quality_tier` - for frontend UI (basic/quality/premium)
|
|
- Migration `0025_add_aimodel_credit_fields` adds fields
|
|
- Migration `0026_populate_aimodel_credits` sets initial values
|
|
|
|
### ModelRegistry Updated
|
|
- Removed fallback to `constants.py` - database is now authoritative
|
|
- Added `get_provider()`, `get_api_key()`, `get_api_secret()`, `get_webhook_secret()`
|
|
- Provider caching with TTL
|
|
|
|
### CreditService Updated
|
|
- Added `calculate_credits_for_image(model_name, num_images)` - uses AIModelConfig.credits_per_image
|
|
- Added `calculate_credits_from_tokens_by_model(model_name, total_tokens)` - uses AIModelConfig.tokens_per_credit
|
|
- Added `deduct_credits_for_image()` - convenience method
|
|
|
|
### Files Changed (Phase 2)
|
|
| File | Change |
|
|
|------|--------|
|
|
| `modules/system/models.py` | Added IntegrationProvider model |
|
|
| `modules/system/admin.py` | Added IntegrationProviderAdmin |
|
|
| `business/billing/models.py` | Added tokens_per_credit, credits_per_image, quality_tier to AIModelConfig |
|
|
| `business/billing/services/credit_service.py` | Added image/model-based credit calculation |
|
|
| `ai/model_registry.py` | Removed constants fallback, added provider methods |
|
|
| `ai/ai_core.py` | Use ModelRegistry for API keys, removed constants fallback |
|
|
| `ai/constants.py` | Marked MODEL_RATES, IMAGE_MODEL_RATES as DEPRECATED |
|
|
| `ai/settings.py` | Use ModelRegistry for model validation |
|
|
| `ai/validators.py` | Removed constants fallback |
|
|
| `modules/system/integration_views.py` | Use ModelRegistry for cost calculation |
|
|
| `modules/billing/serializers.py` | Added new fields to AIModelConfigSerializer |
|
|
|
|
---
|
|
|
|
## Next Steps
|
|
|
|
1. ✅ **Django Admin Cleanup** - DONE
|
|
2. ⏳ **Simplify AI Settings** - Merge content + image settings into AccountSettings
|
|
3. ✅ **Create IntegrationProvider** - DONE (API keys now in dedicated model)
|
|
4. ✅ **AIModelConfig Enhancement** - DONE (tokens_per_credit, credits_per_image, quality_tier added)
|