File size: 2,969 Bytes
bab4aa8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import httpx
from .http_client import http_client

class SupabaseQuerier:
    def __init__(self, url: str = None, key: str = None):
        self.url = url or os.environ.get("SUPABASE_URL", "")
        self.key = key or os.environ.get("SUPABASE_ANON_KEY", "")

    async def get_product_by_slug(self, slug: str) -> dict | None:
        if not self.url or not self.key:
            print("[SupabaseQuerier] Warning: Supabase credentials missing.")
            return None

        base_url = self.url.rstrip("/")
        query_url = f"{base_url}/rest/v1/inventory?slug=eq.{slug}&select=sku,slug,name,price_rupees,staging_dirs"
        
        headers = {
            "apikey": self.key,
            "Authorization": f"Bearer {self.key}"
        }

        client = http_client if http_client is not None else httpx.AsyncClient()
        close_client = http_client is None
        try:
            response = await client.get(query_url, headers=headers, timeout=5.0)
            if response.status_code == 200:
                data = response.json()
                if isinstance(data, list) and len(data) > 0:
                    return data[0]
            else:
                print(f"[SupabaseQuerier] Query failed: {response.status_code} - {response.text}")
        except Exception as e:
            print(f"[SupabaseQuerier] Error querying Supabase: {e}")
        finally:
            if close_client:
                await client.aclose()
        return None

    async def get_order_history(self, user_id: str, days: int = 90) -> list:
        if not self.url or not self.key:
            print("[SupabaseQuerier] Warning: Supabase credentials missing.")
            return []

        from datetime import datetime, timedelta
        cutoff_date = (datetime.utcnow() - timedelta(days=days)).isoformat()

        base_url = self.url.rstrip("/")
        query_url = f"{base_url}/rest/v1/user_carts?user_id=eq.{user_id}&status=eq.processed&created_at=gte.{cutoff_date}&select=items,created_at"
        
        headers = {
            "apikey": self.key,
            "Authorization": f"Bearer {self.key}"
        }

        client = http_client if http_client is not None else httpx.AsyncClient()
        close_client = http_client is None
        try:
            print(f"DEBUG: Query URL: {query_url}")
            response = await client.get(query_url, headers=headers, timeout=5.0)
            print(f"DEBUG: Status Code: {response.status_code}")
            if response.status_code == 200:
                print(f"DEBUG: Response length: {len(response.json())}")
                return response.json()
            else:
                print(f"[SupabaseQuerier] Order history query failed: {response.status_code} - {response.text}")
        except Exception as e:
            print(f"[SupabaseQuerier] Error querying Supabase order history: {e}")
        finally:
            if close_client:
                await client.aclose()
        return []