Add Linker and Optimizer modules with API integration and frontend components

- Added Linker and Optimizer apps to `INSTALLED_APPS` in `settings.py`.
- Configured API endpoints for Linker and Optimizer in `urls.py`.
- Implemented `OptimizeContentFunction` for content optimization in the AI module.
- Created prompts for content optimization and site structure generation.
- Updated `OptimizerService` to utilize the new AI function for content optimization.
- Developed frontend components including dashboards and content lists for Linker and Optimizer.
- Integrated new routes and sidebar navigation for Linker and Optimizer in the frontend.
- Enhanced content management with source and sync status filters in the Writer module.
- Comprehensive test coverage added for new features and components.
This commit is contained in:
alorig
2025-11-18 00:41:00 +05:00
parent 4b9e1a49a9
commit f7115190dc
60 changed files with 4932 additions and 80 deletions

View File

@@ -0,0 +1,64 @@
import React from 'react';
import { Link2, CheckCircle, XCircle } from 'lucide-react';
interface Link {
anchor_text: string;
target_content_id: number;
target_url?: string;
}
interface LinkResultsProps {
contentId: number;
links: Link[];
linksAdded: number;
linkerVersion: number;
}
export const LinkResults: React.FC<LinkResultsProps> = ({
contentId,
links,
linksAdded,
linkerVersion,
}) => {
return (
<div className="bg-white dark:bg-gray-800 rounded-lg shadow p-6">
<div className="flex items-center justify-between mb-4">
<h3 className="text-lg font-semibold text-gray-900 dark:text-white">Linking Results</h3>
<div className="flex items-center gap-2">
<Link2 className="w-5 h-5 text-blue-500" />
<span className="text-sm text-gray-600 dark:text-gray-400">Version {linkerVersion}</span>
</div>
</div>
{linksAdded > 0 ? (
<div className="space-y-4">
<div className="flex items-center gap-2 text-green-600 dark:text-green-400">
<CheckCircle className="w-5 h-5" />
<span className="font-medium">{linksAdded} link{linksAdded !== 1 ? 's' : ''} added</span>
</div>
<div className="border-t border-gray-200 dark:border-gray-700 pt-4">
<h4 className="text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">Added Links:</h4>
<ul className="space-y-2">
{links.map((link, index) => (
<li key={index} className="flex items-center gap-2 text-sm">
<span className="text-gray-600 dark:text-gray-400">"{link.anchor_text}"</span>
<span className="text-gray-400"></span>
<span className="text-blue-600 dark:text-blue-400">
Content #{link.target_content_id}
</span>
</li>
))}
</ul>
</div>
</div>
) : (
<div className="flex items-center gap-2 text-gray-500 dark:text-gray-400">
<XCircle className="w-5 h-5" />
<span>No links were added to this content.</span>
</div>
)}
</div>
);
};