Skip to content

Commit d9bb5c0

Browse files
zaryapre-commit-ci[bot]tykling
authored
Store all api callbacks even if they dont have a order (#1827)
* Store all api callbacks even if they dont have a order * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update src/shop/views.py * Update src/shop/views.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Thomas Steen Rasmussen <tykling@bornhack.org>
1 parent a316336 commit d9bb5c0

3 files changed

Lines changed: 37 additions & 9 deletions

File tree

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 4.2.20 on 2025-04-21 11:24
2+
3+
from django.db import migrations, models
4+
import django.db.models.deletion
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('shop', '0087_coinifyapipaymentintent'),
11+
]
12+
13+
operations = [
14+
migrations.AlterField(
15+
model_name='coinifyapicallback',
16+
name='order',
17+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='coinify_api_callbacks', to='shop.order'),
18+
),
19+
]

src/shop/models.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1165,11 +1165,16 @@ class CoinifyAPICallback(
11651165
"shop.Order",
11661166
related_name="coinify_api_callbacks",
11671167
on_delete=models.PROTECT,
1168+
blank=True,
1169+
null=True,
11681170
)
11691171
authenticated = models.BooleanField(default=False)
11701172

11711173
def __str__(self):
1172-
return f"order #{self.order.id} callback at {self.created}"
1174+
if self.order:
1175+
return f"order #{self.order.id} callback at {self.created}"
1176+
else:
1177+
return f"other callback at {self.created}"
11731178

11741179

11751180
class CoinifyAPIRequest(

src/shop/views.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -605,11 +605,8 @@ def post(self, request, *args, **kwargs):
605605

606606
# save callback and parse json payload
607607
payload = json.loads(request.body.decode("utf-8"))
608-
order = Order.objects.get(
609-
coinify_api_payment_intents__coinify_id=payload["context"]["id"],
610-
)
611608

612-
callbackobject = save_coinify_callback(request, order)
609+
callbackobject = save_coinify_callback(request=request, order=None)
613610

614611
# do we have a json body?
615612
if not callbackobject.payload:
@@ -624,15 +621,22 @@ def post(self, request, *args, **kwargs):
624621
callbackobject.valid = True
625622
callbackobject.save()
626623

627-
if (
628-
callbackobject.payload["event"] == "payment-intent.completed"
629-
or callbackobject.payload["event"] == "payment-intent.failed"
630-
):
624+
if callbackobject.payload["event"] in [
625+
"payment-intent.completed",
626+
"payment-intent.failed",
627+
]:
628+
order = Order.objects.get(
629+
coinify_api_payment_intents__coinify_id=payload["context"]["id"],
630+
)
631631
process_coinify_payment_intent_json(
632632
intentjson=payload["context"],
633633
order=order,
634634
request=request,
635635
)
636+
callbackobject.order = order
637+
callbackobject.save()
638+
return HttpResponse("OK")
639+
if callbackobject.payload["event"] == "settlement.created":
636640
return HttpResponse("OK")
637641
else:
638642
logger.error(

0 commit comments

Comments
 (0)