{"action":"created","comment":{"url":"https://api.github.com/repos/vkaracic/ecommerce/pulls/comments/46143903","id":46143903,"diff_hunk":"@@ -0,0 +1,273 @@\n+import dateutil.parser\n+import logging\n+from decimal import Decimal\n+\n+from django.core.exceptions import ValidationError\n+from django.db import transaction\n+from django.db.utils import IntegrityError\n+from django.utils.decorators import method_decorator\n+from oscar.core.loading import get_model\n+from rest_framework import status, generics\n+from rest_framework.permissions import IsAuthenticated, IsAdminUser\n+from rest_framework.response import Response\n+\n+from ecommerce.extensions.api import serializers, data as data_api\n+from ecommerce.extensions.api.constants import APIConstants as AC\n+from ecommerce.extensions.api.v2.views import NonDestroyableModelViewSet\n+from ecommerce.extensions.catalogue.utils import generate_sku, get_or_create_catalog\n+from ecommerce.extensions.checkout.mixins import EdxOrderPlacementMixin\n+from ecommerce.extensions.payment.processors.invoice import InvoicePayment\n+from ecommerce.extensions.voucher.utils import create_vouchers\n+\n+Basket = get_model('basket', 'Basket')\n+Catalog = get_model('catalogue', 'Catalog')\n+Client = get_model('core', 'Client')\n+CouponVouchers = get_model('voucher', 'CouponVouchers')\n+logger = logging.getLogger(__name__)\n+Order = get_model('order', 'Order')\n+Product = get_model('catalogue', 'Product')\n+ProductClass = get_model('catalogue', 'ProductClass')\n+StockRecord = get_model('partner', 'StockRecord')\n+\n+\n+class CouponOrderCreateView(generics.CreateAPIView, EdxOrderPlacementMixin, NonDestroyableModelViewSet):\n+    \"\"\"Endpoint for creating coupon orders.\n+\n+    Creates a new coupon product, adds to a basket and creates a\n+    new order from that basket.\n+    \"\"\"\n+    queryset = Product.objects.filter(\n+        product_class=ProductClass.objects.get(name='Coupon')\n+    )\n+    permission_classes = (IsAuthenticated, IsAdminUser)\n+    serializer_class = serializers.CouponSerializer\n+\n+    # Disable atomicity for the view. Otherwise, we'd be unable to commit to the database\n+    # until the request had concluded; Django will refuse to commit when an atomic() block\n+    # is active, since that would break atomicity. Without an order present in the database\n+    # at the time fulfillment is attempted, asynchronous order fulfillment tasks will fail.\n+    @method_decorator(transaction.non_atomic_requests)\n+    def dispatch(self, request, *args, **kwargs):\n+        return super(CouponOrderCreateView, self).dispatch(request, *args, **kwargs)\n+\n+    def create(self, request, *args, **kwargs):\n+        \"\"\"Adds coupon to the user's basket.\n+\n+        Expects request array to contain all the necessary data (listed out below).\n+        This information is then used to create a coupon product, add to a\n+        basket and create an order from it.\n+\n+        Arguments:\n+            request (HttpRequest): With parameters title, client_username,\n+            stock_record_ids, start_date, end_date, code, benefit_type,\n+            benefit_value, voucher_type, quantity and price in the body.\n+\n+        Returns:\n+            200 if the order was created successfully; the basket ID is included in the response\n+                body along with the order ID and payment information.\n+            401 if an unauthenticated request is denied permission to access the endpoint.\n+            429 if the client has made requests at a rate exceeding that allowed by the configured rate limit.\n+            500 if an error occurs when attempting to create a coupon.\n+        \"\"\"\n+        with transaction.atomic():\n+            title = request.data[AC.KEYS.TITLE]\n+            client_username = request.data[AC.KEYS.CLIENT_USERNAME]\n+            stock_record_ids = request.data[AC.KEYS.STOCK_RECORD_IDS]\n+            start_date = dateutil.parser.parse(request.data[AC.KEYS.START_DATE])\n+            end_date = dateutil.parser.parse(request.data[AC.KEYS.END_DATE])\n+            code = request.data[AC.KEYS.CODE]\n+            benefit_type = request.data[AC.KEYS.BENEFIT_TYPE]\n+            benefit_value = request.data[AC.KEYS.BENEFIT_VALUE]\n+            voucher_type = request.data[AC.KEYS.VOUCHER_TYPE]\n+            quantity = request.data[AC.KEYS.QUANTITY]\n+            price = request.data[AC.KEYS.PRICE]\n+            partner = request.site.siteconfiguration.partner\n+\n+            client, __ = Client.objects.get_or_create(username=client_username)\n+\n+            coupon_catalog = get_or_create_catalog(\n+                name='Coupon',\n+                partner_id=partner.id,\n+                stock_record_ids=stock_record_ids\n+            )\n+\n+            sku_data = {\n+                'catalog': coupon_catalog,\n+                'partner': partner\n+            }\n+\n+            voucher_data = {\n+                'title': title,\n+                'benefit_type': benefit_type,\n+                'benefit_value': benefit_value,\n+                'catalog': coupon_catalog,\n+                'end_date': end_date,\n+                'code': code,\n+                'quantity': quantity,\n+                'start_date': start_date,\n+                'voucher_type': voucher_type\n+            }\n+\n+            coupon_product = self.create_coupon_product(title, client, price, sku_data, voucher_data)\n+\n+            basket = self.add_product_to_basket(\n+                product=coupon_product,\n+                user=request.user,\n+                site=request.site\n+            )\n+\n+            response_data = self.create_order_for_invoice(basket)\n+\n+            return Response(response_data, status=status.HTTP_200_OK)\n+\n+    def create_coupon_product(self, title, client, price, sku_data, voucher_data):\n+        \"\"\"Creates a coupon product and a stock record for it.\n+\n+        Arguments:\n+            title (string): The name of the coupon.\n+            client (Client): The client for which the coupon is created.\n+            price (integer): The price of the coupon(s).\n+            sku_data (dict): Contains the partner and catalog needed for creating a SKU.\n+                - partner (User)\n+                - catalog (Catalog)\n+            voucher_data (dict): Contains data needed to create vouchers:\n+                - benefit_type (string)\n+                - benefit_value (integer)\n+                - catalog (Catalog)\n+                - end_date (Datetime)\n+                - code (string)\n+                - quantity (integer)\n+                - start_date (Datetime)\n+                - voucher_type (string)\n+\n+        Returns:\n+            A coupon product object.\n+        \"\"\"\n+\n+        product_class = ProductClass.objects.get(slug='coupon')\n+        coupon_product = Product()\n+        coupon_product.product_class = product_class\n+        coupon_product.title = title\n+        coupon_product.attr.client = client\n+\n+        # Product validation.\n+        try:\n+            coupon_product.clean()\n+        except ValidationError as ex:\n+            logger.exception(\n+                'Failed to create product for Coupon [%s]. Basket has been thawed.',\n+                coupon_product.title\n+            )\n+            raise ValidationError(ex)\n+\n+        coupon_product.save()\n+\n+        sku = generate_sku(\n+            product=coupon_product,\n+            partner=sku_data['partner'],\n+            catalog=sku_data['catalog']\n+        )\n+\n+        stock_record = StockRecord.objects.filter(\n+            partner=sku_data['partner'],\n+            partner_sku=sku\n+        )\n+        # If there exist a stock record with that partner and SKU\n+        # delete the already created coupon product (which has to be\n+        # created in order to generate the SKU) in order to not mess up\n+        # the serializer stock record matching query. After that use the\n+        # product within the stock record.\n+        # If there isn't a stock record with the matching parther and SKU\n+        # create a new one and assign it all the necessary information.\n+        if stock_record:\n+            coupon_product.delete()\n+            coupon_product = stock_record[0].product","path":"ecommerce/extensions/api/v2/views/coupons.py","position":null,"original_position":184,"commit_id":"39d81564ad22a858a33ff343615ac58a43f3d40b","original_commit_id":"30d8af81a82f513fa192918aa1bc06d7ee09c3d6","user":{"login":"mjfrey","id":2236013,"avatar_url":"https://avatars.githubusercontent.com/u/2236013?v=3","gravatar_id":"","url":"https://api.github.com/users/mjfrey","html_url":"https://github.com/mjfrey","followers_url":"https://api.github.com/users/mjfrey/followers","following_url":"https://api.github.com/users/mjfrey/following{/other_user}","gists_url":"https://api.github.com/users/mjfrey/gists{/gist_id}","starred_url":"https://api.github.com/users/mjfrey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mjfrey/subscriptions","organizations_url":"https://api.github.com/users/mjfrey/orgs","repos_url":"https://api.github.com/users/mjfrey/repos","events_url":"https://api.github.com/users/mjfrey/events{/privacy}","received_events_url":"https://api.github.com/users/mjfrey/received_events","type":"User","site_admin":false},"body":"If the price is different, create a new stock record, if it is the same re-use the existing one.","created_at":"2015-11-30T13:47:55Z","updated_at":"2015-11-30T13:47:55Z","html_url":"https://github.com/vkaracic/ecommerce/pull/30#discussion_r46143903","pull_request_url":"https://api.github.com/repos/vkaracic/ecommerce/pulls/30","_links":{"self":{"href":"https://api.github.com/repos/vkaracic/ecommerce/pulls/comments/46143903"},"html":{"href":"https://github.com/vkaracic/ecommerce/pull/30#discussion_r46143903"},"pull_request":{"href":"https://api.github.com/repos/vkaracic/ecommerce/pulls/30"}}},"pull_request":{"url":"https://api.github.com/repos/vkaracic/ecommerce/pulls/30","id":51664178,"html_url":"https://github.com/vkaracic/ecommerce/pull/30","diff_url":"https://github.com/vkaracic/ecommerce/pull/30.diff","patch_url":"https://github.com/vkaracic/ecommerce/pull/30.patch","issue_url":"https://api.github.com/repos/vkaracic/ecommerce/issues/30","number":30,"state":"open","locked":false,"title":"[SOL-1354] Implement new_enrollment_code endpoint","user":{"login":"vkaracic","id":2808092,"avatar_url":"https://avatars.githubusercontent.com/u/2808092?v=3","gravatar_id":"","url":"https://api.github.com/users/vkaracic","html_url":"https://github.com/vkaracic","followers_url":"https://api.github.com/users/vkaracic/followers","following_url":"https://api.github.com/users/vkaracic/following{/other_user}","gists_url":"https://api.github.com/users/vkaracic/gists{/gist_id}","starred_url":"https://api.github.com/users/vkaracic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vkaracic/subscriptions","organizations_url":"https://api.github.com/users/vkaracic/orgs","repos_url":"https://api.github.com/users/vkaracic/repos","events_url":"https://api.github.com/users/vkaracic/events{/privacy}","received_events_url":"https://api.github.com/users/vkaracic/received_events","type":"User","site_admin":false},"body":"https://openedx.atlassian.net/browse/SOL-1354\r\n\r\nThis PR assumes that the Invoice payment branch has been merged, and some requirements like the ``CouponVouchers`` model and ``create_vouchers`` method.","created_at":"2015-11-24T14:13:35Z","updated_at":"2015-11-30T13:47:55Z","closed_at":null,"merged_at":null,"merge_commit_sha":"60621772c0bd49ff650e8490c95427e1e1a4db35","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/vkaracic/ecommerce/pulls/30/commits","review_comments_url":"https://api.github.com/repos/vkaracic/ecommerce/pulls/30/comments","review_comment_url":"https://api.github.com/repos/vkaracic/ecommerce/pulls/comments{/number}","comments_url":"https://api.github.com/repos/vkaracic/ecommerce/issues/30/comments","statuses_url":"https://api.github.com/repos/vkaracic/ecommerce/statuses/39d81564ad22a858a33ff343615ac58a43f3d40b","head":{"label":"vkaracic:vkaracic/SOL-1354","ref":"vkaracic/SOL-1354","sha":"39d81564ad22a858a33ff343615ac58a43f3d40b","user":{"login":"vkaracic","id":2808092,"avatar_url":"https://avatars.githubusercontent.com/u/2808092?v=3","gravatar_id":"","url":"https://api.github.com/users/vkaracic","html_url":"https://github.com/vkaracic","followers_url":"https://api.github.com/users/vkaracic/followers","following_url":"https://api.github.com/users/vkaracic/following{/other_user}","gists_url":"https://api.github.com/users/vkaracic/gists{/gist_id}","starred_url":"https://api.github.com/users/vkaracic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vkaracic/subscriptions","organizations_url":"https://api.github.com/users/vkaracic/orgs","repos_url":"https://api.github.com/users/vkaracic/repos","events_url":"https://api.github.com/users/vkaracic/events{/privacy}","received_events_url":"https://api.github.com/users/vkaracic/received_events","type":"User","site_admin":false},"repo":{"id":44113047,"name":"ecommerce","full_name":"vkaracic/ecommerce","owner":{"login":"vkaracic","id":2808092,"avatar_url":"https://avatars.githubusercontent.com/u/2808092?v=3","gravatar_id":"","url":"https://api.github.com/users/vkaracic","html_url":"https://github.com/vkaracic","followers_url":"https://api.github.com/users/vkaracic/followers","following_url":"https://api.github.com/users/vkaracic/following{/other_user}","gists_url":"https://api.github.com/users/vkaracic/gists{/gist_id}","starred_url":"https://api.github.com/users/vkaracic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vkaracic/subscriptions","organizations_url":"https://api.github.com/users/vkaracic/orgs","repos_url":"https://api.github.com/users/vkaracic/repos","events_url":"https://api.github.com/users/vkaracic/events{/privacy}","received_events_url":"https://api.github.com/users/vkaracic/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/vkaracic/ecommerce","description":"Django application used to manage edX's product catalog and handle orders for those products","fork":true,"url":"https://api.github.com/repos/vkaracic/ecommerce","forks_url":"https://api.github.com/repos/vkaracic/ecommerce/forks","keys_url":"https://api.github.com/repos/vkaracic/ecommerce/keys{/key_id}","collaborators_url":"https://api.github.com/repos/vkaracic/ecommerce/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/vkaracic/ecommerce/teams","hooks_url":"https://api.github.com/repos/vkaracic/ecommerce/hooks","issue_events_url":"https://api.github.com/repos/vkaracic/ecommerce/issues/events{/number}","events_url":"https://api.github.com/repos/vkaracic/ecommerce/events","assignees_url":"https://api.github.com/repos/vkaracic/ecommerce/assignees{/user}","branches_url":"https://api.github.com/repos/vkaracic/ecommerce/branches{/branch}","tags_url":"https://api.github.com/repos/vkaracic/ecommerce/tags","blobs_url":"https://api.github.com/repos/vkaracic/ecommerce/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/vkaracic/ecommerce/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/vkaracic/ecommerce/git/refs{/sha}","trees_url":"https://api.github.com/repos/vkaracic/ecommerce/git/trees{/sha}","statuses_url":"https://api.github.com/repos/vkaracic/ecommerce/statuses/{sha}","languages_url":"https://api.github.com/repos/vkaracic/ecommerce/languages","stargazers_url":"https://api.github.com/repos/vkaracic/ecommerce/stargazers","contributors_url":"https://api.github.com/repos/vkaracic/ecommerce/contributors","subscribers_url":"https://api.github.com/repos/vkaracic/ecommerce/subscribers","subscription_url":"https://api.github.com/repos/vkaracic/ecommerce/subscription","commits_url":"https://api.github.com/repos/vkaracic/ecommerce/commits{/sha}","git_commits_url":"https://api.github.com/repos/vkaracic/ecommerce/git/commits{/sha}","comments_url":"https://api.github.com/repos/vkaracic/ecommerce/comments{/number}","issue_comment_url":"https://api.github.com/repos/vkaracic/ecommerce/issues/comments{/number}","contents_url":"https://api.github.com/repos/vkaracic/ecommerce/contents/{+path}","compare_url":"https://api.github.com/repos/vkaracic/ecommerce/compare/{base}...{head}","merges_url":"https://api.github.com/repos/vkaracic/ecommerce/merges","archive_url":"https://api.github.com/repos/vkaracic/ecommerce/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/vkaracic/ecommerce/downloads","issues_url":"https://api.github.com/repos/vkaracic/ecommerce/issues{/number}","pulls_url":"https://api.github.com/repos/vkaracic/ecommerce/pulls{/number}","milestones_url":"https://api.github.com/repos/vkaracic/ecommerce/milestones{/number}","notifications_url":"https://api.github.com/repos/vkaracic/ecommerce/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/vkaracic/ecommerce/labels{/name}","releases_url":"https://api.github.com/repos/vkaracic/ecommerce/releases{/id}","created_at":"2015-10-12T14:37:27Z","updated_at":"2015-10-12T14:37:29Z","pushed_at":"2015-11-30T13:25:00Z","git_url":"git://github.com/vkaracic/ecommerce.git","ssh_url":"git@github.com:vkaracic/ecommerce.git","clone_url":"https://github.com/vkaracic/ecommerce.git","svn_url":"https://github.com/vkaracic/ecommerce","homepage":"","size":8324,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":3,"forks":0,"open_issues":3,"watchers":0,"default_branch":"master"}},"base":{"label":"vkaracic:master","ref":"master","sha":"9ae3f8557c8184b1858c9c4485a2beab71cb5db9","user":{"login":"vkaracic","id":2808092,"avatar_url":"https://avatars.githubusercontent.com/u/2808092?v=3","gravatar_id":"","url":"https://api.github.com/users/vkaracic","html_url":"https://github.com/vkaracic","followers_url":"https://api.github.com/users/vkaracic/followers","following_url":"https://api.github.com/users/vkaracic/following{/other_user}","gists_url":"https://api.github.com/users/vkaracic/gists{/gist_id}","starred_url":"https://api.github.com/users/vkaracic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vkaracic/subscriptions","organizations_url":"https://api.github.com/users/vkaracic/orgs","repos_url":"https://api.github.com/users/vkaracic/repos","events_url":"https://api.github.com/users/vkaracic/events{/privacy}","received_events_url":"https://api.github.com/users/vkaracic/received_events","type":"User","site_admin":false},"repo":{"id":44113047,"name":"ecommerce","full_name":"vkaracic/ecommerce","owner":{"login":"vkaracic","id":2808092,"avatar_url":"https://avatars.githubusercontent.com/u/2808092?v=3","gravatar_id":"","url":"https://api.github.com/users/vkaracic","html_url":"https://github.com/vkaracic","followers_url":"https://api.github.com/users/vkaracic/followers","following_url":"https://api.github.com/users/vkaracic/following{/other_user}","gists_url":"https://api.github.com/users/vkaracic/gists{/gist_id}","starred_url":"https://api.github.com/users/vkaracic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vkaracic/subscriptions","organizations_url":"https://api.github.com/users/vkaracic/orgs","repos_url":"https://api.github.com/users/vkaracic/repos","events_url":"https://api.github.com/users/vkaracic/events{/privacy}","received_events_url":"https://api.github.com/users/vkaracic/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/vkaracic/ecommerce","description":"Django application used to manage edX's product catalog and handle orders for those products","fork":true,"url":"https://api.github.com/repos/vkaracic/ecommerce","forks_url":"https://api.github.com/repos/vkaracic/ecommerce/forks","keys_url":"https://api.github.com/repos/vkaracic/ecommerce/keys{/key_id}","collaborators_url":"https://api.github.com/repos/vkaracic/ecommerce/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/vkaracic/ecommerce/teams","hooks_url":"https://api.github.com/repos/vkaracic/ecommerce/hooks","issue_events_url":"https://api.github.com/repos/vkaracic/ecommerce/issues/events{/number}","events_url":"https://api.github.com/repos/vkaracic/ecommerce/events","assignees_url":"https://api.github.com/repos/vkaracic/ecommerce/assignees{/user}","branches_url":"https://api.github.com/repos/vkaracic/ecommerce/branches{/branch}","tags_url":"https://api.github.com/repos/vkaracic/ecommerce/tags","blobs_url":"https://api.github.com/repos/vkaracic/ecommerce/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/vkaracic/ecommerce/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/vkaracic/ecommerce/git/refs{/sha}","trees_url":"https://api.github.com/repos/vkaracic/ecommerce/git/trees{/sha}","statuses_url":"https://api.github.com/repos/vkaracic/ecommerce/statuses/{sha}","languages_url":"https://api.github.com/repos/vkaracic/ecommerce/languages","stargazers_url":"https://api.github.com/repos/vkaracic/ecommerce/stargazers","contributors_url":"https://api.github.com/repos/vkaracic/ecommerce/contributors","subscribers_url":"https://api.github.com/repos/vkaracic/ecommerce/subscribers","subscription_url":"https://api.github.com/repos/vkaracic/ecommerce/subscription","commits_url":"https://api.github.com/repos/vkaracic/ecommerce/commits{/sha}","git_commits_url":"https://api.github.com/repos/vkaracic/ecommerce/git/commits{/sha}","comments_url":"https://api.github.com/repos/vkaracic/ecommerce/comments{/number}","issue_comment_url":"https://api.github.com/repos/vkaracic/ecommerce/issues/comments{/number}","contents_url":"https://api.github.com/repos/vkaracic/ecommerce/contents/{+path}","compare_url":"https://api.github.com/repos/vkaracic/ecommerce/compare/{base}...{head}","merges_url":"https://api.github.com/repos/vkaracic/ecommerce/merges","archive_url":"https://api.github.com/repos/vkaracic/ecommerce/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/vkaracic/ecommerce/downloads","issues_url":"https://api.github.com/repos/vkaracic/ecommerce/issues{/number}","pulls_url":"https://api.github.com/repos/vkaracic/ecommerce/pulls{/number}","milestones_url":"https://api.github.com/repos/vkaracic/ecommerce/milestones{/number}","notifications_url":"https://api.github.com/repos/vkaracic/ecommerce/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/vkaracic/ecommerce/labels{/name}","releases_url":"https://api.github.com/repos/vkaracic/ecommerce/releases{/id}","created_at":"2015-10-12T14:37:27Z","updated_at":"2015-10-12T14:37:29Z","pushed_at":"2015-11-30T13:25:00Z","git_url":"git://github.com/vkaracic/ecommerce.git","ssh_url":"git@github.com:vkaracic/ecommerce.git","clone_url":"https://github.com/vkaracic/ecommerce.git","svn_url":"https://github.com/vkaracic/ecommerce","homepage":"","size":8324,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":3,"forks":0,"open_issues":3,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/vkaracic/ecommerce/pulls/30"},"html":{"href":"https://github.com/vkaracic/ecommerce/pull/30"},"issue":{"href":"https://api.github.com/repos/vkaracic/ecommerce/issues/30"},"comments":{"href":"https://api.github.com/repos/vkaracic/ecommerce/issues/30/comments"},"review_comments":{"href":"https://api.github.com/repos/vkaracic/ecommerce/pulls/30/comments"},"review_comment":{"href":"https://api.github.com/repos/vkaracic/ecommerce/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/vkaracic/ecommerce/pulls/30/commits"},"statuses":{"href":"https://api.github.com/repos/vkaracic/ecommerce/statuses/39d81564ad22a858a33ff343615ac58a43f3d40b"}}}}