feat: add linkedin and facebook feature flags, clean up dead code
- Register 'linkedin' FeatureGroup with routers.linkedin and api.linkedin_image_generation routers - Register 'facebook' FeatureGroup with api.facebook_writer.routers:facebook_router - Add 'linkedin' and 'facebook' profiles to PROFILE_GROUP_MAP - Remove dead imports of linkedin_router, linkedin_image_router, and facebook_router from app.py (router manager handles via CORE_ROUTER_REGISTRY) - Add LINKEDIN and FACEBOOK keys to frontend FEATURE_KEYS - Add route priorities for /linkedin-writer and /facebook-writer - Change route gates from feature='social' to feature='linkedin' and feature='facebook' respectively
This commit is contained in:
@@ -62,6 +62,17 @@ FEATURE_GROUPS: Dict[str, FeatureGroup] = {
|
|||||||
features=("backlinking",),
|
features=("backlinking",),
|
||||||
routers=("routers.backlink_outreach:router",),
|
routers=("routers.backlink_outreach:router",),
|
||||||
),
|
),
|
||||||
|
"linkedin": FeatureGroup(
|
||||||
|
features=("linkedin",),
|
||||||
|
routers=(
|
||||||
|
"routers.linkedin:router",
|
||||||
|
"api.linkedin_image_generation:router",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"facebook": FeatureGroup(
|
||||||
|
features=("facebook",),
|
||||||
|
routers=("api.facebook_writer.routers:facebook_router",),
|
||||||
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -72,5 +83,7 @@ PROFILE_GROUP_MAP: Dict[str, Tuple[str, ...]] = {
|
|||||||
"youtube": ("core", "youtube"),
|
"youtube": ("core", "youtube"),
|
||||||
"blog_writer": ("core", "blog_writer"),
|
"blog_writer": ("core", "blog_writer"),
|
||||||
"backlinking": ("core", "backlinking"),
|
"backlinking": ("core", "backlinking"),
|
||||||
|
"linkedin": ("core", "linkedin"),
|
||||||
|
"facebook": ("core", "facebook"),
|
||||||
"planning": ("core", "content_planning"),
|
"planning": ("core", "content_planning"),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -126,12 +126,8 @@ seo_tools_router = None
|
|||||||
if _is_full_mode():
|
if _is_full_mode():
|
||||||
from routers.seo_tools import router as seo_tools_router
|
from routers.seo_tools import router as seo_tools_router
|
||||||
|
|
||||||
# Skip Facebook Writer, LinkedIn, and other non-essential routes in feature-only modes
|
# Skip heavy services in feature-only modes (PersonaAnalysisService, etc.)
|
||||||
# Also skip other heavy services that trigger PersonaAnalysisService initialization
|
|
||||||
if _is_full_mode():
|
if _is_full_mode():
|
||||||
from api.facebook_writer.routers import facebook_router
|
|
||||||
from routers.linkedin import router as linkedin_router
|
|
||||||
from api.linkedin_image_generation import router as linkedin_image_router
|
|
||||||
from api.brainstorm import router as brainstorm_router
|
from api.brainstorm import router as brainstorm_router
|
||||||
from api.images import router as images_router
|
from api.images import router as images_router
|
||||||
from api.assets_serving import router as assets_serving_router
|
from api.assets_serving import router as assets_serving_router
|
||||||
|
|||||||
@@ -195,8 +195,8 @@ const App: React.FC = () => {
|
|||||||
<Route path="/seo-dashboard" element={<ProtectedRoute><FeatureRoute feature="seo"><SEODashboard /></FeatureRoute></ProtectedRoute>} />
|
<Route path="/seo-dashboard" element={<ProtectedRoute><FeatureRoute feature="seo"><SEODashboard /></FeatureRoute></ProtectedRoute>} />
|
||||||
<Route path="/backlink-outreach" element={<ProtectedRoute><FeatureRoute feature="backlinking"><BacklinkOutreachDashboard /></FeatureRoute></ProtectedRoute>} />
|
<Route path="/backlink-outreach" element={<ProtectedRoute><FeatureRoute feature="backlinking"><BacklinkOutreachDashboard /></FeatureRoute></ProtectedRoute>} />
|
||||||
<Route path="/content-planning" element={<ProtectedRoute><FeatureRoute feature="content-planning"><ContentPlanningDashboard /></FeatureRoute></ProtectedRoute>} />
|
<Route path="/content-planning" element={<ProtectedRoute><FeatureRoute feature="content-planning"><ContentPlanningDashboard /></FeatureRoute></ProtectedRoute>} />
|
||||||
<Route path="/facebook-writer" element={<ProtectedRoute><FeatureRoute feature="social"><FacebookWriter /></FeatureRoute></ProtectedRoute>} />
|
<Route path="/facebook-writer" element={<ProtectedRoute><FeatureRoute feature="facebook"><FacebookWriter /></FeatureRoute></ProtectedRoute>} />
|
||||||
<Route path="/linkedin-writer" element={<ProtectedRoute><FeatureRoute feature="social"><LinkedInWriter /></FeatureRoute></ProtectedRoute>} />
|
<Route path="/linkedin-writer" element={<ProtectedRoute><FeatureRoute feature="linkedin"><LinkedInWriter /></FeatureRoute></ProtectedRoute>} />
|
||||||
<Route path="/blog-writer" element={<ProtectedRoute><FeatureRoute feature="blog_writer"><BlogWriter /></FeatureRoute></ProtectedRoute>} />
|
<Route path="/blog-writer" element={<ProtectedRoute><FeatureRoute feature="blog_writer"><BlogWriter /></FeatureRoute></ProtectedRoute>} />
|
||||||
<Route path="/story-writer" element={<ProtectedRoute><FeatureRoute feature="story"><StoryWriter /></FeatureRoute></ProtectedRoute>} />
|
<Route path="/story-writer" element={<ProtectedRoute><FeatureRoute feature="story"><StoryWriter /></FeatureRoute></ProtectedRoute>} />
|
||||||
<Route path="/story-projects" element={<ProtectedRoute><FeatureRoute feature="story"><StoryProjectList /></FeatureRoute></ProtectedRoute>} />
|
<Route path="/story-projects" element={<ProtectedRoute><FeatureRoute feature="story"><StoryProjectList /></FeatureRoute></ProtectedRoute>} />
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ export const FEATURE_KEYS = {
|
|||||||
SEO: 'seo',
|
SEO: 'seo',
|
||||||
CONTENT_PLANNING: 'content-planning',
|
CONTENT_PLANNING: 'content-planning',
|
||||||
SOCIAL: 'social',
|
SOCIAL: 'social',
|
||||||
|
LINKEDIN: 'linkedin',
|
||||||
|
FACEBOOK: 'facebook',
|
||||||
BLOG_WRITER: 'blog_writer',
|
BLOG_WRITER: 'blog_writer',
|
||||||
STORY: 'story',
|
STORY: 'story',
|
||||||
YOUTUBE: 'youtube',
|
YOUTUBE: 'youtube',
|
||||||
@@ -126,6 +128,8 @@ const FEATURE_ROUTE_PRIORITY: [string, string][] = [
|
|||||||
['podcast', '/podcast-maker'],
|
['podcast', '/podcast-maker'],
|
||||||
['blog_writer', '/blog-writer'],
|
['blog_writer', '/blog-writer'],
|
||||||
['backlinking', '/backlink-outreach'],
|
['backlinking', '/backlink-outreach'],
|
||||||
|
['linkedin', '/linkedin-writer'],
|
||||||
|
['facebook', '/facebook-writer'],
|
||||||
['story', '/story-writer'],
|
['story', '/story-writer'],
|
||||||
['image', '/image-studio'],
|
['image', '/image-studio'],
|
||||||
['video', '/video-studio'],
|
['video', '/video-studio'],
|
||||||
|
|||||||
Reference in New Issue
Block a user