feat: implement Instagram clone SocialPhoto API
- FastAPI backend with SQLite database - JWT authentication (register, login) - User profiles with follow/unfollow - Posts with image upload and likes/dislikes - Comments with likes - Global and personalized feed - Comprehensive pytest test suite (37 tests) TASK-ID: 758f4029-702
This commit is contained in:
151
README.md
151
README.md
@@ -1,2 +1,151 @@
|
||||
# instagram-clone
|
||||
# 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
|
||||
|
||||
Reference in New Issue
Block a user