# SocialPhoto - Instagram Clone A simple Instagram clone API built with FastAPI and SQLite. ## Quick Start ### 1. Install dependencies ```bash pip install -r requirements.txt ``` ### 2. Run the server ```bash cd app uvicorn main:app --reload --host 0.0.0.0 --port 8000 ``` Or from the root directory: ```bash uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 ``` ### 3. Access API docs Open your browser to: http://localhost:8000/docs ## API Endpoints ### Authentication ```bash # Register curl -X POST http://localhost:8000/auth/register \ -H "Content-Type: application/json" \ -d '{"username":"test","email":"test@test.com","password":"password123"}' # Login curl -X POST http://localhost:8000/auth/login \ -H "Content-Type: application/json" \ -d '{"username":"test","password":"password123"}' ``` ### Posts ```bash # Create post (requires auth token) curl -X POST http://localhost:8000/posts \ -H "Authorization: Bearer YOUR_TOKEN" \ -F "caption=My first post" \ -F "image=@photo.jpg" # Get all posts curl http://localhost:8000/posts # Get single post curl http://localhost:8000/posts/1 # Like a post curl -X POST http://localhost:8000/posts/1/like \ -H "Authorization: Bearer YOUR_TOKEN" # Delete post (owner only) curl -X DELETE http://localhost:8000/posts/1 \ -H "Authorization: Bearer YOUR_TOKEN" ``` ### Users ```bash # Get user profile curl http://localhost:8000/users/1 # Get user posts curl http://localhost:8000/users/1/posts # Get user stats curl http://localhost:8000/users/1/stats # Follow user curl -X POST http://localhost:8000/users/1/follow \ -H "Authorization: Bearer YOUR_TOKEN" # Unfollow user curl -X DELETE http://localhost:8000/users/1/follow \ -H "Authorization: Bearer YOUR_TOKEN" ``` ### Comments ```bash # Add comment curl -X POST http://localhost:8000/posts/1/comments \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"content":"Great post!"}' # Get comments curl http://localhost:8000/posts/1/comments # Delete comment (owner only) curl -X DELETE http://localhost:8000/comments/1 \ -H "Authorization: Bearer YOUR_TOKEN" ``` ### Feed ```bash # Get followed users feed (requires auth) curl http://localhost:8000/feed \ -H "Authorization: Bearer YOUR_TOKEN" # Get global feed curl http://localhost:8000/feed/global ``` ## Running Tests ```bash pytest tests/ -v ``` ## Project Structure ``` app/ ├── main.py # FastAPI application ├── database.py # SQLite database setup ├── models.py # Pydantic models ├── auth.py # JWT authentication └── routes/ ├── auth.py # Auth endpoints ├── users.py # User endpoints ├── posts.py # Post endpoints ├── comments.py # Comment endpoints └── feed.py # Feed endpoints ``` ## Tech Stack - **Framework**: FastAPI 0.109+ - **Database**: SQLite - **Auth**: JWT (python-jose) - **Password Hashing**: bcrypt - **Testing**: pytest ## License MIT