# Backend Requirements ## Overview This document outlines the technical requirements for the Flask API backend of the Lin application. ## Python Dependencies The backend will require the following Python packages: ### Core Dependencies - Flask: Web framework - Flask-CORS: Cross-Origin Resource Sharing support - Flask-JWT-Extended: JWT token management - Flask-SQLAlchemy: ORM for database interactions - Flask-Migrate: Database migration support - python-dotenv: Environment variable management - requests: HTTP library for API calls - requests-oauthlib: OAuth support - apscheduler: Task scheduling - supabase: Supabase client for database operations - pandas: Data manipulation - gradio-client: Hugging Face API client ### Development Dependencies - pytest: Testing framework - pytest-cov: Test coverage reporting - flake8: Code linting - black: Code formatting ## Environment Variables The backend will require the following environment variables: - SUPABASE_URL: Supabase project URL - SUPABASE_KEY: Supabase API key - CLIENT_ID: LinkedIn OAuth client ID - CLIENT_SECRET: LinkedIn OAuth client secret - REDIRECT_URL: LinkedIn OAuth redirect URL - HUGGING_KEY: Hugging Face API key - JWT_SECRET_KEY: Secret key for JWT token generation - DATABASE_URL: Database connection string (if using PostgreSQL directly) ## Database Requirements The application will use Supabase as the primary database, which is based on PostgreSQL. The following tables will be needed: ### Users - id (UUID) - email (string) - password_hash (string) - created_at (timestamp) - email_confirmed_at (timestamp) ### Social_network - id (UUID) - user_id (UUID, foreign key to Users) - social_network (string) - account_name (string) - token (string) - sub (string) - given_name (string) - family_name (string) - picture (string) - created_at (timestamp) ### Source - id (UUID) - user_id (UUID, foreign key to Users) - source (string) - category (string) - last_update (timestamp) - created_at (timestamp) ### Post_content - id (UUID) - social_account_id (UUID, foreign key to Social_network) - text_content (text) - image_content_url (bytea or URL) - is_published (boolean) - sched (UUID) - created_at (timestamp) - scheduled_at (timestamp) ### Scheduling - id (UUID) - social_account_id (UUID, foreign key to Social_network) - schedule_time (string) - adjusted_time (string) - created_at (timestamp) ## API Requirements ### Authentication - JWT-based authentication - Password hashing with bcrypt - Email confirmation flow - Password reset functionality ### Security - CORS policy configuration - Input validation and sanitization - Rate limiting for API endpoints - Secure headers implementation ### Error Handling - Consistent error response format - Proper HTTP status codes - Logging of errors for debugging - Validation error handling ## Integration Requirements ### LinkedIn API - OAuth2 authentication flow - Post creation and publishing - User profile information retrieval - Image upload support ### Hugging Face API - Content generation using Gradio client - Error handling for API failures - Timeout handling for long-running requests ### Scheduling System - APScheduler for task management - Conflict resolution for overlapping schedules - Automatic adjustment of schedule times - Persistent storage of scheduled tasks ## Deployment Requirements ### Server - Python 3.8+ - WSGI server (Gunicorn recommended) - Reverse proxy (Nginx recommended) - SSL certificate for HTTPS ### Scalability - Stateless design for horizontal scaling - Database connection pooling - Caching strategy for frequently accessed data - Background task processing for long-running operations ### Monitoring - Logging configuration - Health check endpoints - Performance monitoring - Error tracking integration ## Testing Requirements ### Unit Tests - Model validation tests - Service layer tests - Utility function tests ### Integration Tests - API endpoint tests - Database integration tests - External API integration tests ### Test Coverage - Minimum 80% code coverage - Testing of edge cases - Mocking of external dependencies - Continuous integration setup