Includes all Phase 1 features: - Search-first navigation with auto-complete - Responsive reading interface (desktop/tablet/mobile) - 4 customization presets + full fine-tuning controls - Layered details panel with notes, bookmarks, highlights - Smart offline caching with IndexedDB and auto-sync - Full accessibility (WCAG 2.1 AA) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
79 lines
1.6 KiB
TypeScript
79 lines
1.6 KiB
TypeScript
import { CollectionConfig } from 'payload';
|
|
|
|
export const FailedPayments: CollectionConfig = {
|
|
slug: 'failed-payments',
|
|
admin: {
|
|
useAsTitle: 'id',
|
|
defaultColumns: ['stripePaymentIntentId', 'amount', 'errorCode', 'createdAt'],
|
|
group: 'E-Commerce',
|
|
},
|
|
fields: [
|
|
{
|
|
name: 'stripePaymentIntentId',
|
|
type: 'text',
|
|
unique: true,
|
|
required: true,
|
|
index: true,
|
|
admin: {
|
|
readOnly: true,
|
|
},
|
|
},
|
|
{
|
|
name: 'customerId',
|
|
type: 'text',
|
|
index: true,
|
|
},
|
|
{
|
|
name: 'amount',
|
|
type: 'number',
|
|
required: true,
|
|
admin: {
|
|
description: 'Amount in cents',
|
|
},
|
|
},
|
|
{
|
|
name: 'currency',
|
|
type: 'text',
|
|
required: true,
|
|
},
|
|
{
|
|
name: 'error',
|
|
type: 'textarea',
|
|
required: true,
|
|
},
|
|
{
|
|
name: 'errorCode',
|
|
type: 'text',
|
|
},
|
|
{
|
|
name: 'retryCount',
|
|
type: 'number',
|
|
defaultValue: 0,
|
|
min: 0,
|
|
},
|
|
{
|
|
name: 'resolved',
|
|
type: 'checkbox',
|
|
defaultValue: false,
|
|
index: true,
|
|
},
|
|
{
|
|
name: 'resolvedAt',
|
|
type: 'date',
|
|
},
|
|
{
|
|
name: 'notes',
|
|
type: 'textarea',
|
|
admin: {
|
|
description: 'Internal notes about this failure',
|
|
},
|
|
},
|
|
],
|
|
access: {
|
|
read: ({ req }) => req.user?.role === 'admin' || req.user?.role === 'super-admin',
|
|
create: ({ req }) => req.user?.role === 'admin' || req.user?.role === 'super-admin',
|
|
update: ({ req }) => req.user?.role === 'admin' || req.user?.role === 'super-admin',
|
|
delete: ({ req }) => req.user?.role === 'super-admin',
|
|
},
|
|
};
|