(20241217) Payment callback ready for Safaricom M-Pesa Express.

This commit is contained in:
2024-12-17 13:27:15 +05:30
parent b6ba54abd4
commit 9de9542fda
12 changed files with 632 additions and 52 deletions
+21 -11
View File
@@ -157,6 +157,12 @@ class PaymentEvent(BaseModel):
frozen = False
)
message: str | None = Field(
description = "a hint about what happened at this stage",
frozen = True,
default = None
)
initByPG: bool = Field(
description = "to figure out whether the payment gateway initiated this event or we did",
frozen = True
@@ -258,10 +264,15 @@ class CorePaymentModel(BaseModel):
tags: List[Any] = Field(
description = "a list of keywords to apply to this file/dir to filter it later",
frozen = False,
default = [],
examples = ["renewal", "subscription"]
)
serviceType: Literal["paymentGateway"] = Field(
description = "to identify the kind of service",
frozen = True,
default = None
)
client: Literal["razorpay", "safaricomMPesaExpress"] = Field(
description = "the third-part client that was used",
frozen = True
@@ -275,8 +286,7 @@ class CorePaymentModel(BaseModel):
events: List[PaymentEvent] = Field(
description = "an array of all the events that happened in the process of this payment",
frozen = False,
default = []
frozen = False
)
# ┏┓ ┏•
@@ -299,9 +309,9 @@ class CorePaymentModel(BaseModel):
@property
def full(self):
payment_json = {
"paymentId": str(self.messageId),
"user": self.user,
"customer": self.customer,
"paymentId": str(self.paymentId),
"user": self.user.model_dump(),
"customer": self.customer.model_dump(),
"ts": self.ts.isoformat(),
"lastEventTs": self.lastEventTs,
"lastPaymentStatus": self.lastPaymentStatus,
@@ -324,9 +334,9 @@ class CorePaymentModel(BaseModel):
@property
def preview(self):
return {
"paymentId": str(self.messageId),
"user": self.user,
"customer": self.customer,
"paymentId": str(self.paymentId),
"user": self.user.model_dump(),
"customer": self.customer.model_dump(),
"ts": self.ts.isoformat(),
"lastEventTs": self.lastEventTs,
"lastPaymentStatus": self.lastPaymentStatus,
@@ -360,8 +370,8 @@ class CorePaymentModel(BaseModel):
if currency is None: raise ValueError("invalid currency code, please use iso 4217 standard")
return value
@field_validator("tags", mode = "before")
def validate_tags(cls, value):
@field_validator("tags", "events", mode = "before")
def validate_null_lists(cls, value):
if value is None: value = []
return value