O2Sound_ver2_final/backend/docs/API_Quick_Reference.md

8.0 KiB

O2Sound API Quick Reference

Authentication Endpoints

Register

curl -X POST http://localhost:8000/auth/join \
  -H "Content-Type: application/json" \
  -d '{
    "user_id": "john_doe",
    "name": "John Doe",
    "password": "SecurePass123!",
    "email": "john@example.com",
    "phone_number": "010-1234-5678"
  }'

Login

curl -X POST http://localhost:8000/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "user_id": "john_doe",
    "password": "SecurePass123!"
  }'

User Management Endpoints

Get User Items

curl -X POST http://localhost:8000/user/items \
  -H "Content-Type: application/json" \
  -H "Cookie: session=YOUR_SESSION_COOKIE" \
  -d '{
    "id": "123e4567-e89b-12d3-a456-426614174000"
  }'

Update Item

curl -X PUT http://localhost:8000/user/item/update \
  -H "Content-Type: application/json" \
  -H "Cookie: session=YOUR_SESSION_COOKIE" \
  -d '{
    "id": "123e4567-e89b-12d3-a456-426614174000",
    "item_id": "550e8400-e29b-41d4-a716-446655440000",
    "name": "Updated Business Name",
    "address": "New Address",
    "url": "https://newurl.com",
    "phone_number": "02-9876-5432"
  }'

Delete Item

curl -X DELETE http://localhost:8000/user/item/delete \
  -H "Content-Type: application/json" \
  -H "Cookie: session=YOUR_SESSION_COOKIE" \
  -d '{
    "id": "123e4567-e89b-12d3-a456-426614174000",
    "item_id": "550e8400-e29b-41d4-a716-446655440000"
  }'

Video Management Endpoints

Get User Videos

curl -X POST http://localhost:8000/user/videos \
  -H "Content-Type: application/json" \
  -H "Cookie: session=YOUR_SESSION_COOKIE" \
  -d '{
    "id": "123e4567-e89b-12d3-a456-426614174000"
  }'

Delete Video

curl -X DELETE http://localhost:8000/user/video/delete \
  -H "Content-Type: application/json" \
  -H "Cookie: session=YOUR_SESSION_COOKIE" \
  -d '{
    "user_id": "john_doe",
    "video_id": "660e8400-e29b-41d4-a716-446655440000"
  }'

Stream Video

# Direct browser access or video player
http://localhost:8000/user/video/my_video_2024.mp4

# Using curl (saves to file)
curl -o downloaded_video.mp4 \
  http://localhost:8000/user/video/my_video_2024.mp4

Profile Management Endpoints

Get Profile

curl -X POST http://localhost:8000/user/profile \
  -H "Content-Type: application/json" \
  -H "Cookie: session=YOUR_SESSION_COOKIE" \
  -d '{
    "id": "123e4567-e89b-12d3-a456-426614174000"
  }'

Update Profile

curl -X PUT http://localhost:8000/user/profile/update \
  -H "Content-Type: application/json" \
  -H "Cookie: session=YOUR_SESSION_COOKIE" \
  -d '{
    "id": "123e4567-e89b-12d3-a456-426614174000",
    "name": "John Doe Updated",
    "email": "john.updated@example.com",
    "phone_number": "010-9999-8888"
  }'

Movie Maker Endpoints

Start Video Generation Workflow

curl -X POST http://localhost:8000/moviemaker/start-workflow \
  -H "Content-Type: application/json" \
  -H "Cookie: session=YOUR_SESSION_COOKIE" \
  -d '{
    "url": "https://example-business.com"
  }'

Check Progress

curl -X POST http://localhost:8000/moviemaker/progress \
  -H "Content-Type: application/json" \
  -H "Cookie: session=YOUR_SESSION_COOKIE" \
  -d '{
    "task_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
  }'

Google OAuth Flow

1. Initiate Login

# Browser redirect
http://localhost:8000/social/google/login?return_url=http://localhost:3300/dashboard

2. After Google Authentication

# Google redirects to:
http://localhost:8000/social/google/callback?code=AUTH_CODE&state=STATE_VALUE

