Description
The api/admin.py file contains extensive direct database queries, violating the layered architecture. Almost every endpoint executes raw SQL via db.execute() instead of delegating to services/repositories.
Steps to Reproduce
- Open
backend/api/admin.py
- Search for
db.execute or await db.execute
- Count occurrences: 30+ direct DB calls
Expected Behavior
API layer should only:
- Parse HTTP requests
- Call services for business logic
- Return HTTP responses
All database queries should go through Service → Repository layers.
Actual Behavior
API endpoints directly execute database queries:
- Lines 89-111: Query profiles, count interests
- Lines 268-273, 345-350: Count recommendations
- Lines 335-336: Add activity logs
- Lines 434-520: Analytics queries
- Lines 536-808: Distribution/growth queries
- Lines 829-943: Dashboard insights
Root Cause
The admin feature was built quickly without following the established layered architecture pattern used elsewhere (e.g., api/profiles.py → ProfileService → UserProfileRepository).
Possible Solutions
-
Option A: Create AdminService + AnalyticsRepository
- Create
services/admin_service.py for user management logic
- Create
repositories/analytics_repository.py for analytics queries
- Refactor all endpoints to use these layers
-
Option B: Extend Existing Repositories
- Add analytics methods to
UserRepository
- Add methods to
RecommendationRepository
- Create minimal
AdminService for orchestration
-
Option C: Create AnalyticsService Only
- Create
services/analytics_service.py that encapsulates queries
- Accept that some admin endpoints are thin wrappers
- Focus on DRY principle rather than strict layering
Description
The
api/admin.pyfile contains extensive direct database queries, violating the layered architecture. Almost every endpoint executes raw SQL viadb.execute()instead of delegating to services/repositories.Steps to Reproduce
backend/api/admin.pydb.executeorawait db.executeExpected Behavior
API layer should only:
All database queries should go through Service → Repository layers.
Actual Behavior
API endpoints directly execute database queries:
Root Cause
The admin feature was built quickly without following the established layered architecture pattern used elsewhere (e.g.,
api/profiles.py→ProfileService→UserProfileRepository).Possible Solutions
Option A: Create AdminService + AnalyticsRepository
services/admin_service.pyfor user management logicrepositories/analytics_repository.pyfor analytics queriesOption B: Extend Existing Repositories
UserRepositoryRecommendationRepositoryAdminServicefor orchestrationOption C: Create AnalyticsService Only
services/analytics_service.pythat encapsulates queries