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:
ajaysi
2026-06-03 21:47:14 +05:30
committed by ي
parent 9a3d704c5c
commit 70542b32fc
4 changed files with 20 additions and 7 deletions

View File

@@ -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"),
} }

View File

@@ -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

View File

@@ -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>} />

View File

@@ -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'],