Some checks failed
CI / Lint, Unit & Integration Tests (push) Has been cancelled
Replace the customers/data_request, customers/redact, and shop/redact stubs with real logic in app/services/gdpr.server.ts: compile a customer's Booking history, anonymize customerEmail/customerPhone on redact, and purge every shopDomain-scoped row on shop uninstall (Booking before Location, relying on Location's cascade for SlotTemplate/SlotOverride/BlackoutDate/Zone/Rate). Covered by a new tests/integration/gdpr.test.ts against live Postgres to verify the FK deletion order actually works, not just typechecks. Still commented out in shopify.app.toml pending Protected customer data access approval in the Partner Dashboard — unrelated to code readiness. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
21 lines
910 B
TypeScript
21 lines
910 B
TypeScript
import type { ActionFunctionArgs } from "@remix-run/node";
|
|
import { authenticate } from "../shopify.server";
|
|
import { redactCustomerData, type CustomerWebhookPayload } from "../services/gdpr.server";
|
|
|
|
// GDPR: erase a specific customer's data (fires 10 days after a customer's
|
|
// data erasure request, or 6 months after their last order on the shop).
|
|
// Bookings are kept for the shop's own revenue/utilization history — only
|
|
// the customer-identifying fields (email/phone) are anonymized.
|
|
export const action = async ({ request }: ActionFunctionArgs) => {
|
|
const { shop, topic, payload } = await authenticate.webhook(request);
|
|
const { customer } = payload as CustomerWebhookPayload;
|
|
|
|
const { count } = await redactCustomerData(shop, customer);
|
|
|
|
console.log(
|
|
`[gdpr] ${topic} for ${shop}: customer ${customer?.id ?? "unknown"} — redacted ${count} booking(s)`,
|
|
);
|
|
|
|
return new Response();
|
|
};
|