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"` 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 }