Files
herolib/lib/threefold/models_to_move/business/payment.v
2025-09-17 14:41:42 +02:00

199 lines
5.6 KiB
V

module business
import time
// PaymentStatus represents the status of a payment
pub enum PaymentStatus {
pending // Payment is pending
processing // Payment is being processed
completed // Payment has been completed
failed // Payment has failed
refunded // Payment has been refunded
}
// Payment represents a financial transaction
@[heap]
pub struct Payment {
pub mut:
id u32 // Unique payment ID
payment_intent_id string // Stripe payment intent ID for tracking
company_id u32 // Reference to the company this payment is for
payment_plan string // Payment plan ("monthly", "yearly", "two_year")
setup_fee f64 // Setup fee amount
monthly_fee f64 // Monthly fee amount
total_amount f64 // Total payment amount
currency string // Currency code (e.g., "usd")
status PaymentStatus // Payment status
stripe_customer_id ?string // Optional Stripe customer ID
created_at i64 // Creation timestamp
completed_at ?i64 // Completion timestamp
updated_at u64 // Last update timestamp
}
// new creates a new Payment
pub fn Payment.new(payment_intent_id string, company_id u32, payment_plan string, setup_fee f64, monthly_fee f64, total_amount f64) Payment {
now := time.now().unix_time()
return Payment{
id: 0
payment_intent_id: payment_intent_id
company_id: company_id
payment_plan: payment_plan
setup_fee: setup_fee
monthly_fee: monthly_fee
total_amount: total_amount
currency: 'usd'
status: .pending
stripe_customer_id: none
created_at: now
completed_at: none
updated_at: u64(now)
}
}
// payment_intent_id sets the payment intent ID (builder pattern)
pub fn (mut p Payment) payment_intent_id(payment_intent_id string) Payment {
p.payment_intent_id = payment_intent_id
return p
}
// company_id sets the company ID (builder pattern)
pub fn (mut p Payment) company_id(company_id u32) Payment {
p.company_id = company_id
return p
}
// payment_plan sets the payment plan (builder pattern)
pub fn (mut p Payment) payment_plan(payment_plan string) Payment {
p.payment_plan = payment_plan
return p
}
// setup_fee sets the setup fee (builder pattern)
pub fn (mut p Payment) setup_fee(setup_fee f64) Payment {
p.setup_fee = setup_fee
return p
}
// monthly_fee sets the monthly fee (builder pattern)
pub fn (mut p Payment) monthly_fee(monthly_fee f64) Payment {
p.monthly_fee = monthly_fee
return p
}
// total_amount sets the total amount (builder pattern)
pub fn (mut p Payment) total_amount(total_amount f64) Payment {
p.total_amount = total_amount
return p
}
// status sets the status (builder pattern)
pub fn (mut p Payment) status(status PaymentStatus) Payment {
p.status = status
return p
}
// stripe_customer_id sets the Stripe customer ID (builder pattern)
pub fn (mut p Payment) stripe_customer_id(stripe_customer_id ?string) Payment {
p.stripe_customer_id = stripe_customer_id
return p
}
// currency sets the currency (builder pattern)
pub fn (mut p Payment) currency(currency string) Payment {
p.currency = currency
return p
}
// created_at sets the creation timestamp (builder pattern)
pub fn (mut p Payment) created_at(created_at i64) Payment {
p.created_at = created_at
return p
}
// completed_at sets the completion timestamp (builder pattern)
pub fn (mut p Payment) completed_at(completed_at ?i64) Payment {
p.completed_at = completed_at
return p
}
// complete_payment completes the payment with optional Stripe customer ID
pub fn (mut p Payment) complete_payment(stripe_customer_id ?string) Payment {
p.status = .completed
p.stripe_customer_id = stripe_customer_id
p.completed_at = time.now().unix_time()
p.updated_at = u64(time.now().unix_time())
return p
}
// process_payment marks payment as processing
pub fn (mut p Payment) process_payment() Payment {
p.status = .processing
p.updated_at = u64(time.now().unix_time())
return p
}
// fail_payment marks payment as failed
pub fn (mut p Payment) fail_payment() Payment {
p.status = .failed
p.updated_at = u64(time.now().unix_time())
return p
}
// refund_payment refunds the payment
pub fn (mut p Payment) refund_payment() Payment {
p.status = .refunded
p.updated_at = u64(time.now().unix_time())
return p
}
// is_completed checks if payment is completed
pub fn (p Payment) is_completed() bool {
return p.status == .completed
}
// is_pending checks if payment is pending
pub fn (p Payment) is_pending() bool {
return p.status == .pending
}
// is_processing checks if payment is processing
pub fn (p Payment) is_processing() bool {
return p.status == .processing
}
// has_failed checks if payment has failed
pub fn (p Payment) has_failed() bool {
return p.status == .failed
}
// is_refunded checks if payment is refunded
pub fn (p Payment) is_refunded() bool {
return p.status == .refunded
}
// status_string returns the status as a string
pub fn (p Payment) status_string() string {
return match p.status {
.pending { 'Pending' }
.processing { 'Processing' }
.completed { 'Completed' }
.failed { 'Failed' }
.refunded { 'Refunded' }
}
}
// is_monthly_plan checks if this is a monthly payment plan
pub fn (p Payment) is_monthly_plan() bool {
return p.payment_plan == 'monthly'
}
// is_yearly_plan checks if this is a yearly payment plan
pub fn (p Payment) is_yearly_plan() bool {
return p.payment_plan == 'yearly'
}
// is_two_year_plan checks if this is a two-year payment plan
pub fn (p Payment) is_two_year_plan() bool {
return p.payment_plan == 'two_year'
}