billing_service.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import os
  2. import requests
  3. from services.dataset_service import DatasetService
  4. class BillingService:
  5. base_url = os.environ.get('BILLING_API_URL', 'BILLING_API_URL')
  6. secret_key = os.environ.get('BILLING_API_SECRET_KEY', 'BILLING_API_SECRET_KEY')
  7. @classmethod
  8. def get_info(cls, tenant_id: str):
  9. params = {'tenant_id': tenant_id}
  10. billing_info = cls._send_request('GET', '/info', params=params)
  11. vector_size = DatasetService.get_tenant_datasets_usage(tenant_id) / 1024
  12. billing_info['vector_space']['size'] = int(vector_size)
  13. return billing_info
  14. @classmethod
  15. def get_subscription(cls, plan: str, interval: str, prefilled_email: str = '', user_name: str = '', tenant_id: str = ''):
  16. params = {
  17. 'plan': plan,
  18. 'interval': interval,
  19. 'prefilled_email': prefilled_email,
  20. 'user_name': user_name,
  21. 'tenant_id': tenant_id
  22. }
  23. return cls._send_request('GET', '/subscription', params=params)
  24. @classmethod
  25. def get_invoices(cls, prefilled_email: str = ''):
  26. params = {'prefilled_email': prefilled_email}
  27. return cls._send_request('GET', '/invoices', params=params)
  28. @classmethod
  29. def _send_request(cls, method, endpoint, json=None, params=None):
  30. headers = {
  31. "Content-Type": "application/json",
  32. "Billing-Api-Secret-Key": cls.secret_key
  33. }
  34. url = f"{cls.base_url}{endpoint}"
  35. response = requests.request(method, url, json=json, params=params, headers=headers)
  36. return response.json()
  37. @classmethod
  38. def process_event(cls, event: dict):
  39. json = {
  40. "content": event,
  41. }
  42. return cls._send_request('POST', '/webhook/stripe', json=json)