.cursor/skills/payment-service-integration/SKILL.md
--- name: payment-service-integration description: Guides payment service integration: Stripe integration, event ticketing, revenue splits, refund handling. Use when implementing payment processing, ticketing, or financial transactions. --- # Payment Service Integration ## Core Components ### Payment Service Handles payment processing, Stripe integration, and transaction management. ### Event Ticketing Manages event tickets, pricing, and ticket sales. ### Revenue Splits Handles multi-party
npx skillsauth add avra-cadavra/avrai .cursor/skills/payment-service-integrationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Handles payment processing, Stripe integration, and transaction management.
Manages event tickets, pricing, and ticket sales.
Handles multi-party revenue sharing for partnerships.
/// Payment Service with Stripe
class PaymentService {
final StripeService _stripeService;
/// Process payment for reservation
Future<PaymentResult> processPayment({
required Reservation reservation,
required PaymentMethod paymentMethod,
}) async {
try {
// Create Stripe payment intent
final paymentIntent = await _stripeService.createPaymentIntent(
amount: reservation.totalAmount,
currency: 'usd',
paymentMethodId: paymentMethod.id,
);
// Confirm payment
final confirmed = await _stripeService.confirmPayment(paymentIntent.id);
if (confirmed.status == 'succeeded') {
return PaymentResult.success(
transactionId: confirmed.id,
amount: reservation.totalAmount,
);
} else {
return PaymentResult.failure('Payment failed: ${confirmed.status}');
}
} catch (e, st) {
developer.log('Payment processing failed', error: e, stackTrace: st);
return PaymentResult.failure('Payment processing error');
}
}
}
/// Create event ticket payment
Future<TicketPurchaseResult> purchaseEventTickets({
required String eventId,
required int ticketCount,
required PaymentMethod paymentMethod,
}) async {
final event = await _eventService.getEvent(eventId);
// Calculate total amount (includes platform fee)
final ticketPrice = event.ticketPrice;
final subtotal = ticketPrice * ticketCount;
final platformFee = subtotal * 0.10; // 10% platform fee
final total = subtotal + platformFee;
// Process payment
final paymentResult = await _paymentService.processPayment(
amount: total,
paymentMethod: paymentMethod,
);
if (paymentResult.isSuccess) {
// Create tickets
final tickets = await _ticketService.createTickets(
eventId: eventId,
ticketCount: ticketCount,
transactionId: paymentResult.transactionId,
);
return TicketPurchaseResult.success(tickets);
} else {
return TicketPurchaseResult.failure(paymentResult.error);
}
}
/// Calculate revenue split for multi-party event
Future<RevenueSplit> calculateRevenueSplit({
required Event event,
required double totalRevenue,
}) async {
// Get event partners
final partners = await _partnershipService.getEventPartners(event.id);
// Calculate splits based on pre-event agreements
final splits = <RevenueShare>[];
for (final partner in partners) {
final shareAmount = totalRevenue * partner.revenuePercentage;
splits.add(RevenueShare(
partnerId: partner.id,
amount: shareAmount,
percentage: partner.revenuePercentage,
));
}
// Platform fee (10%)
final platformFee = totalRevenue * 0.10;
splits.add(RevenueShare(
partnerId: 'platform',
amount: platformFee,
percentage: 0.10,
));
return RevenueSplit(
totalRevenue: totalRevenue,
platformFee: platformFee,
partnerSplits: splits,
);
}
/// Process refund for cancellation
Future<RefundResult> processRefund({
required Reservation reservation,
required CancellationReason reason,
}) async {
// Check cancellation policy
final policy = reservation.cancellationPolicy;
final refundAmount = policy.calculateRefund(
originalAmount: reservation.totalAmount,
cancellationTime: DateTime.now(),
reason: reason,
);
if (refundAmount > 0) {
// Process Stripe refund
final refund = await _stripeService.createRefund(
paymentIntentId: reservation.paymentIntentId,
amount: refundAmount,
reason: reason.toString(),
);
return RefundResult.success(
refundId: refund.id,
amount: refundAmount,
);
} else {
return RefundResult.noRefund('Outside refund window');
}
}
lib/core/services/payment_service.dartlib/injection_container_payment.dartdocs/plans/monetization_business_expertise/development
--- name: world-model-development description: Guides world model development patterns: state/action encoders, ONNX inference, feature extraction pipeline, latency budgets. Use when implementing world model components, state encoders, action encoders, feature extractors, or ONNX models. Core skill for Phases 3-6. --- # World Model Development Patterns ## Core Principle All world model components follow LeCun's autonomous machine intelligence framework. State observations flow through a percep
tools
Implements base workflow controller patterns for multi-step processes. Use when creating complex workflows that require orchestration of multiple steps with error handling and rollback.
testing
--- name: widget-test-patterns description: Guides widget test patterns: BLoC testing, user interactions, state changes, material app setup. Use when writing widget tests, testing UI components, or validating widget behavior. --- # Widget Test Patterns ## Core Pattern Widget tests verify UI behavior: user interactions, state changes, and visual display. ## Basic Widget Test Setup ```dart testWidgets('widget displays correctly', (WidgetTester tester) async { // Arrange: Create widget awa
testing
--- name: test-template-generation description: Generates test templates: unit, widget, integration, service tests following project patterns. Use when creating new tests or ensuring tests follow project standards. --- # Test Template Generation ## Available Templates Test templates are located in `test/templates/`: - `unit_test_template.dart` - `widget_test_template.dart` - `integration_test_template.dart` - `service_test_template.dart` ## Unit Test Template ```dart /// SPOTS Component Uni