File size: 2,510 Bytes
47ce483
 
 
 
 
 
77370a4
 
 
47ce483
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70e30f8
47ce483
 
 
 
 
70e30f8
 
 
 
 
 
 
 
 
 
 
 
 
 
47ce483
70e30f8
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from typing import Dict
import uuid
from datetime import datetime

app = FastAPI()

# Enable CORS for React Native development
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_methods=["*"],
    allow_headers=["*"],
)

# In-memory "database" (replace with real DB in production)
jobs_db: Dict[str, Dict] = {}

class PostRequest(BaseModel):
    query: str
    topic: str
    date: str  # Format: "DD-MM-YYYY to DD-MM-YYYY"

@app.post("/index")
async def create_job(request: PostRequest):
    """Receive query/topic/date and return job ID"""
    job_id = str(uuid.uuid4())
    
    # Store the job (simulating background processing)
    jobs_db[job_id] = {
        "status": "processing",
        "request": request.dict(),
        "created_at": datetime.now().isoformat(),
        "result": None
    }
    
    # Simulate processing completion after 5 seconds
    # In real apps, use Celery/BackgroundTasks
    jobs_db[job_id]["result"] = {
        "query": request.query,
        "topic": request.topic,
        "date_interval": request.date,
        "processed_data": f"Analysis result for {request.query} ({request.topic})"
    }
    jobs_db[job_id]["status"] = "completed"
    
    return {"status": "success", "id": job_id}

@app.get("/loading")
async def get_results(id: str):
    """Check job status with simulated processing delay"""
    if id not in jobs_db:
        raise HTTPException(status_code=404, detail="Job not found")
    
    job = jobs_db[id]
    
    # Simulate variable processing time (5-25 seconds)
    if job["status"] == "processing":
        elapsed = (datetime.now() - datetime.fromisoformat(job["created_at"])).seconds
        if elapsed < 5:  # Minimum processing time
            await asyncio.sleep(2)  # Artificial delay
            return {"status": "processing"}
        
        # Mark as completed after random time (for demo)
        if elapsed > 15 or random.random() > 0.7:  # 30% chance after 15s
            job["status"] = "completed"
            job["result"] = {
                "processed_data": f"Result for {job['request']['query']}",
                "completion_time": elapsed
            }
    
    if job["status"] == "completed":
        return {
            "status": "completed",
            "result": job["result"],
            "request": job["request"]
        }
    
    return {"status": "processing"}