apskel-pos-backend/internal/models/payment_method.go
2025-08-03 23:55:51 +07:00

79 lines
2.3 KiB
Go

package models
import (
"apskel-pos-be/internal/constants"
"time"
"github.com/google/uuid"
)
type PaymentMethod struct {
ID uuid.UUID
OrganizationID uuid.UUID
Name string
Type constants.PaymentMethodType
Processor *string
Configuration map[string]interface{}
IsActive bool
CreatedAt time.Time
UpdatedAt time.Time
}
type CreatePaymentMethodRequest struct {
OrganizationID uuid.UUID `validate:"required"`
OutletID uuid.UUID `validate:"required"`
Name string `validate:"required,min=1,max=100"`
Type constants.PaymentMethodType `validate:"required"`
Processor *string `validate:"omitempty,max=100"`
Configuration map[string]interface{} `validate:"omitempty"`
IsActive *bool `validate:"omitempty"`
}
type UpdatePaymentMethodRequest struct {
Name *string `validate:"omitempty,min=1,max=100"`
Type *constants.PaymentMethodType `validate:"omitempty"`
Processor *string `validate:"omitempty,max=100"`
Configuration map[string]interface{} `validate:"omitempty"`
IsActive *bool `validate:"omitempty"`
}
type PaymentMethodResponse struct {
ID uuid.UUID
OrganizationID uuid.UUID
Name string
Type constants.PaymentMethodType
Processor *string
Configuration map[string]interface{}
IsActive bool
CreatedAt time.Time
UpdatedAt time.Time
}
type ListPaymentMethodsRequest struct {
OrganizationID *uuid.UUID
Type *constants.PaymentMethodType
IsActive *bool
Search string
Page int `validate:"min=1"`
Limit int `validate:"min=1,max=100"`
}
type ListPaymentMethodsResponse struct {
PaymentMethods []PaymentMethodResponse
TotalCount int
Page int
Limit int
TotalPages int
}
func (pm *PaymentMethod) IsDigital() bool {
return pm.Type == constants.PaymentMethodTypeCard ||
pm.Type == constants.PaymentMethodTypeDigitalWallet ||
pm.Type == constants.PaymentMethodTypeEDC ||
pm.Type == constants.PaymentMethodTypeQR
}
func (pm *PaymentMethod) RequiresProcessor() bool {
return pm.IsDigital() && pm.Processor != nil
}