use crate::Database;
use stateset_core::{
CreatePayment, CreatePaymentMethod, CreateRefund, Payment, PaymentFilter,
PaymentMethod, Refund, Result,
};
use std::sync::Arc;
use uuid::Uuid;
pub struct Payments {
db: Arc<dyn Database>,
}
impl Payments {
pub(crate) fn new(db: Arc<dyn Database>) -> Self {
Self { db }
}
pub fn create(&self, input: CreatePayment) -> Result<Payment> {
self.db.payments().create(input)
}
pub fn get(&self, id: Uuid) -> Result<Option<Payment>> {
self.db.payments().get(id)
}
pub fn get_by_number(&self, payment_number: &str) -> Result<Option<Payment>> {
self.db.payments().get_by_number(payment_number)
}
pub fn get_by_external_id(&self, external_id: &str) -> Result<Option<Payment>> {
self.db.payments().get_by_external_id(external_id)
}
pub fn update(&self, id: Uuid, input: stateset_core::UpdatePayment) -> Result<Payment> {
self.db.payments().update(id, input)
}
pub fn list(&self, filter: PaymentFilter) -> Result<Vec<Payment>> {
self.db.payments().list(filter)
}
pub fn for_order(&self, order_id: Uuid) -> Result<Vec<Payment>> {
self.db.payments().for_order(order_id)
}
pub fn for_invoice(&self, invoice_id: Uuid) -> Result<Vec<Payment>> {
self.db.payments().for_invoice(invoice_id)
}
pub fn mark_processing(&self, id: Uuid) -> Result<Payment> {
self.db.payments().mark_processing(id)
}
pub fn mark_completed(&self, id: Uuid) -> Result<Payment> {
self.db.payments().mark_completed(id)
}
pub fn mark_failed(&self, id: Uuid, reason: &str, code: Option<&str>) -> Result<Payment> {
self.db.payments().mark_failed(id, reason, code)
}
pub fn cancel(&self, id: Uuid) -> Result<Payment> {
self.db.payments().cancel(id)
}
pub fn create_refund(&self, input: CreateRefund) -> Result<Refund> {
self.db.payments().create_refund(input)
}
pub fn get_refund(&self, id: Uuid) -> Result<Option<Refund>> {
self.db.payments().get_refund(id)
}
pub fn get_refunds(&self, payment_id: Uuid) -> Result<Vec<Refund>> {
self.db.payments().get_refunds(payment_id)
}
pub fn complete_refund(&self, id: Uuid) -> Result<Refund> {
self.db.payments().complete_refund(id)
}
pub fn fail_refund(&self, id: Uuid, reason: &str) -> Result<Refund> {
self.db.payments().fail_refund(id, reason)
}
pub fn create_payment_method(&self, input: CreatePaymentMethod) -> Result<PaymentMethod> {
self.db.payments().create_payment_method(input)
}
pub fn get_payment_methods(&self, customer_id: Uuid) -> Result<Vec<PaymentMethod>> {
self.db.payments().get_payment_methods(customer_id)
}
pub fn delete_payment_method(&self, id: Uuid) -> Result<()> {
self.db.payments().delete_payment_method(id)
}
pub fn set_default_payment_method(&self, customer_id: Uuid, method_id: Uuid) -> Result<()> {
self.db.payments().set_default_payment_method(customer_id, method_id)
}
pub fn count(&self, filter: PaymentFilter) -> Result<u64> {
self.db.payments().count(filter)
}
}