File
Description
Create checkout session request
|
amount
|
Type : number
|
Decorators :
@Expose() @IsNumber() @Min(50)
|
|
|
|
Optional
cancel_url
|
Type : string
|
Decorators :
@Expose() @IsString() @IsOptional()
|
|
|
|
company_id
|
Type : number
|
Decorators :
@Expose() @IsNumber()
|
|
|
|
Optional
currency
|
Type : string
|
Default value : "usd"
|
Decorators :
@Expose() @IsString() @IsOptional()
|
|
|
|
Optional
customer_email
|
Type : string
|
Decorators :
@Expose() @IsEmail() @IsOptional()
|
|
|
|
invoice_id
|
Type : number
|
Decorators :
@Expose() @IsNumber()
|
|
|
|
Optional
participant_id
|
Type : string
|
Decorators :
@Expose() @IsString() @IsOptional()
|
|
|
|
Optional
success_url
|
Type : string
|
Decorators :
@Expose() @IsString() @IsOptional()
|
|
|
import { Exclude, Expose, Type } from "class-transformer";
import { IsEmail, IsNumber, IsOptional, IsString, Min } from "class-validator";
/**
* Create checkout session request
*/
@Exclude()
export class CreateCheckoutSessionDto {
@Expose()
@IsNumber()
company_id!: number;
@Expose()
@IsNumber()
invoice_id!: number;
@Expose()
@IsNumber()
@Min(50) // Minimum $0.50
amount!: number; // Amount in cents
@Expose()
@IsString()
@IsOptional()
currency?: string = "usd";
@Expose()
@IsEmail()
@IsOptional()
customer_email?: string;
@Expose()
@IsString()
@IsOptional()
participant_id?: string;
@Expose()
@IsString()
@IsOptional()
success_url?: string;
@Expose()
@IsString()
@IsOptional()
cancel_url?: string;
}
/**
* Checkout session response
*/
@Exclude()
export class CheckoutSessionResponseDto {
@Expose()
session_id!: string;
@Expose()
session_url!: string;
@Expose()
publishable_key!: string;
}
/**
* Get Stripe publishable key
*/
@Exclude()
export class StripePublishableKeyDto {
@Expose()
publishable_key!: string;
}
/**
* Create payment intent request (for embedded card form)
*/
@Exclude()
export class CreatePaymentIntentDto {
@Expose()
@IsNumber()
@IsOptional()
company_id?: number;
@Expose()
@IsNumber()
@IsOptional()
invoice_id?: number;
@Expose()
@Type(() => Number)
@IsOptional()
amount?: number; // Amount in cents (>= 0, validated in service)
@Expose()
@IsString()
@IsOptional()
currency?: string = "usd";
@Expose()
@IsEmail()
@IsOptional()
customer_email?: string;
@Expose()
@IsString()
@IsOptional()
customer_name?: string;
}
/**
* Payment intent response (contains client_secret for frontend)
* For $0 amounts, this will contain a setup_intent_id instead of payment_intent_id
*/
@Exclude()
export class PaymentIntentResponseDto {
@Expose()
client_secret!: string;
@Expose()
payment_intent_id?: string; // Only present for paid amounts
@Expose()
setup_intent_id?: string; // Only present for $0 amounts (trial packages)
@Expose()
publishable_key!: string;
@Expose()
stripe_customer_id!: string;
@Expose()
is_setup_intent?: boolean; // Flag to indicate if this is a setup intent
}
/**
* Confirm payment (after card element submission)
*/
@Exclude()
export class ConfirmPaymentDto {
@Expose()
@IsString()
payment_intent_id!: string;
@Expose()
@IsNumber()
invoice_id!: number;
}