| model_config, site, statistic) | model_config, site, statistic) | ||||
| # Import auth controllers | # Import auth controllers | ||||
| from .auth import activate, data_source_oauth, login, oauth | from .auth import activate, data_source_oauth, login, oauth | ||||
| from .billing import billing | |||||
| # Import datasets controllers | # Import datasets controllers | ||||
| from .datasets import data_source, datasets, datasets_document, datasets_segments, file, hit_testing | from .datasets import data_source, datasets, datasets_document, datasets_segments, file, hit_testing | ||||
| # Import explore controllers | # Import explore controllers | ||||
| from .explore import audio, completion, conversation, installed_app, message, parameter, recommended_app, saved_message | from .explore import audio, completion, conversation, installed_app, message, parameter, recommended_app, saved_message | ||||
| # Import workspace controllers | # Import workspace controllers | ||||
| from .workspace import account, members, model_providers, models, tool_providers, workspace | from .workspace import account, members, model_providers, models, tool_providers, workspace | ||||
| # Import billing controllers | |||||
| from .billing import billing | |||||
| # Import operation controllers | |||||
| from .operation import operation |
| from flask_login import current_user | |||||
| from flask_restful import Resource, reqparse | |||||
| from controllers.console import api | |||||
| from controllers.console.setup import setup_required | |||||
| from controllers.console.wraps import account_initialization_required, only_edition_cloud | |||||
| from libs.login import login_required | |||||
| from services.operation_service import OperationService | |||||
| class TenantUtm(Resource): | |||||
| @setup_required | |||||
| @login_required | |||||
| @account_initialization_required | |||||
| @only_edition_cloud | |||||
| def post(self): | |||||
| parser = reqparse.RequestParser() | |||||
| parser.add_argument('utm_source', type=str, required=True) | |||||
| parser.add_argument('utm_medium', type=str, required=True) | |||||
| parser.add_argument('utm_campaign', type=str, required=False, default='') | |||||
| parser.add_argument('utm_content', type=str, required=False, default='') | |||||
| parser.add_argument('utm_term', type=str, required=False, default='') | |||||
| args = parser.parse_args() | |||||
| return OperationService.record_utm(current_user.current_tenant_id, args) | |||||
| api.add_resource(TenantUtm, '/operation/utm') |
| import os | |||||
| import requests | |||||
| class OperationService: | |||||
| base_url = os.environ.get('BILLING_API_URL', 'BILLING_API_URL') | |||||
| secret_key = os.environ.get('BILLING_API_SECRET_KEY', 'BILLING_API_SECRET_KEY') | |||||
| @classmethod | |||||
| def _send_request(cls, method, endpoint, json=None, params=None): | |||||
| headers = { | |||||
| "Content-Type": "application/json", | |||||
| "Billing-Api-Secret-Key": cls.secret_key | |||||
| } | |||||
| url = f"{cls.base_url}{endpoint}" | |||||
| response = requests.request(method, url, json=json, params=params, headers=headers) | |||||
| return response.json() | |||||
| @classmethod | |||||
| def record_utm(cls, tenant_id, args): | |||||
| params = { | |||||
| 'tenant_id': tenant_id, | |||||
| 'utm_source': args['utm_source'], | |||||
| 'utm_medium': args['utm_medium'], | |||||
| 'utm_campaign': args['utm_campaign'], | |||||
| 'utm_content': args['utm_content'], | |||||
| 'utm_term': args['utm_term'] | |||||
| } | |||||
| return cls._send_request('POST', '/tenant_utms', params=params) |