{payment_attempts.map(({ sk, brand, last4, status }, index) => {
const [, , created_at] = sk.split('#')
diff --git a/apps/admin.saladeaula.digital/app/routes/_index/route.tsx b/apps/admin.saladeaula.digital/app/routes/_index/route.tsx
index 8235754..d95f210 100644
--- a/apps/admin.saladeaula.digital/app/routes/_index/route.tsx
+++ b/apps/admin.saladeaula.digital/app/routes/_index/route.tsx
@@ -8,6 +8,11 @@ import { request as req } from '@repo/util/request'
export const middleware: Route.MiddlewareFunction[] = [authMiddleware]
+type Response = {
+ items: { sk: string }[]
+ preferred_org_id?: string
+}
+
export async function loader({ context, request }: Route.ActionArgs) {
const user = context.get(userContext)!
@@ -21,8 +26,10 @@ export async function loader({ context, request }: Route.ActionArgs) {
throw new Response(await r.text(), { status: r.status })
}
- const { items = [] } = (await r.json()) as { items: { sk: string }[] }
- const [{ sk } = {}] = items
+ const { items = [], preferred_org_id } = (await r.json()) as Response
+ const { sk } = preferred_org_id
+ ? (items.find((item) => item.sk.includes(preferred_org_id)) ?? items[0])
+ : items[0]
if (sk) {
const [_, id] = sk.split('#')
diff --git a/orders-events/app/app.py b/orders-events/app/app.py
index c7a25eb..f8a361e 100644
--- a/orders-events/app/app.py
+++ b/orders-events/app/app.py
@@ -35,6 +35,7 @@ class StatusAttr(Enum):
# EXTERNALLY_PAID = 'paid_at'
EXTERNALLY_PAID = 'payment_date'
PAID = 'payment_date'
+
CANCELED = 'canceled_at'
REFUNDED = 'refunded_at'
EXPIRED = 'expired_at'
@@ -47,10 +48,10 @@ def _status_attr(status: str) -> StatusAttr | None:
return None
-def _friendly_status(s: str) -> str:
+def _friendly_status(status: str) -> str:
if 'status' == 'EXTERNALLY_PAID':
return 'PAID'
- return s
+ return status
@app.post('//postback')
diff --git a/orders-events/app/events/billing/close_window.py b/orders-events/app/events/billing/close_window.py
index c298c2d..96091ad 100644
--- a/orders-events/app/events/billing/close_window.py
+++ b/orders-events/app/events/billing/close_window.py
@@ -87,7 +87,8 @@ def lambda_handler(event: EventBridgeEvent, context: LambdaContext) -> bool:
pk=keys['id'],
sk=f'START#{start_period}#END#{end_period}',
),
- update_expr='SET #status = :status, s3_uri = :s3_uri, \
+ update_expr='SET #status = :status, \
+ s3_uri = :s3_uri, \
updated_at = :updated_at',
expr_attr_names={'#status': 'status'},
expr_attr_values={
diff --git a/orders-events/app/events/payments/charge_credit_card.py b/orders-events/app/events/payments/charge_credit_card.py
index b5dd6ea..4b690da 100644
--- a/orders-events/app/events/payments/charge_credit_card.py
+++ b/orders-events/app/events/payments/charge_credit_card.py
@@ -101,6 +101,7 @@ def lambda_handler(event: EventBridgeEvent, context: LambdaContext) -> bool:
key=KeyPair(order_id, 'TRANSACTION#STATS'),
update_expr='SET #count = if_not_exists(#count, :zero) + :one, \
last_attempt_succeeded = :succeeded, \
+ created_at = if_not_exists(created_at, :now), \
updated_at = :now',
expr_attr_names={
'#count': 'payment_attempts',
@@ -109,7 +110,7 @@ def lambda_handler(event: EventBridgeEvent, context: LambdaContext) -> bool:
':succeeded': charge['success'],
':zero': 0,
':one': 1,
- ':now': now(),
+ ':now': now_,
},
)
diff --git a/orders-events/app/events/payments/create_invoice.py b/orders-events/app/events/payments/create_invoice.py
index 30a1f5a..e16318f 100644
--- a/orders-events/app/events/payments/create_invoice.py
+++ b/orders-events/app/events/payments/create_invoice.py
@@ -87,9 +87,6 @@ def lambda_handler(event: EventBridgeEvent, context: LambdaContext) -> bool:
)
if 'credit_card' in r:
- transact.delete(
- key=KeyPair(order_id, 'CREDIT_CARD#PAYMENT_INTENT'),
- )
transact.put(
item={
'id': order_id,
@@ -102,6 +99,9 @@ def lambda_handler(event: EventBridgeEvent, context: LambdaContext) -> bool:
},
cond_expr='attribute_not_exists(sk)',
)
+ transact.delete(
+ key=KeyPair(order_id, 'CREDIT_CARD#PAYMENT_INTENT'),
+ )
if test_mode:
transact.put(
diff --git a/orders-events/app/iugu.py b/orders-events/app/iugu.py
index 2586304..96bbb06 100644
--- a/orders-events/app/iugu.py
+++ b/orders-events/app/iugu.py
@@ -44,7 +44,6 @@ class PaymentMethod(str, Enum):
CREDIT_CARD = 'CREDIT_CARD'
-@dataclass
class Address(BaseModel):
postcode: str
neighborhood: str
@@ -76,7 +75,7 @@ class Order(BaseModel):
cnpj: str | None = None
-@dataclass
+@dataclass(frozen=True)
class Credentials:
account_id: str
api_token: str
@@ -161,6 +160,7 @@ class Iugu:
)
r.raise_for_status()
except requests.HTTPError as err:
+ logger.info('IUGU Response', response=err.response)
logger.exception(err)
raise
else:
@@ -197,6 +197,7 @@ class Iugu:
)
r.raise_for_status()
except requests.HTTPError as err:
+ logger.info('IUGU Response', response=err.response)
logger.exception(err)
raise
else:
@@ -233,11 +234,13 @@ class Iugu:
try:
r = requests.post(
- url, json=payload, timeout=(HTTP_CONNECT_TIMEOUT, HTTP_READ_TIMEOUT)
+ url,
+ json=payload,
+ timeout=(HTTP_CONNECT_TIMEOUT, HTTP_READ_TIMEOUT),
)
r.raise_for_status()
except requests.HTTPError as err:
- logger.info('Response', err.response)
+ logger.info('IUGU Response', response=err.response)
logger.exception(err)
raise
else:
@@ -247,9 +250,13 @@ class Iugu:
url = self.url(path=f'/v1/invoices/{format_id(invoice_id)}')
try:
- r = requests.get(url, timeout=(HTTP_CONNECT_TIMEOUT, HTTP_READ_TIMEOUT))
+ r = requests.get(
+ url,
+ timeout=(HTTP_CONNECT_TIMEOUT, HTTP_READ_TIMEOUT),
+ )
r.raise_for_status()
except requests.HTTPError as err:
+ logger.info('IUGU Response', response=err.response)
logger.exception(err)
raise
else: