Skip to content

Commit c23705f

Browse files
committed
feat: add Paypal transaction link
1 parent 83f426b commit c23705f

File tree

6 files changed

+27
-6
lines changed

6 files changed

+27
-6
lines changed

.github/workflows/deploy-cloudflare-worker.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ jobs:
5151
echo "BACKUP_PERMISSION=${{ vars.BACKUP_PERMISSION }}" >> cloudflare-worker/.env
5252
echo "DB_MAX_IMAGE_SIZE=${{ vars.DB_MAX_IMAGE_SIZE }}" >> cloudflare-worker/.env
5353
echo "AMAZON_BASE_URL=${{ vars.AMAZON_BASE_URL }}" >> cloudflare-worker/.env
54+
echo "PAYPAL_TRANSACTION_BASE_URL=${{ secrets.PAYPAL_TRANSACTION_BASE_URL }}" >> cloudflare-worker/.env
5455
cat cloudflare-worker/.env
5556
5657
- name: Replace "// vars.*" in wrangler.jsonc with a json string
@@ -59,7 +60,7 @@ jobs:
5960
cp wrangler.jsonc wrangler.jsonc.bak
6061
set -a && source .env && set +a
6162
cat .env
62-
cat wrangler.jsonc.bak | sed 's|// "vars".*.|,"vars": { "AMAZON_BASE_URL": "'"${AMAZON_BASE_URL}"'", "AUTH0_DOMAIN": "'"${AUTH0_DOMAIN}"'", "AUTH0_CLIENT_ID": "'"${AUTH0_CLIENT_ID}"'", "AUTH0_SCOPE": "'"${AUTH0_SCOPE}"'", "AUTH0_AUDIENCE": "'"${AUTH0_AUDIENCE}"'", "API_BASE_URL": "'"${API_BASE_URL}"'", "CORS_ORIGIN": "'"${CORS_ORIGIN}"'", "DB_BACKEND": "'"${DB_BACKEND}"'", "DB_MAX_IMAGE_SIZE": "'"${DB_MAX_IMAGE_SIZE}"'", "BACKUP_PERMISSION": "'"${BACKUP_PERMISSION}"'", "READ_PERMISSION": "'"${READ_PERMISSION}"'", "WRITE_PERMISSION": "'"${WRITE_PERMISSION}"'", "ADMIN_PERMISSION": "'"${ADMIN_PERMISSION}"'", "STATISTICS_LIMIT": "'"${STATISTICS_LIMIT}"'" }|' > wrangler.jsonc.2
63+
cat wrangler.jsonc.bak | sed 's|// "vars".*.|,"vars": { "PAYPAL_TRANSACTION_BASE_URL": "'"${PAYPAL_TRANSACTION_BASE_URL}"'", "AMAZON_BASE_URL": "'"${AMAZON_BASE_URL}"'", "AUTH0_DOMAIN": "'"${AUTH0_DOMAIN}"'", "AUTH0_CLIENT_ID": "'"${AUTH0_CLIENT_ID}"'", "AUTH0_SCOPE": "'"${AUTH0_SCOPE}"'", "AUTH0_AUDIENCE": "'"${AUTH0_AUDIENCE}"'", "API_BASE_URL": "'"${API_BASE_URL}"'", "CORS_ORIGIN": "'"${CORS_ORIGIN}"'", "DB_BACKEND": "'"${DB_BACKEND}"'", "DB_MAX_IMAGE_SIZE": "'"${DB_MAX_IMAGE_SIZE}"'", "BACKUP_PERMISSION": "'"${BACKUP_PERMISSION}"'", "READ_PERMISSION": "'"${READ_PERMISSION}"'", "WRITE_PERMISSION": "'"${WRITE_PERMISSION}"'", "ADMIN_PERMISSION": "'"${ADMIN_PERMISSION}"'", "STATISTICS_LIMIT": "'"${STATISTICS_LIMIT}"'" }|' > wrangler.jsonc.2
6364
cat wrangler.jsonc.2 | sed 's|// "routes".*.|,"routes": [{ "pattern": "'"${DOMAIN_NAME}"'", "custom_domain": true }]|' > wrangler.jsonc
6465
cat wrangler.jsonc
6566
- name: Deploy
@@ -82,6 +83,7 @@ jobs:
8283
BACKUP_PERMISSION
8384
DB_MAX_IMAGE_SIZE
8485
AMAZON_BASE_URL
86+
PAYPAL_TRANSACTION_BASE_URL
8587
STATISTICS_LIMIT
8688
env:
8789
AUTH0_DOMAIN: ${{ secrets.AUTH0_DOMAIN }}
@@ -97,4 +99,5 @@ jobs:
9799
BACKUP_PERMISSION: ${{ vars.BACKUP_PERMISSION }}
98100
DB_MAX_IMAGE_SIZE: ${{ vars.DB_MAX_IMAGE_SIZE }}
99101
AMAZON_BASE_URL: ${{ vars.AMAZON_BASE_URL }}
102+
PAYPAL_TRANSACTION_BASE_URL: ${{ secrets.PAYPAL_TRANSACTION_BASE_URL }}
100103
STATISTICS_LIMIT: ${{ vars.STATISTICS_LIMIT }}

.github/workflows/pages.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ jobs:
5454
export BACKUP_PERMISSION="${{ vars.BACKUP_PERMISSION }}"
5555
export DB_MAX_IMAGE_SIZE="${{ vars.DB_MAX_IMAGE_SIZE }}"
5656
export AMAZON_BASE_URL="${{ vars.AMAZON_BASE_URL }}"
57+
export PAYPAL_TRANSACTION_BASE_URL="${{ secrets.PAYPAL_TRANSACTION_BASE_URL }}"
5758
npx vite build --base=/${{ github.event.repository.name }}
5859
5960
- name: Upload pages artifact

client/src/pages/index.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,17 @@ export default function IndexPage() {
430430
sortable: false,
431431
className: "hidden md:table-cell",
432432
headerClassName: "hidden md:table-cell",
433+
render: (item) => {
434+
return item.refunded ? (
435+
<>
436+
<Link
437+
className="text-blue-500 hover:underline break-keep"
438+
target="_blank"
439+
to={`${import.meta.env.PAYPAL_TRANSACTION_BASE_URL}${item.transactionId}`}>{t("yes")}
440+
</Link>
441+
</>) :
442+
<>{t("no")}</>;
443+
}
433444
},
434445
{
435446
field: "actions",

cloudflare-worker/src/db/d1-db.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -815,7 +815,10 @@ export class CloudflareD1DB implements FeedbackFlowDB {
815815
const totalCount = countResults[0]?.count as number;
816816
const preparedStatement = this.db
817817
.prepare(
818-
`SELECT * FROM purchase_status WHERE tester_uuid = ? ${limitToNotRefundedQuery} ORDER BY ${sortColumn} ${orderDir} LIMIT ? OFFSET ?`,
818+
`SELECT ps.*, r.transaction_id FROM purchase_status ps
819+
LEFT JOIN refunds r ON ps.id = r.purchase_id
820+
WHERE ps.tester_uuid = ? ${limitToNotRefundedQuery}
821+
ORDER BY ${sortColumn} ${orderDir} LIMIT ? OFFSET ?`,
819822
)
820823
.bind(testerUuid, limit, offset);
821824

@@ -837,6 +840,7 @@ export class CloudflareD1DB implements FeedbackFlowDB {
837840
publicationScreenshot: row.publication_screenshot as string,
838841
purchaseScreenshot: row.purchase_screenshot as string,
839842
screenshotSummary: row.screenshot_summary as string,
843+
transactionId: row.transaction_id ? (row.transaction_id as string) : undefined,
840844
}) as PurchaseStatus,
841845
);
842846
// Add pagination info to the result

cloudflare-worker/src/db/in-memory-db.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -404,8 +404,8 @@ export class InMemoryDB implements FeedbackFlowDB {
404404
// 3. Having feedback
405405
// 4. Having publication (this is what was missing before)
406406
const filteredPurchases = this.data.purchases.filter(
407-
(p) => p.testerUuid === testerUuid &&
408-
!p.refunded &&
407+
(p) => p.testerUuid === testerUuid &&
408+
!p.refunded &&
409409
this.data.feedbacks.some((feedback) => feedback.purchase === p.id) &&
410410
this.data.publications.some((publication) => publication.purchase === p.id)
411411
);
@@ -416,10 +416,10 @@ export class InMemoryDB implements FeedbackFlowDB {
416416
const enhancedPurchases = filteredPurchases.map(purchase => {
417417
// Find the feedback for this purchase
418418
const feedback = this.data.feedbacks.find(f => f.purchase === purchase.id);
419-
419+
420420
// Find the publication for this purchase
421421
const publication = this.data.publications.find(p => p.purchase === purchase.id);
422-
422+
423423
return {
424424
...purchase,
425425
feedback: feedback?.feedback || "",
@@ -606,6 +606,7 @@ export class InMemoryDB implements FeedbackFlowDB {
606606
publicationScreenshot: hasPublication?.screenshot,
607607
purchaseScreenshot: purchase.screenshot,
608608
screenshotSummary: purchase.screenshotSummary,
609+
transactionId: hasRefund?.transactionId,
609610
} as PurchaseStatus;
610611
});
611612

cloudflare-worker/src/types/db-types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ export interface PurchaseStatus {
7878
purchaseScreenshot?: string;
7979
publicationScreenshot?: string;
8080
screenshotSummary?: string;
81+
transactionId?: string;
8182
}
8283

8384
/**

0 commit comments

Comments
 (0)