3. Get Token Info

curl -X GET http://localhost:8000/social/google/token/TEMP_TOKEN_ID

Health Check

# Basic health check
curl http://localhost:8000/health

# Service info
curl http://localhost:8000/

WebSocket Connection (if implemented)

// JavaScript WebSocket example for real-time progress
const ws = new WebSocket('ws://localhost:8000/ws/progress/{task_id}');

ws.onmessage = (event) => {
  const progress = JSON.parse(event.data);
  console.log('Progress update:', progress);
};

Python Client Example

import requests
import json

class O2SoundClient:
    def __init__(self, base_url="http://localhost:8000"):
        self.base_url = base_url
        self.session = requests.Session()
    
    def login(self, user_id, password):
        response = self.session.post(
            f"{self.base_url}/auth/login",
            json={"user_id": user_id, "password": password}
        )
        return response.json()
    
    def start_video_generation(self, url):
        response = self.session.post(
            f"{self.base_url}/moviemaker/start-workflow",
            json={"url": url}
        )
        return response.json()
    
    def check_progress(self, task_id):
        response = self.session.post(
            f"{self.base_url}/moviemaker/progress",
            json={"task_id": task_id}
        )
        return response.json()

# Usage
client = O2SoundClient()
client.login("john_doe", "SecurePass123!")
result = client.start_video_generation("https://example.com")
task_id = result["task_id"]

# Check progress
import time
while True:
    progress = client.check_progress(task_id)
    print(progress)
    if progress["progress"]["combined"]:
        break
    time.sleep(5)

JavaScript/TypeScript Client Example

interface LoginRequest {
  user_id: string;
  password: string;
}

interface WorkflowRequest {
  url: string;
}

interface ProgressRequest {
  task_id: string;
}

class O2SoundAPI {
  private baseURL: string;
  
  constructor(baseURL: string = 'http://localhost:8000') {
    this.baseURL = baseURL;
  }
  
  async login(credentials: LoginRequest) {
    const response = await fetch(`${this.baseURL}/auth/login`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      credentials: 'include',
      body: JSON.stringify(credentials)
    });
    return response.json();
  }
  
  async startWorkflow(data: WorkflowRequest) {
    const response = await fetch(`${this.baseURL}/moviemaker/start-workflow`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      credentials: 'include',
      body: JSON.stringify(data)
    });
    return response.json();
  }
  
  async checkProgress(data: ProgressRequest) {
    const response = await fetch(`${this.baseURL}/moviemaker/progress`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      credentials: 'include',
      body: JSON.stringify(data)
    });
    return response.json();
  }
}

// Usage
const api = new O2SoundAPI();

async function generateVideo(url: string) {
  // Login first
  await api.login({
    user_id: 'john_doe',
    password: 'SecurePass123!'
  });
  
  // Start workflow
  const { task_id } = await api.startWorkflow({ url });
  
  // Poll for progress
  const checkStatus = async () => {
    const { progress } = await api.checkProgress({ task_id });
    
    if (progress.combined) {
      console.log('Video generation complete!');
    } else {
      console.log('Progress:', progress);
      setTimeout(checkStatus, 5000);
    }
  };
  
  checkStatus();
}

Environment Variables

# .env.local example
PROJECT_NAME=O2Sound
API_V1_STR=/api/v1
SESSION_SECRET_KEY=your-secret-key-here
DATABASE_URL=postgresql://user:pass@localhost/o2sound
REDIS_URL=redis://localhost:6379
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
GOOGLE_REDIRECT_URI=http://localhost:8000/social/google/callback

Common Response Formats

Success Response

{
  "status": "success",
  "data": {
    // Response data here
  }
}

Error Response

{
  "status": "error",
  "error_code": "ERROR_CODE",
  "error_message": "Human readable error message",
  "details": {
    // Additional error details if available
  }
}

Pagination Response (if implemented)

{
  "total_count": 100,
  "page": 1,
  "page_size": 20,
  "total_pages": 5,
  "items": [
    // Array of items
  ]
}