scommerce

package
v0.0.0-...-f6762a0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 21, 2025 License: MIT Imports: 12 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrExceededMaxRetries = errors.New("exceeded maximum retry attempts")

Functions

func GetSafeLimit

func GetSafeLimit(limit int64) int64

Types

type App

type App[AccountID comparable] struct {
	AccountManager        UserAccountManager[AccountID]
	OrderManager          UserOrderManager[AccountID]
	PaymentMethodManager  UserPaymentMethodManager[AccountID]
	AddressManager        UserAddressManager[AccountID]
	ShoppingCartManager   UserShoppingCartManager[AccountID]
	RoleManager           UserRoleManager
	ProductManager        ProductManager[AccountID]
	CountryManager        CountryManager
	PaymentTypeManager    PaymentTypeManager
	ShippingMethodManager ShippingMethodManager
	OrderStatusManager    OrderStatusManager
	UserReviewManager     UserReviewManager[AccountID]
	SubscriptionManager   ProductItemSubscriptionManager[AccountID]
	DiscountManager       UserDiscountManager[AccountID]
	FactorManager         UserFactorManager[AccountID]
}

func NewBuiltinApplication

func NewBuiltinApplication[AccountID comparable](conf *AppConfig[AccountID]) (*App[AccountID], error)

func (*App[AccountID]) Close

func (app *App[AccountID]) Close(ctx context.Context) error

func (*App[AccountID]) Init

func (app *App[AccountID]) Init(ctx context.Context) error

func (*App[AccountID]) Pulse

func (app *App[AccountID]) Pulse(ctx context.Context) error

type AppConfig

type AppConfig[AccountID comparable] struct {
	DB                         DBApplication[AccountID]
	FileStorage                FileStorage
	OTPCodeLength              int32
	OTPTokenLength             int32
	OTPTTL                     time.Duration
	SubscriptionRenewalHandler RenewalHandlerFunc[AccountID]
	DiscountCodeLength         int32
}

type BuiltinCountry

type BuiltinCountry struct {
	CountryForm
	DB DBCountry    `json:"-"`
	MU sync.RWMutex `json:"-"`
}

func (*BuiltinCountry) ApplyFormObject

func (country *BuiltinCountry) ApplyFormObject(ctx context.Context, form *CountryForm) error

func (*BuiltinCountry) Close

func (country *BuiltinCountry) Close(ctx context.Context) error

func (*BuiltinCountry) GetID

func (country *BuiltinCountry) GetID(ctx context.Context) (uint64, error)

func (*BuiltinCountry) GetName

func (country *BuiltinCountry) GetName(ctx context.Context) (string, error)

func (*BuiltinCountry) Init

func (country *BuiltinCountry) Init(ctx context.Context) error

func (*BuiltinCountry) Pulse

func (country *BuiltinCountry) Pulse(ctx context.Context) error

func (*BuiltinCountry) SetName

func (country *BuiltinCountry) SetName(ctx context.Context, name string) error

func (*BuiltinCountry) ToBuiltinObject

func (country *BuiltinCountry) ToBuiltinObject(ctx context.Context) (*BuiltinCountry, error)

func (*BuiltinCountry) ToFormObject

func (country *BuiltinCountry) ToFormObject(ctx context.Context) (*CountryForm, error)

type BuiltinCountryManager

type BuiltinCountryManager struct {
	DB countryDatabase
}

func NewBuiltinCountryManager

func NewBuiltinCountryManager(db countryDatabase) *BuiltinCountryManager

func (*BuiltinCountryManager) Close

func (countryManager *BuiltinCountryManager) Close(ctx context.Context) error

func (*BuiltinCountryManager) ExistsCountry

func (countryManager *BuiltinCountryManager) ExistsCountry(ctx context.Context, name string) (bool, error)

func (*BuiltinCountryManager) GetCountries

func (countryManager *BuiltinCountryManager) GetCountries(ctx context.Context, countries []Country, skip int64, limit int64, queueOrder QueueOrder) ([]Country, error)

func (*BuiltinCountryManager) GetCountryByName

func (countryManager *BuiltinCountryManager) GetCountryByName(ctx context.Context, name string) (Country, error)

func (*BuiltinCountryManager) GetCountryCount

func (countryManager *BuiltinCountryManager) GetCountryCount(ctx context.Context) (uint64, error)

func (*BuiltinCountryManager) GetCountryWithID

func (countryManager *BuiltinCountryManager) GetCountryWithID(ctx context.Context, cid uint64, fill bool) (Country, error)

func (*BuiltinCountryManager) Init

func (countryManager *BuiltinCountryManager) Init(ctx context.Context) error

func (*BuiltinCountryManager) NewCountry

func (countryManager *BuiltinCountryManager) NewCountry(ctx context.Context, name string) (Country, error)

func (*BuiltinCountryManager) Pulse

func (countryManager *BuiltinCountryManager) Pulse(ctx context.Context) error

func (*BuiltinCountryManager) RemoveAllCountries

func (countryManager *BuiltinCountryManager) RemoveAllCountries(ctx context.Context) error

func (*BuiltinCountryManager) RemoveCountry

func (countryManager *BuiltinCountryManager) RemoveCountry(ctx context.Context, country Country) error

func (*BuiltinCountryManager) ToBuiltinObject

func (countryManager *BuiltinCountryManager) ToBuiltinObject(ctx context.Context) (*BuiltinCountryManager, error)

type BuiltinOrderStatus

type BuiltinOrderStatus struct {
	OrderStatusForm
	DB DBOrderStatus `json:"-"`
	MU sync.RWMutex  `json:"-"`
}

func (*BuiltinOrderStatus) ApplyFormObject

func (orderStatus *BuiltinOrderStatus) ApplyFormObject(ctx context.Context, form *OrderStatusForm) error

func (*BuiltinOrderStatus) Close

func (orderStatus *BuiltinOrderStatus) Close(ctx context.Context) error

func (*BuiltinOrderStatus) GetID

func (orderStatus *BuiltinOrderStatus) GetID(ctx context.Context) (uint64, error)

func (*BuiltinOrderStatus) GetName

func (orderStatus *BuiltinOrderStatus) GetName(ctx context.Context) (string, error)

func (*BuiltinOrderStatus) Init

func (orderStatus *BuiltinOrderStatus) Init(ctx context.Context) error

func (*BuiltinOrderStatus) IsDeliveried

func (orderStatus *BuiltinOrderStatus) IsDeliveried(ctx context.Context) (bool, error)

func (*BuiltinOrderStatus) Pulse

func (orderStatus *BuiltinOrderStatus) Pulse(ctx context.Context) error

func (*BuiltinOrderStatus) SetName

func (orderStatus *BuiltinOrderStatus) SetName(ctx context.Context, name string) error

func (*BuiltinOrderStatus) ToBuiltinObject

func (orderStatus *BuiltinOrderStatus) ToBuiltinObject(ctx context.Context) (*BuiltinOrderStatus, error)

func (*BuiltinOrderStatus) ToFormObject

func (orderStatus *BuiltinOrderStatus) ToFormObject(ctx context.Context) (*OrderStatusForm, error)

type BuiltinOrderStatusManager

type BuiltinOrderStatusManager struct {
	DB orderStatusDatabase
}

func NewBuiltinOrderStatusManager

func NewBuiltinOrderStatusManager(db orderStatusDatabase) *BuiltinOrderStatusManager

func (*BuiltinOrderStatusManager) Close

func (orderStatusManager *BuiltinOrderStatusManager) Close(ctx context.Context) error

func (*BuiltinOrderStatusManager) ExistsOrderStatus

func (orderStatusManager *BuiltinOrderStatusManager) ExistsOrderStatus(ctx context.Context, name string) (bool, error)

func (*BuiltinOrderStatusManager) GetDeliveriedOrderStatus

func (orderStatusManager *BuiltinOrderStatusManager) GetDeliveriedOrderStatus(ctx context.Context) (OrderStatus, error)

func (*BuiltinOrderStatusManager) GetIdleOrderStatus

func (orderStatusManager *BuiltinOrderStatusManager) GetIdleOrderStatus(ctx context.Context) (OrderStatus, error)

func (*BuiltinOrderStatusManager) GetOrderStatusByName

func (orderStatusManager *BuiltinOrderStatusManager) GetOrderStatusByName(ctx context.Context, name string) (OrderStatus, error)

func (*BuiltinOrderStatusManager) GetOrderStatusCount

func (orderStatusManager *BuiltinOrderStatusManager) GetOrderStatusCount(ctx context.Context) (uint64, error)

func (*BuiltinOrderStatusManager) GetOrderStatusWithID

func (orderStatusManager *BuiltinOrderStatusManager) GetOrderStatusWithID(ctx context.Context, sid uint64, fill bool) (OrderStatus, error)

func (*BuiltinOrderStatusManager) GetOrderStatuses

func (orderStatusManager *BuiltinOrderStatusManager) GetOrderStatuses(ctx context.Context, orderStatuses []OrderStatus, skip int64, limit int64, queueOrder QueueOrder) ([]OrderStatus, error)

func (*BuiltinOrderStatusManager) Init

func (orderStatusManager *BuiltinOrderStatusManager) Init(ctx context.Context) error

func (*BuiltinOrderStatusManager) NewOrderStatus

func (orderStatusManager *BuiltinOrderStatusManager) NewOrderStatus(ctx context.Context, name string) (OrderStatus, error)

func (*BuiltinOrderStatusManager) Pulse

func (orderStatusManager *BuiltinOrderStatusManager) Pulse(ctx context.Context) error

func (*BuiltinOrderStatusManager) RemoveAllOrderStatuses

func (orderStatusManager *BuiltinOrderStatusManager) RemoveAllOrderStatuses(ctx context.Context) error

func (*BuiltinOrderStatusManager) RemoveOrderStatus

func (orderStatusManager *BuiltinOrderStatusManager) RemoveOrderStatus(ctx context.Context, status OrderStatus) error

func (*BuiltinOrderStatusManager) ToBuiltinObject

func (orderStatusManager *BuiltinOrderStatusManager) ToBuiltinObject(ctx context.Context) (*BuiltinOrderStatusManager, error)

type BuiltinPaymentType

type BuiltinPaymentType struct {
	PaymentTypeForm
	DB DBPaymentType `json:"-"`
	MU sync.RWMutex  `json:"-"`
}

func (*BuiltinPaymentType) ApplyFormObject

func (paymentType *BuiltinPaymentType) ApplyFormObject(ctx context.Context, form *PaymentTypeForm) error

func (*BuiltinPaymentType) Close

func (paymentType *BuiltinPaymentType) Close(ctx context.Context) error

func (*BuiltinPaymentType) GetID

func (paymentType *BuiltinPaymentType) GetID(ctx context.Context) (uint64, error)

func (*BuiltinPaymentType) GetName

func (paymentType *BuiltinPaymentType) GetName(ctx context.Context) (string, error)

func (*BuiltinPaymentType) Init

func (paymentType *BuiltinPaymentType) Init(ctx context.Context) error

func (*BuiltinPaymentType) Pulse

func (paymentType *BuiltinPaymentType) Pulse(ctx context.Context) error

func (*BuiltinPaymentType) SetName

func (paymentType *BuiltinPaymentType) SetName(ctx context.Context, name string) error

func (*BuiltinPaymentType) ToBuiltinObject

func (paymentType *BuiltinPaymentType) ToBuiltinObject(ctx context.Context) (*BuiltinPaymentType, error)

func (*BuiltinPaymentType) ToFormObject

func (paymentType *BuiltinPaymentType) ToFormObject(ctx context.Context) (*PaymentTypeForm, error)

type BuiltinPaymentTypeManager

type BuiltinPaymentTypeManager struct {
	DB paymentTypeDatabase
}

func NewBuiltinPaymentTypeManager

func NewBuiltinPaymentTypeManager(db paymentTypeDatabase) *BuiltinPaymentTypeManager

func (*BuiltinPaymentTypeManager) Close

func (paymentTypeManager *BuiltinPaymentTypeManager) Close(ctx context.Context) error

func (*BuiltinPaymentTypeManager) ExistsPaymentType

func (paymentTypeManager *BuiltinPaymentTypeManager) ExistsPaymentType(ctx context.Context, name string) (bool, error)

func (*BuiltinPaymentTypeManager) GetPaymentTypeByName

func (paymentTypeManager *BuiltinPaymentTypeManager) GetPaymentTypeByName(ctx context.Context, name string) (PaymentType, error)

func (*BuiltinPaymentTypeManager) GetPaymentTypeCount

func (paymentTypeManager *BuiltinPaymentTypeManager) GetPaymentTypeCount(ctx context.Context) (uint64, error)

func (*BuiltinPaymentTypeManager) GetPaymentTypeWithID

func (paymentTypeManager *BuiltinPaymentTypeManager) GetPaymentTypeWithID(ctx context.Context, pid uint64, fill bool) (PaymentType, error)

func (*BuiltinPaymentTypeManager) GetPaymentTypes

func (paymentTypeManager *BuiltinPaymentTypeManager) GetPaymentTypes(ctx context.Context, paymentTypes []PaymentType, skip int64, limit int64, queueOrder QueueOrder) ([]PaymentType, error)

func (*BuiltinPaymentTypeManager) Init

func (paymentTypeManager *BuiltinPaymentTypeManager) Init(ctx context.Context) error

func (*BuiltinPaymentTypeManager) NewPaymentType

func (paymentTypeManager *BuiltinPaymentTypeManager) NewPaymentType(ctx context.Context, name string) (PaymentType, error)

func (*BuiltinPaymentTypeManager) Pulse

func (paymentTypeManager *BuiltinPaymentTypeManager) Pulse(ctx context.Context) error

func (*BuiltinPaymentTypeManager) RemoveAllPaymentTypes

func (paymentTypeManager *BuiltinPaymentTypeManager) RemoveAllPaymentTypes(ctx context.Context) error

func (*BuiltinPaymentTypeManager) RemovePaymentType

func (paymentTypeManager *BuiltinPaymentTypeManager) RemovePaymentType(ctx context.Context, status PaymentType) error

func (*BuiltinPaymentTypeManager) ToBuiltinObject

func (paymentTypeManager *BuiltinPaymentTypeManager) ToBuiltinObject(ctx context.Context) (*BuiltinPaymentTypeManager, error)

type BuiltinProduct

type BuiltinProduct[AccountID comparable] struct {
	ProductForm[AccountID]
	DB productDatabase[AccountID] `json:"-"`
	FS FileStorage                `json:"-"`
	MU sync.RWMutex               `json:"-"`
}

func (*BuiltinProduct[AccountID]) AddProductItem

func (product *BuiltinProduct[AccountID]) AddProductItem(ctx context.Context, sku string, name string, price float64, quantity uint64, images []FileReader, attrs json.RawMessage) (ProductItem[AccountID], error)

func (*BuiltinProduct[AccountID]) ApplyFormObject

func (product *BuiltinProduct[AccountID]) ApplyFormObject(ctx context.Context, form *ProductForm[AccountID]) error

func (*BuiltinProduct[AccountID]) Close

func (product *BuiltinProduct[AccountID]) Close(ctx context.Context) error

func (*BuiltinProduct[AccountID]) GetDescription

func (product *BuiltinProduct[AccountID]) GetDescription(ctx context.Context) (string, error)

func (*BuiltinProduct[AccountID]) GetID

func (product *BuiltinProduct[AccountID]) GetID(ctx context.Context) (uint64, error)

func (*BuiltinProduct[AccountID]) GetImages

func (product *BuiltinProduct[AccountID]) GetImages(ctx context.Context) ([]FileReadCloser, error)

func (*BuiltinProduct[AccountID]) GetName

func (product *BuiltinProduct[AccountID]) GetName(ctx context.Context) (string, error)

func (*BuiltinProduct[AccountID]) GetProductCategory

func (product *BuiltinProduct[AccountID]) GetProductCategory(ctx context.Context) (ProductCategory[AccountID], error)

func (*BuiltinProduct[AccountID]) GetProductItemCount

func (product *BuiltinProduct[AccountID]) GetProductItemCount(ctx context.Context) (uint64, error)

func (*BuiltinProduct[AccountID]) GetProductItems

func (product *BuiltinProduct[AccountID]) GetProductItems(ctx context.Context, items []ProductItem[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]ProductItem[AccountID], error)

func (*BuiltinProduct[AccountID]) Init

func (product *BuiltinProduct[AccountID]) Init(ctx context.Context) error

func (*BuiltinProduct[AccountID]) Pulse

func (product *BuiltinProduct[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinProduct[AccountID]) RemoveAllProductItems

func (product *BuiltinProduct[AccountID]) RemoveAllProductItems(ctx context.Context) error

func (*BuiltinProduct[AccountID]) RemoveProductItem

func (product *BuiltinProduct[AccountID]) RemoveProductItem(ctx context.Context, item ProductItem[AccountID]) error

func (*BuiltinProduct[AccountID]) SetDescription

func (product *BuiltinProduct[AccountID]) SetDescription(ctx context.Context, desc string) error

func (*BuiltinProduct[AccountID]) SetImages

func (product *BuiltinProduct[AccountID]) SetImages(ctx context.Context, images []FileReader) error

func (*BuiltinProduct[AccountID]) SetName

func (product *BuiltinProduct[AccountID]) SetName(ctx context.Context, name string) error

func (*BuiltinProduct[AccountID]) SetProductCategory

func (product *BuiltinProduct[AccountID]) SetProductCategory(ctx context.Context, category ProductCategory[AccountID]) error

func (*BuiltinProduct[AccountID]) ToBuiltinObject

func (product *BuiltinProduct[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinProduct[AccountID], error)

func (*BuiltinProduct[AccountID]) ToFormObject

func (product *BuiltinProduct[AccountID]) ToFormObject(ctx context.Context) (*ProductForm[AccountID], error)

type BuiltinProductCategory

type BuiltinProductCategory[AccountID comparable] struct {
	ProductCategoryForm[AccountID]
	DB productCategoryDatabase[AccountID] `json:"-"`
	FS FileStorage                        `json:"-"`
	MU sync.RWMutex                       `json:"-"`
}

func (*BuiltinProductCategory[AccountID]) ApplyFormObject

func (category *BuiltinProductCategory[AccountID]) ApplyFormObject(ctx context.Context, form *ProductCategoryForm[AccountID]) error

func (*BuiltinProductCategory[AccountID]) Close

func (category *BuiltinProductCategory[AccountID]) Close(ctx context.Context) error

func (*BuiltinProductCategory[AccountID]) GetID

func (category *BuiltinProductCategory[AccountID]) GetID(ctx context.Context) (uint64, error)

func (*BuiltinProductCategory[AccountID]) GetName

func (category *BuiltinProductCategory[AccountID]) GetName(ctx context.Context) (string, error)

func (*BuiltinProductCategory[AccountID]) GetParentProductCategory

func (category *BuiltinProductCategory[AccountID]) GetParentProductCategory(ctx context.Context) (ProductCategory[AccountID], error)

func (*BuiltinProductCategory[AccountID]) GetProductCount

func (category *BuiltinProductCategory[AccountID]) GetProductCount(ctx context.Context) (uint64, error)

func (*BuiltinProductCategory[AccountID]) GetProducts

func (category *BuiltinProductCategory[AccountID]) GetProducts(ctx context.Context, products []Product[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]Product[AccountID], error)

func (*BuiltinProductCategory[AccountID]) Init

func (category *BuiltinProductCategory[AccountID]) Init(ctx context.Context) error

func (*BuiltinProductCategory[AccountID]) NewProduct

func (category *BuiltinProductCategory[AccountID]) NewProduct(ctx context.Context, name string, description string, images []FileReader) (Product[AccountID], error)

func (*BuiltinProductCategory[AccountID]) Pulse

func (category *BuiltinProductCategory[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinProductCategory[AccountID]) RemoveAllProducts

func (category *BuiltinProductCategory[AccountID]) RemoveAllProducts(ctx context.Context) error

func (*BuiltinProductCategory[AccountID]) RemoveProduct

func (category *BuiltinProductCategory[AccountID]) RemoveProduct(ctx context.Context, product Product[AccountID]) error

func (*BuiltinProductCategory[AccountID]) SetName

func (category *BuiltinProductCategory[AccountID]) SetName(ctx context.Context, name string) error

func (*BuiltinProductCategory[AccountID]) SetParentProductCategory

func (category *BuiltinProductCategory[AccountID]) SetParentProductCategory(ctx context.Context, parent ProductCategory[AccountID]) error

func (*BuiltinProductCategory[AccountID]) ToBuiltinObject

func (category *BuiltinProductCategory[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinProductCategory[AccountID], error)

func (*BuiltinProductCategory[AccountID]) ToFormObject

func (category *BuiltinProductCategory[AccountID]) ToFormObject(ctx context.Context) (*ProductCategoryForm[AccountID], error)

type BuiltinProductItem

type BuiltinProductItem[AccountID comparable] struct {
	ProductItemForm[AccountID]
	DB productItemDatabase[AccountID] `json:"-"`
	FS FileStorage                    `json:"-"`
	MU sync.RWMutex                   `json:"-"`
}

func (*BuiltinProductItem[AccountID]) AddQuantityInStock

func (item *BuiltinProductItem[AccountID]) AddQuantityInStock(ctx context.Context, delta int64) error

func (*BuiltinProductItem[AccountID]) ApplyFormObject

func (item *BuiltinProductItem[AccountID]) ApplyFormObject(ctx context.Context, form *ProductItemForm[AccountID]) error

func (*BuiltinProductItem[AccountID]) CalculateAverageRating

func (item *BuiltinProductItem[AccountID]) CalculateAverageRating(ctx context.Context) (float64, error)

func (*BuiltinProductItem[AccountID]) Close

func (item *BuiltinProductItem[AccountID]) Close(ctx context.Context) error

func (*BuiltinProductItem[AccountID]) GetAttributes

func (item *BuiltinProductItem[AccountID]) GetAttributes(ctx context.Context) (json.RawMessage, error)

func (*BuiltinProductItem[AccountID]) GetID

func (item *BuiltinProductItem[AccountID]) GetID(ctx context.Context) (uint64, error)

func (*BuiltinProductItem[AccountID]) GetImages

func (item *BuiltinProductItem[AccountID]) GetImages(ctx context.Context) ([]FileReadCloser, error)

func (*BuiltinProductItem[AccountID]) GetName

func (item *BuiltinProductItem[AccountID]) GetName(ctx context.Context) (string, error)

func (*BuiltinProductItem[AccountID]) GetPrice

func (item *BuiltinProductItem[AccountID]) GetPrice(ctx context.Context) (float64, error)

func (*BuiltinProductItem[AccountID]) GetProduct

func (item *BuiltinProductItem[AccountID]) GetProduct(ctx context.Context) (Product[AccountID], error)

func (*BuiltinProductItem[AccountID]) GetQuantityInStock

func (item *BuiltinProductItem[AccountID]) GetQuantityInStock(ctx context.Context) (uint64, error)

func (*BuiltinProductItem[AccountID]) GetSKU

func (item *BuiltinProductItem[AccountID]) GetSKU(ctx context.Context) (string, error)

func (*BuiltinProductItem[AccountID]) GetUserReviewCount

func (item *BuiltinProductItem[AccountID]) GetUserReviewCount(ctx context.Context) (uint64, error)

func (*BuiltinProductItem[AccountID]) GetUserReviews

func (item *BuiltinProductItem[AccountID]) GetUserReviews(ctx context.Context, reviews []UserReview[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserReview[AccountID], error)

func (*BuiltinProductItem[AccountID]) Init

func (item *BuiltinProductItem[AccountID]) Init(ctx context.Context) error

func (*BuiltinProductItem[AccountID]) Pulse

func (item *BuiltinProductItem[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinProductItem[AccountID]) SetAttributes

func (item *BuiltinProductItem[AccountID]) SetAttributes(ctx context.Context, attrs json.RawMessage) error

func (*BuiltinProductItem[AccountID]) SetImages

func (item *BuiltinProductItem[AccountID]) SetImages(ctx context.Context, images []FileReader) error

func (*BuiltinProductItem[AccountID]) SetName

func (item *BuiltinProductItem[AccountID]) SetName(ctx context.Context, name string) error

func (*BuiltinProductItem[AccountID]) SetPrice

func (item *BuiltinProductItem[AccountID]) SetPrice(ctx context.Context, price float64) error

func (*BuiltinProductItem[AccountID]) SetProduct

func (item *BuiltinProductItem[AccountID]) SetProduct(ctx context.Context, product Product[AccountID]) error

func (*BuiltinProductItem[AccountID]) SetQuantityInStock

func (item *BuiltinProductItem[AccountID]) SetQuantityInStock(ctx context.Context, quantity uint64) error

func (*BuiltinProductItem[AccountID]) SetSKU

func (item *BuiltinProductItem[AccountID]) SetSKU(ctx context.Context, sku string) error

func (*BuiltinProductItem[AccountID]) ToBuiltinObject

func (item *BuiltinProductItem[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinProductItem[AccountID], error)

func (*BuiltinProductItem[AccountID]) ToFormObject

func (item *BuiltinProductItem[AccountID]) ToFormObject(ctx context.Context) (*ProductItemForm[AccountID], error)

type BuiltinProductItemSubscription

type BuiltinProductItemSubscription[AccountID comparable] struct {
	ProductItemSubscriptionForm[AccountID]
	DB productItemSubscriptionDatabase[AccountID] `json:"-"`
	FS FileStorage                                `json:"-"`
	MU sync.RWMutex                               `json:"-"`
}

func (*BuiltinProductItemSubscription[AccountID]) ApplyFormObject

func (subscription *BuiltinProductItemSubscription[AccountID]) ApplyFormObject(ctx context.Context, form *ProductItemSubscriptionForm[AccountID]) error

func (*BuiltinProductItemSubscription[AccountID]) Cancel

func (subscription *BuiltinProductItemSubscription[AccountID]) Cancel(ctx context.Context) error

func (*BuiltinProductItemSubscription[AccountID]) Close

func (subscription *BuiltinProductItemSubscription[AccountID]) Close(ctx context.Context) error

func (*BuiltinProductItemSubscription[AccountID]) GetDuration

func (subscription *BuiltinProductItemSubscription[AccountID]) GetDuration(ctx context.Context) (time.Duration, error)

func (*BuiltinProductItemSubscription[AccountID]) GetExpiresAt

func (subscription *BuiltinProductItemSubscription[AccountID]) GetExpiresAt(ctx context.Context) (time.Time, error)

func (*BuiltinProductItemSubscription[AccountID]) GetID

func (subscription *BuiltinProductItemSubscription[AccountID]) GetID(ctx context.Context) (uint64, error)

func (*BuiltinProductItemSubscription[AccountID]) GetProductItem

func (subscription *BuiltinProductItemSubscription[AccountID]) GetProductItem(ctx context.Context) (ProductItem[AccountID], error)

func (*BuiltinProductItemSubscription[AccountID]) GetSubscribedAt

func (subscription *BuiltinProductItemSubscription[AccountID]) GetSubscribedAt(ctx context.Context) (time.Time, error)

func (*BuiltinProductItemSubscription[AccountID]) GetSubscriptionType

func (subscription *BuiltinProductItemSubscription[AccountID]) GetSubscriptionType(ctx context.Context) (string, error)

func (*BuiltinProductItemSubscription[AccountID]) GetUserAccountID

func (subscription *BuiltinProductItemSubscription[AccountID]) GetUserAccountID(ctx context.Context) (AccountID, error)

func (*BuiltinProductItemSubscription[AccountID]) Init

func (subscription *BuiltinProductItemSubscription[AccountID]) Init(ctx context.Context) error

func (*BuiltinProductItemSubscription[AccountID]) IsActive

func (subscription *BuiltinProductItemSubscription[AccountID]) IsActive(ctx context.Context) (bool, error)

func (*BuiltinProductItemSubscription[AccountID]) IsAutoRenew

func (subscription *BuiltinProductItemSubscription[AccountID]) IsAutoRenew(ctx context.Context) (bool, error)

func (*BuiltinProductItemSubscription[AccountID]) IsExpired

func (subscription *BuiltinProductItemSubscription[AccountID]) IsExpired(ctx context.Context) (bool, error)

func (*BuiltinProductItemSubscription[AccountID]) Pulse

func (subscription *BuiltinProductItemSubscription[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinProductItemSubscription[AccountID]) SetActive

func (subscription *BuiltinProductItemSubscription[AccountID]) SetActive(ctx context.Context, isActive bool) error

func (*BuiltinProductItemSubscription[AccountID]) SetAutoRenew

func (subscription *BuiltinProductItemSubscription[AccountID]) SetAutoRenew(ctx context.Context, autoRenew bool) error

func (*BuiltinProductItemSubscription[AccountID]) SetDuration

func (subscription *BuiltinProductItemSubscription[AccountID]) SetDuration(ctx context.Context, duration time.Duration) error

func (*BuiltinProductItemSubscription[AccountID]) SetExpiresAt

func (subscription *BuiltinProductItemSubscription[AccountID]) SetExpiresAt(ctx context.Context, expiresAt time.Time) error

func (*BuiltinProductItemSubscription[AccountID]) SetProductItem

func (subscription *BuiltinProductItemSubscription[AccountID]) SetProductItem(ctx context.Context, productItem ProductItem[AccountID]) error

func (*BuiltinProductItemSubscription[AccountID]) SetSubscribedAt

func (subscription *BuiltinProductItemSubscription[AccountID]) SetSubscribedAt(ctx context.Context, subscribedAt time.Time) error

func (*BuiltinProductItemSubscription[AccountID]) SetSubscriptionType

func (subscription *BuiltinProductItemSubscription[AccountID]) SetSubscriptionType(ctx context.Context, subscriptionType string) error

func (*BuiltinProductItemSubscription[AccountID]) ToBuiltinObject

func (subscription *BuiltinProductItemSubscription[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinProductItemSubscription[AccountID], error)

func (*BuiltinProductItemSubscription[AccountID]) ToFormObject

func (subscription *BuiltinProductItemSubscription[AccountID]) ToFormObject(ctx context.Context) (*ProductItemSubscriptionForm[AccountID], error)

type BuiltinProductItemSubscriptionManager

type BuiltinProductItemSubscriptionManager[AccountID comparable] struct {
	DB             productItemSubscriptionDatabase[AccountID]
	FS             FileStorage
	RenewalHandler RenewalHandlerFunc[AccountID]
	MU             sync.RWMutex
}

func NewBuiltinProductItemSubscriptionManager

func NewBuiltinProductItemSubscriptionManager[AccountID comparable](db productItemSubscriptionDatabase[AccountID], fs FileStorage, renewalHandler RenewalHandlerFunc[AccountID]) *BuiltinProductItemSubscriptionManager[AccountID]

func (*BuiltinProductItemSubscriptionManager[AccountID]) Close

func (manager *BuiltinProductItemSubscriptionManager[AccountID]) Close(ctx context.Context) error

func (*BuiltinProductItemSubscriptionManager[AccountID]) GetProductItemSubscriptionCount

func (manager *BuiltinProductItemSubscriptionManager[AccountID]) GetProductItemSubscriptionCount(ctx context.Context, productItem ProductItem[AccountID]) (uint64, error)

func (*BuiltinProductItemSubscriptionManager[AccountID]) GetProductItemSubscriptionWithID

func (manager *BuiltinProductItemSubscriptionManager[AccountID]) GetProductItemSubscriptionWithID(ctx context.Context, sid uint64, fill bool) (ProductItemSubscription[AccountID], error)

func (*BuiltinProductItemSubscriptionManager[AccountID]) GetProductItemSubscriptions

func (manager *BuiltinProductItemSubscriptionManager[AccountID]) GetProductItemSubscriptions(ctx context.Context, productItem ProductItem[AccountID], subscriptions []ProductItemSubscription[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]ProductItemSubscription[AccountID], error)

func (*BuiltinProductItemSubscriptionManager[AccountID]) GetSubscriptionCount

func (manager *BuiltinProductItemSubscriptionManager[AccountID]) GetSubscriptionCount(ctx context.Context) (uint64, error)

func (*BuiltinProductItemSubscriptionManager[AccountID]) GetSubscriptions

func (manager *BuiltinProductItemSubscriptionManager[AccountID]) GetSubscriptions(ctx context.Context, subscriptions []ProductItemSubscription[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]ProductItemSubscription[AccountID], error)

func (*BuiltinProductItemSubscriptionManager[AccountID]) GetUserSubscriptionCount

func (manager *BuiltinProductItemSubscriptionManager[AccountID]) GetUserSubscriptionCount(ctx context.Context, account UserAccount[AccountID]) (uint64, error)

func (*BuiltinProductItemSubscriptionManager[AccountID]) GetUserSubscriptions

func (manager *BuiltinProductItemSubscriptionManager[AccountID]) GetUserSubscriptions(ctx context.Context, account UserAccount[AccountID], subscriptions []ProductItemSubscription[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]ProductItemSubscription[AccountID], error)

func (*BuiltinProductItemSubscriptionManager[AccountID]) Init

func (manager *BuiltinProductItemSubscriptionManager[AccountID]) Init(ctx context.Context) error

func (*BuiltinProductItemSubscriptionManager[AccountID]) NewSubscription

func (manager *BuiltinProductItemSubscriptionManager[AccountID]) NewSubscription(ctx context.Context, account UserAccount[AccountID], productItem ProductItem[AccountID], duration time.Duration, subscriptionType string, autoRenew bool) (ProductItemSubscription[AccountID], error)

func (*BuiltinProductItemSubscriptionManager[AccountID]) ProcessExpiredSubscriptions

func (manager *BuiltinProductItemSubscriptionManager[AccountID]) ProcessExpiredSubscriptions(ctx context.Context) error

func (*BuiltinProductItemSubscriptionManager[AccountID]) Pulse

func (manager *BuiltinProductItemSubscriptionManager[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinProductItemSubscriptionManager[AccountID]) RemoveAllSubscriptions

func (manager *BuiltinProductItemSubscriptionManager[AccountID]) RemoveAllSubscriptions(ctx context.Context) error

func (*BuiltinProductItemSubscriptionManager[AccountID]) RemoveSubscription

func (manager *BuiltinProductItemSubscriptionManager[AccountID]) RemoveSubscription(ctx context.Context, subscription ProductItemSubscription[AccountID]) error

func (*BuiltinProductItemSubscriptionManager[AccountID]) SetRenewalHandler

func (manager *BuiltinProductItemSubscriptionManager[AccountID]) SetRenewalHandler(ctx context.Context, handler RenewalHandlerFunc[AccountID]) error

func (*BuiltinProductItemSubscriptionManager[AccountID]) ToBuiltinObject

func (manager *BuiltinProductItemSubscriptionManager[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinProductItemSubscriptionManager[AccountID], error)

type BuiltinProductManager

type BuiltinProductManager[AccountID comparable] struct {
	DB productManagerDatabase[AccountID]
	FS FileStorage
}

func NewBuiltinProductManager

func NewBuiltinProductManager[AccountID comparable](db productManagerDatabase[AccountID], fs FileStorage) *BuiltinProductManager[AccountID]

func (*BuiltinProductManager[AccountID]) Close

func (productManager *BuiltinProductManager[AccountID]) Close(ctx context.Context) error

func (*BuiltinProductManager[AccountID]) GetProductCategories

func (productManager *BuiltinProductManager[AccountID]) GetProductCategories(ctx context.Context, categories []ProductCategory[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]ProductCategory[AccountID], error)

func (*BuiltinProductManager[AccountID]) GetProductCategoryCount

func (productManager *BuiltinProductManager[AccountID]) GetProductCategoryCount(ctx context.Context) (uint64, error)

func (*BuiltinProductManager[AccountID]) GetProductCategoryWithID

func (productManager *BuiltinProductManager[AccountID]) GetProductCategoryWithID(ctx context.Context, cid uint64, fill bool) (ProductCategory[AccountID], error)

func (*BuiltinProductManager[AccountID]) GetProductItemWithID

func (productManager *BuiltinProductManager[AccountID]) GetProductItemWithID(ctx context.Context, iid uint64, fill bool) (ProductItem[AccountID], error)

func (*BuiltinProductManager[AccountID]) GetProductWithID

func (productManager *BuiltinProductManager[AccountID]) GetProductWithID(ctx context.Context, pid uint64, fill bool) (Product[AccountID], error)

func (*BuiltinProductManager[AccountID]) Init

func (productManager *BuiltinProductManager[AccountID]) Init(ctx context.Context) error

func (*BuiltinProductManager[AccountID]) NewProductCategory

func (productManager *BuiltinProductManager[AccountID]) NewProductCategory(ctx context.Context, name string, parentCategory ProductCategory[AccountID]) (ProductCategory[AccountID], error)

func (*BuiltinProductManager[AccountID]) Pulse

func (productManager *BuiltinProductManager[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinProductManager[AccountID]) RemoveAllProductCategroies

func (productManager *BuiltinProductManager[AccountID]) RemoveAllProductCategroies(ctx context.Context) error

func (*BuiltinProductManager[AccountID]) RemoveProductCategory

func (productManager *BuiltinProductManager[AccountID]) RemoveProductCategory(ctx context.Context, category ProductCategory[AccountID]) error

func (*BuiltinProductManager[AccountID]) SearchForProductCategories

func (productManager *BuiltinProductManager[AccountID]) SearchForProductCategories(ctx context.Context, searchText string, deepSearch bool, categories []ProductCategory[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]ProductCategory[AccountID], error)

func (*BuiltinProductManager[AccountID]) SearchForProductItems

func (productManager *BuiltinProductManager[AccountID]) SearchForProductItems(ctx context.Context, searchText string, deepSearch bool, items []ProductItem[AccountID], skip int64, limit int64, queueOrder QueueOrder, product Product[AccountID], category ProductCategory[AccountID]) ([]ProductItem[AccountID], error)

func (*BuiltinProductManager[AccountID]) SearchForProducts

func (productManager *BuiltinProductManager[AccountID]) SearchForProducts(ctx context.Context, searchText string, deepSearch bool, products []Product[AccountID], skip int64, limit int64, queueOrder QueueOrder, category ProductCategory[AccountID]) ([]Product[AccountID], error)

func (*BuiltinProductManager[AccountID]) ToBuiltinObject

func (productManager *BuiltinProductManager[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinProductManager[AccountID], error)

type BuiltinShippingMethod

type BuiltinShippingMethod struct {
	ShippingMethodForm
	DB DBShippingMethod `json:"-"`
	MU sync.RWMutex     `json:"-"`
}

func (*BuiltinShippingMethod) ApplyFormObject

func (shippingMethod *BuiltinShippingMethod) ApplyFormObject(ctx context.Context, form *ShippingMethodForm) error

func (*BuiltinShippingMethod) Close

func (shippingMethod *BuiltinShippingMethod) Close(ctx context.Context) error

func (*BuiltinShippingMethod) GetID

func (shippingMethod *BuiltinShippingMethod) GetID(ctx context.Context) (uint64, error)

func (*BuiltinShippingMethod) GetName

func (shippingMethod *BuiltinShippingMethod) GetName(ctx context.Context) (string, error)

func (*BuiltinShippingMethod) GetPrice

func (shippingMethod *BuiltinShippingMethod) GetPrice(ctx context.Context) (float64, error)

func (*BuiltinShippingMethod) Init

func (shippingMethod *BuiltinShippingMethod) Init(ctx context.Context) error

func (*BuiltinShippingMethod) Pulse

func (shippingMethod *BuiltinShippingMethod) Pulse(ctx context.Context) error

func (*BuiltinShippingMethod) SetName

func (shippingMethod *BuiltinShippingMethod) SetName(ctx context.Context, name string) error

func (*BuiltinShippingMethod) SetPrice

func (shippingMethod *BuiltinShippingMethod) SetPrice(ctx context.Context, price float64) error

func (*BuiltinShippingMethod) ToBuiltinObject

func (shippingMethod *BuiltinShippingMethod) ToBuiltinObject(ctx context.Context) (*BuiltinShippingMethod, error)

func (*BuiltinShippingMethod) ToFormObject

func (shippingMethod *BuiltinShippingMethod) ToFormObject(ctx context.Context) (*ShippingMethodForm, error)

type BuiltinShippingMethodManager

type BuiltinShippingMethodManager struct {
	DB shippingMethodDatabase
}

func NewBuiltinShippingMethodManager

func NewBuiltinShippingMethodManager(db shippingMethodDatabase) *BuiltinShippingMethodManager

func (*BuiltinShippingMethodManager) Close

func (shippingMethodManager *BuiltinShippingMethodManager) Close(ctx context.Context) error

func (*BuiltinShippingMethodManager) ExistsShippingMethod

func (shippingMethodManager *BuiltinShippingMethodManager) ExistsShippingMethod(ctx context.Context, name string) (bool, error)

func (*BuiltinShippingMethodManager) GetShippingMethodByName

func (shippingMethodManager *BuiltinShippingMethodManager) GetShippingMethodByName(ctx context.Context, name string) (ShippingMethod, error)

func (*BuiltinShippingMethodManager) GetShippingMethodCount

func (shippingMethodManager *BuiltinShippingMethodManager) GetShippingMethodCount(ctx context.Context) (uint64, error)

func (*BuiltinShippingMethodManager) GetShippingMethodWithID

func (shippingMethodManager *BuiltinShippingMethodManager) GetShippingMethodWithID(ctx context.Context, sid uint64, fill bool) (ShippingMethod, error)

func (*BuiltinShippingMethodManager) GetShippingMethods

func (shippingMethodManager *BuiltinShippingMethodManager) GetShippingMethods(ctx context.Context, shippingMethodes []ShippingMethod, skip int64, limit int64, queueOrder QueueOrder) ([]ShippingMethod, error)

func (*BuiltinShippingMethodManager) Init

func (shippingMethodManager *BuiltinShippingMethodManager) Init(ctx context.Context) error

func (*BuiltinShippingMethodManager) NewShippingMethod

func (shippingMethodManager *BuiltinShippingMethodManager) NewShippingMethod(ctx context.Context, name string, price float64) (ShippingMethod, error)

func (*BuiltinShippingMethodManager) Pulse

func (shippingMethodManager *BuiltinShippingMethodManager) Pulse(ctx context.Context) error

func (*BuiltinShippingMethodManager) RemoveAllShippingMethods

func (shippingMethodManager *BuiltinShippingMethodManager) RemoveAllShippingMethods(ctx context.Context) error

func (*BuiltinShippingMethodManager) RemoveShippingMethod

func (shippingMethodManager *BuiltinShippingMethodManager) RemoveShippingMethod(ctx context.Context, method ShippingMethod) error

func (*BuiltinShippingMethodManager) ToBuiltinObject

func (shippingMethodManager *BuiltinShippingMethodManager) ToBuiltinObject(ctx context.Context) (*BuiltinShippingMethodManager, error)

type BuiltinUserAccount

type BuiltinUserAccount[AccountID comparable] struct {
	UserAccountForm[AccountID]
	DB                 userAccountDatabase[AccountID] `json:"-"`
	FS                 FileStorage                    `json:"-"`
	OrderStatusManager OrderStatusManager             `json:"-"`
	MU                 sync.RWMutex                   `json:"-"`
}

func (*BuiltinUserAccount[AccountID]) AllowTrading

func (account *BuiltinUserAccount[AccountID]) AllowTrading(ctx context.Context, state bool) error

func (*BuiltinUserAccount[AccountID]) ApplyFormObject

func (account *BuiltinUserAccount[AccountID]) ApplyFormObject(ctx context.Context, form *UserAccountForm[AccountID]) error

func (*BuiltinUserAccount[AccountID]) Ban

func (account *BuiltinUserAccount[AccountID]) Ban(ctx context.Context, till time.Duration, reason string) error

func (*BuiltinUserAccount[AccountID]) CalculateTotalDepts

func (account *BuiltinUserAccount[AccountID]) CalculateTotalDepts(ctx context.Context) (currency float64, err error)

func (*BuiltinUserAccount[AccountID]) CalculateTotalDeptsWithoutPenalty

func (account *BuiltinUserAccount[AccountID]) CalculateTotalDeptsWithoutPenalty(ctx context.Context) (currency float64, err error)

func (*BuiltinUserAccount[AccountID]) ChargeWallet

func (account *BuiltinUserAccount[AccountID]) ChargeWallet(ctx context.Context, currency float64) error

func (*BuiltinUserAccount[AccountID]) Close

func (account *BuiltinUserAccount[AccountID]) Close(ctx context.Context) error

func (*BuiltinUserAccount[AccountID]) Fine

func (account *BuiltinUserAccount[AccountID]) Fine(ctx context.Context, amount float64) error

func (*BuiltinUserAccount[AccountID]) GetAddressCount

func (account *BuiltinUserAccount[AccountID]) GetAddressCount(ctx context.Context) (uint64, error)

func (*BuiltinUserAccount[AccountID]) GetAddresses

func (account *BuiltinUserAccount[AccountID]) GetAddresses(ctx context.Context, addresses []UserAddress[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserAddress[AccountID], error)

func (*BuiltinUserAccount[AccountID]) GetBio

func (account *BuiltinUserAccount[AccountID]) GetBio(ctx context.Context) (string, error)

func (*BuiltinUserAccount[AccountID]) GetDefaultAddress

func (account *BuiltinUserAccount[AccountID]) GetDefaultAddress(ctx context.Context) (UserAddress[AccountID], error)

func (*BuiltinUserAccount[AccountID]) GetDefaultPaymentMethod

func (account *BuiltinUserAccount[AccountID]) GetDefaultPaymentMethod(ctx context.Context) (UserPaymentMethod[AccountID], error)

func (*BuiltinUserAccount[AccountID]) GetDiscountCount

func (account *BuiltinUserAccount[AccountID]) GetDiscountCount(ctx context.Context) (uint64, error)

func (*BuiltinUserAccount[AccountID]) GetDiscounts

func (account *BuiltinUserAccount[AccountID]) GetDiscounts(ctx context.Context, discounts []UserDiscount[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserDiscount[AccountID], error)

func (*BuiltinUserAccount[AccountID]) GetFirstName

func (account *BuiltinUserAccount[AccountID]) GetFirstName(ctx context.Context) (string, error)

func (*BuiltinUserAccount[AccountID]) GetID

func (account *BuiltinUserAccount[AccountID]) GetID(ctx context.Context) (AccountID, error)

func (*BuiltinUserAccount[AccountID]) GetLastName

func (account *BuiltinUserAccount[AccountID]) GetLastName(ctx context.Context) (string, error)

func (*BuiltinUserAccount[AccountID]) GetLastUpdatedAt

func (account *BuiltinUserAccount[AccountID]) GetLastUpdatedAt(ctx context.Context) (time.Time, error)

func (*BuiltinUserAccount[AccountID]) GetOrderCount

func (account *BuiltinUserAccount[AccountID]) GetOrderCount(ctx context.Context) (uint64, error)

func (*BuiltinUserAccount[AccountID]) GetOrders

func (account *BuiltinUserAccount[AccountID]) GetOrders(ctx context.Context, orders []UserOrder[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserOrder[AccountID], error)

func (*BuiltinUserAccount[AccountID]) GetPassword

func (account *BuiltinUserAccount[AccountID]) GetPassword(ctx context.Context) (string, error)

func (*BuiltinUserAccount[AccountID]) GetPaymentMethodCount

func (account *BuiltinUserAccount[AccountID]) GetPaymentMethodCount(ctx context.Context) (uint64, error)

func (*BuiltinUserAccount[AccountID]) GetPaymentMethods

func (account *BuiltinUserAccount[AccountID]) GetPaymentMethods(ctx context.Context, paymentMethods []UserPaymentMethod[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserPaymentMethod[AccountID], error)

func (*BuiltinUserAccount[AccountID]) GetProfileImages

func (account *BuiltinUserAccount[AccountID]) GetProfileImages(ctx context.Context) ([]FileReadCloser, error)

func (*BuiltinUserAccount[AccountID]) GetRole

func (account *BuiltinUserAccount[AccountID]) GetRole(ctx context.Context) (UserRole, error)

func (*BuiltinUserAccount[AccountID]) GetShoppingCartCount

func (account *BuiltinUserAccount[AccountID]) GetShoppingCartCount(ctx context.Context) (uint64, error)

func (*BuiltinUserAccount[AccountID]) GetShoppingCarts

func (account *BuiltinUserAccount[AccountID]) GetShoppingCarts(ctx context.Context, outCarts []UserShoppingCart[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserShoppingCart[AccountID], error)

func (*BuiltinUserAccount[AccountID]) GetSubscriptionCount

func (account *BuiltinUserAccount[AccountID]) GetSubscriptionCount(ctx context.Context) (uint64, error)

func (*BuiltinUserAccount[AccountID]) GetSubscriptions

func (account *BuiltinUserAccount[AccountID]) GetSubscriptions(ctx context.Context, subscriptions []ProductItemSubscription[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]ProductItemSubscription[AccountID], error)

func (*BuiltinUserAccount[AccountID]) GetToken

func (account *BuiltinUserAccount[AccountID]) GetToken(ctx context.Context) (string, error)

func (*BuiltinUserAccount[AccountID]) GetUserFactorCount

func (account *BuiltinUserAccount[AccountID]) GetUserFactorCount(ctx context.Context) (uint64, error)

func (*BuiltinUserAccount[AccountID]) GetUserFactors

func (account *BuiltinUserAccount[AccountID]) GetUserFactors(ctx context.Context, factors []UserFactor[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserFactor[AccountID], error)

func (*BuiltinUserAccount[AccountID]) GetUserLevel

func (account *BuiltinUserAccount[AccountID]) GetUserLevel(ctx context.Context) (int64, error)

func (*BuiltinUserAccount[AccountID]) GetUserReviewCount

func (account *BuiltinUserAccount[AccountID]) GetUserReviewCount(ctx context.Context) (uint64, error)

func (*BuiltinUserAccount[AccountID]) GetUserReviews

func (account *BuiltinUserAccount[AccountID]) GetUserReviews(ctx context.Context, reviews []UserReview[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserReview[AccountID], error)

func (*BuiltinUserAccount[AccountID]) GetWalletCurrency

func (account *BuiltinUserAccount[AccountID]) GetWalletCurrency(ctx context.Context) (float64, error)

func (*BuiltinUserAccount[AccountID]) HasPenalty

func (account *BuiltinUserAccount[AccountID]) HasPenalty(ctx context.Context) (bool, error)

func (*BuiltinUserAccount[AccountID]) Init

func (account *BuiltinUserAccount[AccountID]) Init(ctx context.Context) error

func (*BuiltinUserAccount[AccountID]) IsActive

func (account *BuiltinUserAccount[AccountID]) IsActive(ctx context.Context) (bool, error)

func (*BuiltinUserAccount[AccountID]) IsBanned

func (account *BuiltinUserAccount[AccountID]) IsBanned(ctx context.Context) (reason string, err error)

func (*BuiltinUserAccount[AccountID]) IsSuperUser

func (account *BuiltinUserAccount[AccountID]) IsSuperUser(ctx context.Context) (bool, error)

func (*BuiltinUserAccount[AccountID]) IsTradingAllowed

func (account *BuiltinUserAccount[AccountID]) IsTradingAllowed(ctx context.Context) (bool, error)

func (*BuiltinUserAccount[AccountID]) NewAddress

func (account *BuiltinUserAccount[AccountID]) NewAddress(ctx context.Context, unitNumber string, street_number string, addressLine1 string, addressLine2 string, city string, region string, postalCode string, country Country, isDefault bool) (UserAddress[AccountID], error)

func (*BuiltinUserAccount[AccountID]) NewDiscount

func (account *BuiltinUserAccount[AccountID]) NewDiscount(ctx context.Context, value float64, validCount int64) (UserDiscount[AccountID], error)

func (*BuiltinUserAccount[AccountID]) NewPaymentMethod

func (account *BuiltinUserAccount[AccountID]) NewPaymentMethod(ctx context.Context, paymentType PaymentType, provider string, accoutNumber string, expiryDate time.Time, isDefault bool) (UserPaymentMethod[AccountID], error)

func (*BuiltinUserAccount[AccountID]) NewShoppingCart

func (account *BuiltinUserAccount[AccountID]) NewShoppingCart(ctx context.Context, sessionText string) (UserShoppingCart[AccountID], error)

func (*BuiltinUserAccount[AccountID]) Pulse

func (account *BuiltinUserAccount[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinUserAccount[AccountID]) RemoveAddress

func (account *BuiltinUserAccount[AccountID]) RemoveAddress(ctx context.Context, address UserAddress[AccountID]) error

func (*BuiltinUserAccount[AccountID]) RemoveAllAddresses

func (account *BuiltinUserAccount[AccountID]) RemoveAllAddresses(ctx context.Context) error

func (*BuiltinUserAccount[AccountID]) RemoveAllDiscounts

func (account *BuiltinUserAccount[AccountID]) RemoveAllDiscounts(ctx context.Context) error

func (*BuiltinUserAccount[AccountID]) RemoveAllOrders

func (account *BuiltinUserAccount[AccountID]) RemoveAllOrders(ctx context.Context) error

func (*BuiltinUserAccount[AccountID]) RemoveAllPaymentMethods

func (account *BuiltinUserAccount[AccountID]) RemoveAllPaymentMethods(ctx context.Context) error

func (*BuiltinUserAccount[AccountID]) RemoveAllShoppingCarts

func (account *BuiltinUserAccount[AccountID]) RemoveAllShoppingCarts(ctx context.Context) error

func (*BuiltinUserAccount[AccountID]) RemoveAllSubscriptions

func (account *BuiltinUserAccount[AccountID]) RemoveAllSubscriptions(ctx context.Context) error

func (*BuiltinUserAccount[AccountID]) RemoveDiscount

func (account *BuiltinUserAccount[AccountID]) RemoveDiscount(ctx context.Context, discount UserDiscount[AccountID]) error

func (*BuiltinUserAccount[AccountID]) RemoveOrder

func (account *BuiltinUserAccount[AccountID]) RemoveOrder(ctx context.Context, order UserOrder[AccountID]) error

func (*BuiltinUserAccount[AccountID]) RemovePaymentMethod

func (account *BuiltinUserAccount[AccountID]) RemovePaymentMethod(ctx context.Context, paymentMethod UserPaymentMethod[AccountID]) error

func (*BuiltinUserAccount[AccountID]) RemoveShoppingCart

func (account *BuiltinUserAccount[AccountID]) RemoveShoppingCart(ctx context.Context, cart UserShoppingCart[AccountID]) error

func (*BuiltinUserAccount[AccountID]) RemoveSubscription

func (account *BuiltinUserAccount[AccountID]) RemoveSubscription(ctx context.Context, subscription ProductItemSubscription[AccountID]) error

func (*BuiltinUserAccount[AccountID]) SetActive

func (account *BuiltinUserAccount[AccountID]) SetActive(ctx context.Context, state bool) error

func (*BuiltinUserAccount[AccountID]) SetBio

func (account *BuiltinUserAccount[AccountID]) SetBio(ctx context.Context, bio string) error

func (*BuiltinUserAccount[AccountID]) SetFirstName

func (account *BuiltinUserAccount[AccountID]) SetFirstName(ctx context.Context, name string) error

func (*BuiltinUserAccount[AccountID]) SetLastName

func (account *BuiltinUserAccount[AccountID]) SetLastName(ctx context.Context, name string) error

func (*BuiltinUserAccount[AccountID]) SetLastUpdatedAt

func (account *BuiltinUserAccount[AccountID]) SetLastUpdatedAt(ctx context.Context, lastUpdateAt time.Time) error

func (*BuiltinUserAccount[AccountID]) SetPassword

func (account *BuiltinUserAccount[AccountID]) SetPassword(ctx context.Context, password string) error

func (*BuiltinUserAccount[AccountID]) SetPenalty

func (account *BuiltinUserAccount[AccountID]) SetPenalty(ctx context.Context, penalty float64) error

func (*BuiltinUserAccount[AccountID]) SetProfileImages

func (account *BuiltinUserAccount[AccountID]) SetProfileImages(ctx context.Context, images []FileReader) error

func (*BuiltinUserAccount[AccountID]) SetRole

func (account *BuiltinUserAccount[AccountID]) SetRole(ctx context.Context, role UserRole) error

func (*BuiltinUserAccount[AccountID]) SetSuperUser

func (account *BuiltinUserAccount[AccountID]) SetSuperUser(ctx context.Context, state bool) error

func (*BuiltinUserAccount[AccountID]) SetToken

func (account *BuiltinUserAccount[AccountID]) SetToken(ctx context.Context, token string) error

func (*BuiltinUserAccount[AccountID]) SetUserLevel

func (account *BuiltinUserAccount[AccountID]) SetUserLevel(ctx context.Context, level int64) error

func (*BuiltinUserAccount[AccountID]) SetWalletCurrency

func (account *BuiltinUserAccount[AccountID]) SetWalletCurrency(ctx context.Context, currency float64) error

func (*BuiltinUserAccount[AccountID]) ToBuiltinObject

func (account *BuiltinUserAccount[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinUserAccount[AccountID], error)

func (*BuiltinUserAccount[AccountID]) ToFormObject

func (account *BuiltinUserAccount[AccountID]) ToFormObject(ctx context.Context) (*UserAccountForm[AccountID], error)

func (*BuiltinUserAccount[AccountID]) TransferCurrency

func (account *BuiltinUserAccount[AccountID]) TransferCurrency(ctx context.Context, to UserAccount[AccountID], amount float64) error

func (*BuiltinUserAccount[AccountID]) Unban

func (account *BuiltinUserAccount[AccountID]) Unban(ctx context.Context) error

func (*BuiltinUserAccount[AccountID]) ValidatePassword

func (account *BuiltinUserAccount[AccountID]) ValidatePassword(ctx context.Context, password string) (bool, error)

type BuiltinUserAccountManager

type BuiltinUserAccountManager[AccountID comparable] struct {
	DB                 userAccountManagerDatabase[AccountID]
	FS                 FileStorage
	OTP                *otp.OTP
	OTPTTL             time.Duration
	OrderStatusManager OrderStatusManager
}

func NewBuiltinUserAccountManager

func NewBuiltinUserAccountManager[AccountID comparable](
	db userAccountManagerDatabase[AccountID],
	fs FileStorage,
	codeLength int32,
	tokenLength int32,
	otpTTL time.Duration,
	osm OrderStatusManager,
) (*BuiltinUserAccountManager[AccountID], error)

func (*BuiltinUserAccountManager[AccountID]) Authenticate

func (accountManager *BuiltinUserAccountManager[AccountID]) Authenticate(ctx context.Context, token string, password string, twoFactor string) (UserAccount[AccountID], error)

func (*BuiltinUserAccountManager[AccountID]) CancelTwoFactor

func (accountManager *BuiltinUserAccountManager[AccountID]) CancelTwoFactor(ctx context.Context, token string) error

func (*BuiltinUserAccountManager[AccountID]) Close

func (accountManager *BuiltinUserAccountManager[AccountID]) Close(ctx context.Context) error

func (*BuiltinUserAccountManager[AccountID]) GetAccount

func (accountManager *BuiltinUserAccountManager[AccountID]) GetAccount(ctx context.Context, token string) (UserAccount[AccountID], error)

func (*BuiltinUserAccountManager[AccountID]) GetAccountCount

func (accountManager *BuiltinUserAccountManager[AccountID]) GetAccountCount(ctx context.Context) (uint64, error)

func (*BuiltinUserAccountManager[AccountID]) GetAccountWithID

func (accountManager *BuiltinUserAccountManager[AccountID]) GetAccountWithID(ctx context.Context, aid AccountID, fill bool) (UserAccount[AccountID], error)

func (*BuiltinUserAccountManager[AccountID]) GetAccounts

func (accountManager *BuiltinUserAccountManager[AccountID]) GetAccounts(ctx context.Context, accounts []UserAccount[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserAccount[AccountID], error)

func (*BuiltinUserAccountManager[AccountID]) Init

func (accountManager *BuiltinUserAccountManager[AccountID]) Init(ctx context.Context) error

func (*BuiltinUserAccountManager[AccountID]) NewAccount

func (accountManager *BuiltinUserAccountManager[AccountID]) NewAccount(ctx context.Context, token string, password string, twoFactor string) (UserAccount[AccountID], error)

func (*BuiltinUserAccountManager[AccountID]) Pulse

func (accountManager *BuiltinUserAccountManager[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinUserAccountManager[AccountID]) RemoveAccount

func (accountManager *BuiltinUserAccountManager[AccountID]) RemoveAccount(ctx context.Context, account UserAccount[AccountID]) error

func (*BuiltinUserAccountManager[AccountID]) RemoveAccountWithToken

func (accountManager *BuiltinUserAccountManager[AccountID]) RemoveAccountWithToken(ctx context.Context, token string, password string, twoFactor string) error

func (*BuiltinUserAccountManager[AccountID]) RemoveAllAccounts

func (accountManager *BuiltinUserAccountManager[AccountID]) RemoveAllAccounts(ctx context.Context) error

func (*BuiltinUserAccountManager[AccountID]) RequestTwoFactor

func (accountManager *BuiltinUserAccountManager[AccountID]) RequestTwoFactor(ctx context.Context, token string) (string, error)

func (*BuiltinUserAccountManager[AccountID]) ToBuiltinObject

func (accountManager *BuiltinUserAccountManager[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinUserAccountManager[AccountID], error)

func (*BuiltinUserAccountManager[AccountID]) ValidateTwoFactor

func (accountManager *BuiltinUserAccountManager[AccountID]) ValidateTwoFactor(ctx context.Context, token string, code string) (bool, error)

type BuiltinUserAddress

type BuiltinUserAddress[AccountID comparable] struct {
	UserAddressForm[AccountID]
	DB userAddressDatabase[AccountID] `json:"-"`
	MU sync.RWMutex                   `json:"-"`
}

func (*BuiltinUserAddress[AccountID]) ApplyFormObject

func (address *BuiltinUserAddress[AccountID]) ApplyFormObject(ctx context.Context, form *UserAddressForm[AccountID]) error

func (*BuiltinUserAddress[AccountID]) Close

func (address *BuiltinUserAddress[AccountID]) Close(ctx context.Context) error

func (*BuiltinUserAddress[AccountID]) GetAddressLine1

func (address *BuiltinUserAddress[AccountID]) GetAddressLine1(ctx context.Context) (string, error)

func (*BuiltinUserAddress[AccountID]) GetAddressLine2

func (address *BuiltinUserAddress[AccountID]) GetAddressLine2(ctx context.Context) (string, error)

func (*BuiltinUserAddress[AccountID]) GetCity

func (address *BuiltinUserAddress[AccountID]) GetCity(ctx context.Context) (string, error)

func (*BuiltinUserAddress[AccountID]) GetCountry

func (address *BuiltinUserAddress[AccountID]) GetCountry(ctx context.Context) (Country, error)

func (*BuiltinUserAddress[AccountID]) GetID

func (address *BuiltinUserAddress[AccountID]) GetID(ctx context.Context) (uint64, error)

func (*BuiltinUserAddress[AccountID]) GetPostalCode

func (address *BuiltinUserAddress[AccountID]) GetPostalCode(ctx context.Context) (string, error)

func (*BuiltinUserAddress[AccountID]) GetRegion

func (address *BuiltinUserAddress[AccountID]) GetRegion(ctx context.Context) (string, error)

func (*BuiltinUserAddress[AccountID]) GetStreetNumber

func (address *BuiltinUserAddress[AccountID]) GetStreetNumber(ctx context.Context) (string, error)

func (*BuiltinUserAddress[AccountID]) GetUnitNumber

func (address *BuiltinUserAddress[AccountID]) GetUnitNumber(ctx context.Context) (string, error)

func (*BuiltinUserAddress[AccountID]) GetUserAccountID

func (address *BuiltinUserAddress[AccountID]) GetUserAccountID(ctx context.Context) (AccountID, error)

func (*BuiltinUserAddress[AccountID]) Init

func (address *BuiltinUserAddress[AccountID]) Init(ctx context.Context) error

func (*BuiltinUserAddress[AccountID]) IsDefault

func (address *BuiltinUserAddress[AccountID]) IsDefault(ctx context.Context) (bool, error)

func (*BuiltinUserAddress[AccountID]) Pulse

func (address *BuiltinUserAddress[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinUserAddress[AccountID]) SetAddressLine1

func (address *BuiltinUserAddress[AccountID]) SetAddressLine1(ctx context.Context, addressLine string) error

func (*BuiltinUserAddress[AccountID]) SetAddressLine2

func (address *BuiltinUserAddress[AccountID]) SetAddressLine2(ctx context.Context, addressLine string) error

func (*BuiltinUserAddress[AccountID]) SetCity

func (address *BuiltinUserAddress[AccountID]) SetCity(ctx context.Context, city string) error

func (*BuiltinUserAddress[AccountID]) SetCountry

func (address *BuiltinUserAddress[AccountID]) SetCountry(ctx context.Context, country Country) error

func (*BuiltinUserAddress[AccountID]) SetDefault

func (address *BuiltinUserAddress[AccountID]) SetDefault(ctx context.Context) error

func (*BuiltinUserAddress[AccountID]) SetPostalCode

func (address *BuiltinUserAddress[AccountID]) SetPostalCode(ctx context.Context, code string) error

func (*BuiltinUserAddress[AccountID]) SetRegion

func (address *BuiltinUserAddress[AccountID]) SetRegion(ctx context.Context, region string) error

func (*BuiltinUserAddress[AccountID]) SetStreetNumber

func (address *BuiltinUserAddress[AccountID]) SetStreetNumber(ctx context.Context, streetNumber string) error

func (*BuiltinUserAddress[AccountID]) SetUnitNumber

func (address *BuiltinUserAddress[AccountID]) SetUnitNumber(ctx context.Context, unitNumber string) error

func (*BuiltinUserAddress[AccountID]) ToBuiltinObject

func (address *BuiltinUserAddress[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinUserAddress[AccountID], error)

func (*BuiltinUserAddress[AccountID]) ToFormObject

func (address *BuiltinUserAddress[AccountID]) ToFormObject(ctx context.Context) (*UserAddressForm[AccountID], error)

type BuiltinUserAddressManager

type BuiltinUserAddressManager[AccountID comparable] struct {
	DB userAddressManagerDatabase[AccountID]
}

func NewBuiltinUserAddressManager

func NewBuiltinUserAddressManager[AccountID comparable](db userAddressManagerDatabase[AccountID]) *BuiltinUserAddressManager[AccountID]

func (*BuiltinUserAddressManager[AccountID]) Close

func (addressManager *BuiltinUserAddressManager[AccountID]) Close(ctx context.Context) error

func (*BuiltinUserAddressManager[AccountID]) GetAddressCount

func (addressManager *BuiltinUserAddressManager[AccountID]) GetAddressCount(ctx context.Context) (uint64, error)

func (*BuiltinUserAddressManager[AccountID]) GetAddressWithID

func (addressManager *BuiltinUserAddressManager[AccountID]) GetAddressWithID(ctx context.Context, aid uint64, fill bool) (UserAddress[AccountID], error)

func (*BuiltinUserAddressManager[AccountID]) GetAddresses

func (addressManager *BuiltinUserAddressManager[AccountID]) GetAddresses(ctx context.Context, addresses []UserAddress[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserAddress[AccountID], error)

func (*BuiltinUserAddressManager[AccountID]) Init

func (addressManager *BuiltinUserAddressManager[AccountID]) Init(ctx context.Context) error

func (*BuiltinUserAddressManager[AccountID]) Pulse

func (addressManager *BuiltinUserAddressManager[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinUserAddressManager[AccountID]) RemoveAllAddresses

func (addressManager *BuiltinUserAddressManager[AccountID]) RemoveAllAddresses(ctx context.Context) error

func (*BuiltinUserAddressManager[AccountID]) ToBuiltinObject

func (addressManager *BuiltinUserAddressManager[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinUserAddressManager[AccountID], error)

type BuiltinUserDiscount

type BuiltinUserDiscount[AccountID comparable] struct {
	UserDiscountForm[AccountID]
	DB userDiscountDatabase[AccountID] `json:"-"`
	MU sync.RWMutex                    `json:"-"`
}

func (*BuiltinUserDiscount[AccountID]) ApplyFormObject

func (discount *BuiltinUserDiscount[AccountID]) ApplyFormObject(ctx context.Context, form *UserDiscountForm[AccountID]) error

func (*BuiltinUserDiscount[AccountID]) Close

func (discount *BuiltinUserDiscount[AccountID]) Close(ctx context.Context) error

func (*BuiltinUserDiscount[AccountID]) DecrementValidCount

func (discount *BuiltinUserDiscount[AccountID]) DecrementValidCount(ctx context.Context) error

func (*BuiltinUserDiscount[AccountID]) GetCode

func (discount *BuiltinUserDiscount[AccountID]) GetCode(ctx context.Context) (string, error)

func (*BuiltinUserDiscount[AccountID]) GetID

func (discount *BuiltinUserDiscount[AccountID]) GetID(ctx context.Context) (uint64, error)

func (*BuiltinUserDiscount[AccountID]) GetUsedBy

func (discount *BuiltinUserDiscount[AccountID]) GetUsedBy(ctx context.Context) ([]AccountID, error)

func (*BuiltinUserDiscount[AccountID]) GetUserAccountID

func (discount *BuiltinUserDiscount[AccountID]) GetUserAccountID(ctx context.Context) (AccountID, error)

func (*BuiltinUserDiscount[AccountID]) GetValidCount

func (discount *BuiltinUserDiscount[AccountID]) GetValidCount(ctx context.Context) (int64, error)

func (*BuiltinUserDiscount[AccountID]) GetValue

func (discount *BuiltinUserDiscount[AccountID]) GetValue(ctx context.Context) (float64, error)

func (*BuiltinUserDiscount[AccountID]) HasUserUsed

func (discount *BuiltinUserDiscount[AccountID]) HasUserUsed(ctx context.Context, account UserAccount[AccountID]) (bool, error)

func (*BuiltinUserDiscount[AccountID]) Init

func (discount *BuiltinUserDiscount[AccountID]) Init(ctx context.Context) error

func (*BuiltinUserDiscount[AccountID]) MarkAsUsedBy

func (discount *BuiltinUserDiscount[AccountID]) MarkAsUsedBy(ctx context.Context, account UserAccount[AccountID]) error

func (*BuiltinUserDiscount[AccountID]) Pulse

func (discount *BuiltinUserDiscount[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinUserDiscount[AccountID]) SetCode

func (discount *BuiltinUserDiscount[AccountID]) SetCode(ctx context.Context, code string) error

func (*BuiltinUserDiscount[AccountID]) SetValidCount

func (discount *BuiltinUserDiscount[AccountID]) SetValidCount(ctx context.Context, validCount int64) error

func (*BuiltinUserDiscount[AccountID]) SetValue

func (discount *BuiltinUserDiscount[AccountID]) SetValue(ctx context.Context, value float64) error

func (*BuiltinUserDiscount[AccountID]) ToBuiltinObject

func (discount *BuiltinUserDiscount[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinUserDiscount[AccountID], error)

func (*BuiltinUserDiscount[AccountID]) ToFormObject

func (discount *BuiltinUserDiscount[AccountID]) ToFormObject(ctx context.Context) (*UserDiscountForm[AccountID], error)

type BuiltinUserDiscountManager

type BuiltinUserDiscountManager[AccountID comparable] struct {
	DB         userDiscountManagerDatabase[AccountID]
	CodeLength int32
	RandSrc    *rand.Rand
	MU         sync.Mutex
}

func NewBuiltinUserDiscountManager

func NewBuiltinUserDiscountManager[AccountID comparable](db userDiscountManagerDatabase[AccountID], codeLength int32) *BuiltinUserDiscountManager[AccountID]

func (*BuiltinUserDiscountManager[AccountID]) Close

func (discountManager *BuiltinUserDiscountManager[AccountID]) Close(ctx context.Context) error

func (*BuiltinUserDiscountManager[AccountID]) ExistsUserDiscountCode

func (discountManager *BuiltinUserDiscountManager[AccountID]) ExistsUserDiscountCode(ctx context.Context, code string) (bool, error)

func (*BuiltinUserDiscountManager[AccountID]) GetUserDiscountByCode

func (discountManager *BuiltinUserDiscountManager[AccountID]) GetUserDiscountByCode(ctx context.Context, code string) (UserDiscount[AccountID], error)

func (*BuiltinUserDiscountManager[AccountID]) GetUserDiscountCount

func (discountManager *BuiltinUserDiscountManager[AccountID]) GetUserDiscountCount(ctx context.Context) (uint64, error)

func (*BuiltinUserDiscountManager[AccountID]) GetUserDiscountWithID

func (discountManager *BuiltinUserDiscountManager[AccountID]) GetUserDiscountWithID(ctx context.Context, did uint64, fill bool) (UserDiscount[AccountID], error)

func (*BuiltinUserDiscountManager[AccountID]) GetUserDiscounts

func (discountManager *BuiltinUserDiscountManager[AccountID]) GetUserDiscounts(ctx context.Context, discounts []UserDiscount[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserDiscount[AccountID], error)

func (*BuiltinUserDiscountManager[AccountID]) Init

func (discountManager *BuiltinUserDiscountManager[AccountID]) Init(ctx context.Context) error

func (*BuiltinUserDiscountManager[AccountID]) NewUserDiscount

func (discountManager *BuiltinUserDiscountManager[AccountID]) NewUserDiscount(ctx context.Context, ownerAccount UserAccount[AccountID], value float64, validCount int64) (UserDiscount[AccountID], error)

func (*BuiltinUserDiscountManager[AccountID]) Pulse

func (discountManager *BuiltinUserDiscountManager[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinUserDiscountManager[AccountID]) RemoveAllUserDiscounts

func (discountManager *BuiltinUserDiscountManager[AccountID]) RemoveAllUserDiscounts(ctx context.Context) error

func (*BuiltinUserDiscountManager[AccountID]) RemoveUserDiscount

func (discountManager *BuiltinUserDiscountManager[AccountID]) RemoveUserDiscount(ctx context.Context, discount UserDiscount[AccountID]) error

func (*BuiltinUserDiscountManager[AccountID]) ToBuiltinObject

func (discountManager *BuiltinUserDiscountManager[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinUserDiscountManager[AccountID], error)

type BuiltinUserFactor

type BuiltinUserFactor[AccountID comparable] struct {
	UserFactorForm[AccountID]
	DB userFactorDatabase[AccountID] `json:"-"`
	MU sync.RWMutex                  `json:"-"`
}

func (*BuiltinUserFactor[AccountID]) ApplyFormObject

func (factor *BuiltinUserFactor[AccountID]) ApplyFormObject(ctx context.Context, form *UserFactorForm[AccountID]) error

func (*BuiltinUserFactor[AccountID]) Close

func (factor *BuiltinUserFactor[AccountID]) Close(ctx context.Context) error

func (*BuiltinUserFactor[AccountID]) GetAmountPaid

func (factor *BuiltinUserFactor[AccountID]) GetAmountPaid(ctx context.Context) (float64, error)

func (*BuiltinUserFactor[AccountID]) GetDiscount

func (factor *BuiltinUserFactor[AccountID]) GetDiscount(ctx context.Context) (float64, error)

func (*BuiltinUserFactor[AccountID]) GetID

func (factor *BuiltinUserFactor[AccountID]) GetID(ctx context.Context) (uint64, error)

func (*BuiltinUserFactor[AccountID]) GetProducts

func (factor *BuiltinUserFactor[AccountID]) GetProducts(ctx context.Context) (json.RawMessage, error)

func (*BuiltinUserFactor[AccountID]) GetTax

func (factor *BuiltinUserFactor[AccountID]) GetTax(ctx context.Context) (float64, error)

func (*BuiltinUserFactor[AccountID]) GetUserAccountID

func (factor *BuiltinUserFactor[AccountID]) GetUserAccountID(ctx context.Context) (AccountID, error)

func (*BuiltinUserFactor[AccountID]) Init

func (factor *BuiltinUserFactor[AccountID]) Init(ctx context.Context) error

func (*BuiltinUserFactor[AccountID]) Pulse

func (factor *BuiltinUserFactor[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinUserFactor[AccountID]) SetAmountPaid

func (factor *BuiltinUserFactor[AccountID]) SetAmountPaid(ctx context.Context, amountPaid float64) error

func (*BuiltinUserFactor[AccountID]) SetDiscount

func (factor *BuiltinUserFactor[AccountID]) SetDiscount(ctx context.Context, discount float64) error

func (*BuiltinUserFactor[AccountID]) SetProducts

func (factor *BuiltinUserFactor[AccountID]) SetProducts(ctx context.Context, products json.RawMessage) error

func (*BuiltinUserFactor[AccountID]) SetTax

func (factor *BuiltinUserFactor[AccountID]) SetTax(ctx context.Context, tax float64) error

func (*BuiltinUserFactor[AccountID]) ToBuiltinObject

func (factor *BuiltinUserFactor[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinUserFactor[AccountID], error)

func (*BuiltinUserFactor[AccountID]) ToFormObject

func (factor *BuiltinUserFactor[AccountID]) ToFormObject(ctx context.Context) (*UserFactorForm[AccountID], error)

type BuiltinUserFactorManager

type BuiltinUserFactorManager[AccountID comparable] struct {
	DB userFactorManagerDatabase[AccountID]
}

func NewBuiltinUserFactorManager

func NewBuiltinUserFactorManager[AccountID comparable](db userFactorManagerDatabase[AccountID]) *BuiltinUserFactorManager[AccountID]

func (*BuiltinUserFactorManager[AccountID]) Close

func (factorManager *BuiltinUserFactorManager[AccountID]) Close(ctx context.Context) error

func (*BuiltinUserFactorManager[AccountID]) GetFactorWithID

func (factorManager *BuiltinUserFactorManager[AccountID]) GetFactorWithID(ctx context.Context, fid uint64, fill bool) (UserFactor[AccountID], error)

func (*BuiltinUserFactorManager[AccountID]) GetUserFactorCount

func (factorManager *BuiltinUserFactorManager[AccountID]) GetUserFactorCount(ctx context.Context, account UserAccount[AccountID]) (uint64, error)

func (*BuiltinUserFactorManager[AccountID]) GetUserFactors

func (factorManager *BuiltinUserFactorManager[AccountID]) GetUserFactors(ctx context.Context, account UserAccount[AccountID], factors []UserFactor[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserFactor[AccountID], error)

func (*BuiltinUserFactorManager[AccountID]) Init

func (factorManager *BuiltinUserFactorManager[AccountID]) Init(ctx context.Context) error

func (*BuiltinUserFactorManager[AccountID]) Pulse

func (factorManager *BuiltinUserFactorManager[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinUserFactorManager[AccountID]) RemoveAllUserFactors

func (factorManager *BuiltinUserFactorManager[AccountID]) RemoveAllUserFactors(ctx context.Context) error

func (*BuiltinUserFactorManager[AccountID]) ToBuiltinObject

func (factorManager *BuiltinUserFactorManager[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinUserFactorManager[AccountID], error)

type BuiltinUserOrder

type BuiltinUserOrder[AccountID comparable] struct {
	UserOrderForm[AccountID]
	OrderStatusManager OrderStatusManager           `json:"-"`
	DB                 userOrderDatabase[AccountID] `json:"-"`
	FS                 FileStorage                  `json:"-"`
	MU                 sync.RWMutex                 `json:"-"`
}

func (*BuiltinUserOrder[AccountID]) ApplyFormObject

func (order *BuiltinUserOrder[AccountID]) ApplyFormObject(ctx context.Context, form *UserOrderForm[AccountID]) error

func (*BuiltinUserOrder[AccountID]) CalculateTotalPrice

func (order *BuiltinUserOrder[AccountID]) CalculateTotalPrice(ctx context.Context) (float64, error)

func (*BuiltinUserOrder[AccountID]) Close

func (order *BuiltinUserOrder[AccountID]) Close(ctx context.Context) error

func (*BuiltinUserOrder[AccountID]) Deliver

func (order *BuiltinUserOrder[AccountID]) Deliver(ctx context.Context, date time.Time, comment string) error

func (*BuiltinUserOrder[AccountID]) GetDeliveryComment

func (order *BuiltinUserOrder[AccountID]) GetDeliveryComment(ctx context.Context) (string, error)

func (*BuiltinUserOrder[AccountID]) GetDeliveryDate

func (order *BuiltinUserOrder[AccountID]) GetDeliveryDate(ctx context.Context) (time.Time, error)

func (*BuiltinUserOrder[AccountID]) GetID

func (order *BuiltinUserOrder[AccountID]) GetID(ctx context.Context) (uint64, error)

func (*BuiltinUserOrder[AccountID]) GetOrderDate

func (order *BuiltinUserOrder[AccountID]) GetOrderDate(ctx context.Context) (time.Time, error)

func (*BuiltinUserOrder[AccountID]) GetOrderTotal

func (order *BuiltinUserOrder[AccountID]) GetOrderTotal(ctx context.Context) (float64, error)

func (*BuiltinUserOrder[AccountID]) GetPaymentMethod

func (order *BuiltinUserOrder[AccountID]) GetPaymentMethod(ctx context.Context) (UserPaymentMethod[AccountID], error)

func (*BuiltinUserOrder[AccountID]) GetProductItemCount

func (order *BuiltinUserOrder[AccountID]) GetProductItemCount(ctx context.Context) (uint64, error)

func (*BuiltinUserOrder[AccountID]) GetProductItems

func (order *BuiltinUserOrder[AccountID]) GetProductItems(ctx context.Context, items []UserOrderProductItem[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserOrderProductItem[AccountID], error)

func (*BuiltinUserOrder[AccountID]) GetShippingAddress

func (order *BuiltinUserOrder[AccountID]) GetShippingAddress(ctx context.Context) (UserAddress[AccountID], error)

func (*BuiltinUserOrder[AccountID]) GetShippingMethod

func (order *BuiltinUserOrder[AccountID]) GetShippingMethod(ctx context.Context) (ShippingMethod, error)

func (*BuiltinUserOrder[AccountID]) GetStatus

func (order *BuiltinUserOrder[AccountID]) GetStatus(ctx context.Context) (OrderStatus, error)

func (*BuiltinUserOrder[AccountID]) GetUserAccountID

func (order *BuiltinUserOrder[AccountID]) GetUserAccountID(ctx context.Context) (AccountID, error)

func (*BuiltinUserOrder[AccountID]) GetUserComment

func (order *BuiltinUserOrder[AccountID]) GetUserComment(ctx context.Context) (string, error)

func (*BuiltinUserOrder[AccountID]) Init

func (order *BuiltinUserOrder[AccountID]) Init(ctx context.Context) error

func (*BuiltinUserOrder[AccountID]) IsDeliveried

func (order *BuiltinUserOrder[AccountID]) IsDeliveried(ctx context.Context) (bool, error)

func (*BuiltinUserOrder[AccountID]) Pulse

func (order *BuiltinUserOrder[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinUserOrder[AccountID]) SetDeliveryComment

func (order *BuiltinUserOrder[AccountID]) SetDeliveryComment(ctx context.Context, comment string) error

func (*BuiltinUserOrder[AccountID]) SetDeliveryDate

func (order *BuiltinUserOrder[AccountID]) SetDeliveryDate(ctx context.Context, date time.Time) error

func (*BuiltinUserOrder[AccountID]) SetOrderDate

func (order *BuiltinUserOrder[AccountID]) SetOrderDate(ctx context.Context, date time.Time) error

func (*BuiltinUserOrder[AccountID]) SetOrderTotal

func (order *BuiltinUserOrder[AccountID]) SetOrderTotal(ctx context.Context, price float64) error

func (*BuiltinUserOrder[AccountID]) SetPaymentMethod

func (order *BuiltinUserOrder[AccountID]) SetPaymentMethod(ctx context.Context, paymentMethod UserPaymentMethod[AccountID]) error

func (*BuiltinUserOrder[AccountID]) SetProductItems

func (order *BuiltinUserOrder[AccountID]) SetProductItems(ctx context.Context, items []UserOrderProductItem[AccountID]) error

func (*BuiltinUserOrder[AccountID]) SetShippingAddress

func (order *BuiltinUserOrder[AccountID]) SetShippingAddress(ctx context.Context, address UserAddress[AccountID]) error

func (*BuiltinUserOrder[AccountID]) SetShippingMethod

func (order *BuiltinUserOrder[AccountID]) SetShippingMethod(ctx context.Context, shippingMethod ShippingMethod) error

func (*BuiltinUserOrder[AccountID]) SetStatus

func (order *BuiltinUserOrder[AccountID]) SetStatus(ctx context.Context, status OrderStatus) error

func (*BuiltinUserOrder[AccountID]) SetUserComment

func (order *BuiltinUserOrder[AccountID]) SetUserComment(ctx context.Context, comment string) error

func (*BuiltinUserOrder[AccountID]) ToBuiltinObject

func (order *BuiltinUserOrder[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinUserOrder[AccountID], error)

func (*BuiltinUserOrder[AccountID]) ToFormObject

func (order *BuiltinUserOrder[AccountID]) ToFormObject(ctx context.Context) (*UserOrderForm[AccountID], error)

type BuiltinUserOrderManager

type BuiltinUserOrderManager[AccountID comparable] struct {
	DB                 userOrderManagerDatabase[AccountID]
	FS                 FileStorage
	OrderStatusManager OrderStatusManager
}

func NewBuiltinUserOrderManager

func NewBuiltinUserOrderManager[AccountID comparable](db userOrderManagerDatabase[AccountID], osm OrderStatusManager, fs FileStorage) *BuiltinUserOrderManager[AccountID]

func (*BuiltinUserOrderManager[AccountID]) Close

func (orderManager *BuiltinUserOrderManager[AccountID]) Close(ctx context.Context) error

func (*BuiltinUserOrderManager[AccountID]) GetOrderWithID

func (orderManager *BuiltinUserOrderManager[AccountID]) GetOrderWithID(ctx context.Context, oid uint64, fill bool) (UserOrder[AccountID], error)

func (*BuiltinUserOrderManager[AccountID]) GetUserOrderCount

func (orderManager *BuiltinUserOrderManager[AccountID]) GetUserOrderCount(ctx context.Context) (uint64, error)

func (*BuiltinUserOrderManager[AccountID]) GetUserOrders

func (orderManager *BuiltinUserOrderManager[AccountID]) GetUserOrders(ctx context.Context, orders []UserOrder[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserOrder[AccountID], error)

func (*BuiltinUserOrderManager[AccountID]) Init

func (orderManager *BuiltinUserOrderManager[AccountID]) Init(ctx context.Context) error

func (*BuiltinUserOrderManager[AccountID]) Pulse

func (orderManager *BuiltinUserOrderManager[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinUserOrderManager[AccountID]) RemoveAllUserOrders

func (orderManager *BuiltinUserOrderManager[AccountID]) RemoveAllUserOrders(ctx context.Context) error

func (*BuiltinUserOrderManager[AccountID]) ToBuiltinObject

func (orderManager *BuiltinUserOrderManager[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinUserOrderManager[AccountID], error)

type BuiltinUserPaymentMethod

type BuiltinUserPaymentMethod[AccountID comparable] struct {
	UserPaymentMethodForm[AccountID]
	DB userPaymentMethodDatabase[AccountID] `json:"-"`
	MU sync.RWMutex                         `json:"-"`
}

func (*BuiltinUserPaymentMethod[AccountID]) ApplyFormObject

func (paymentMethod *BuiltinUserPaymentMethod[AccountID]) ApplyFormObject(ctx context.Context, form *UserPaymentMethodForm[AccountID]) error

func (*BuiltinUserPaymentMethod[AccountID]) Close

func (paymentMethod *BuiltinUserPaymentMethod[AccountID]) Close(ctx context.Context) error

func (*BuiltinUserPaymentMethod[AccountID]) GetAccountNumber

func (paymentMethod *BuiltinUserPaymentMethod[AccountID]) GetAccountNumber(ctx context.Context) (string, error)

func (*BuiltinUserPaymentMethod[AccountID]) GetExpiryDate

func (paymentMethod *BuiltinUserPaymentMethod[AccountID]) GetExpiryDate(ctx context.Context) (time.Time, error)

func (*BuiltinUserPaymentMethod[AccountID]) GetID

func (paymentMethod *BuiltinUserPaymentMethod[AccountID]) GetID(ctx context.Context) (uint64, error)

func (*BuiltinUserPaymentMethod[AccountID]) GetPaymentType

func (paymentMethod *BuiltinUserPaymentMethod[AccountID]) GetPaymentType(ctx context.Context) (PaymentType, error)

func (*BuiltinUserPaymentMethod[AccountID]) GetProvider

func (paymentMethod *BuiltinUserPaymentMethod[AccountID]) GetProvider(ctx context.Context) (string, error)

func (*BuiltinUserPaymentMethod[AccountID]) GetUserAccountID

func (paymentMethod *BuiltinUserPaymentMethod[AccountID]) GetUserAccountID(ctx context.Context) (AccountID, error)

func (*BuiltinUserPaymentMethod[AccountID]) Init

func (paymentMethod *BuiltinUserPaymentMethod[AccountID]) Init(ctx context.Context) error

func (*BuiltinUserPaymentMethod[AccountID]) IsDefault

func (paymentMethod *BuiltinUserPaymentMethod[AccountID]) IsDefault(ctx context.Context) (bool, error)

func (*BuiltinUserPaymentMethod[AccountID]) IsExpired

func (paymentMethod *BuiltinUserPaymentMethod[AccountID]) IsExpired(ctx context.Context) (bool, error)

func (*BuiltinUserPaymentMethod[AccountID]) Pulse

func (paymentMethod *BuiltinUserPaymentMethod[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinUserPaymentMethod[AccountID]) SetAccountNumber

func (paymentMethod *BuiltinUserPaymentMethod[AccountID]) SetAccountNumber(ctx context.Context, accountNumber string) error

func (*BuiltinUserPaymentMethod[AccountID]) SetDefault

func (paymentMethod *BuiltinUserPaymentMethod[AccountID]) SetDefault(ctx context.Context, state bool) error

func (*BuiltinUserPaymentMethod[AccountID]) SetExpiryDate

func (paymentMethod *BuiltinUserPaymentMethod[AccountID]) SetExpiryDate(ctx context.Context, date time.Time) error

func (*BuiltinUserPaymentMethod[AccountID]) SetPaymentType

func (paymentMethod *BuiltinUserPaymentMethod[AccountID]) SetPaymentType(ctx context.Context, paymentType PaymentType) error

func (*BuiltinUserPaymentMethod[AccountID]) SetProvider

func (paymentMethod *BuiltinUserPaymentMethod[AccountID]) SetProvider(ctx context.Context, provider string) error

func (*BuiltinUserPaymentMethod[AccountID]) ToBuiltinObject

func (paymentMethod *BuiltinUserPaymentMethod[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinUserPaymentMethod[AccountID], error)

func (*BuiltinUserPaymentMethod[AccountID]) ToFormObject

func (paymentMethod *BuiltinUserPaymentMethod[AccountID]) ToFormObject(ctx context.Context) (*UserPaymentMethodForm[AccountID], error)

type BuiltinUserPaymentMethodManager

type BuiltinUserPaymentMethodManager[AccountID comparable] struct {
	DB userPaymentMethodManagerDatabase[AccountID]
}

func NewBuiltinPaymentMethodManager

func NewBuiltinPaymentMethodManager[AccountID comparable](db userPaymentMethodManagerDatabase[AccountID]) *BuiltinUserPaymentMethodManager[AccountID]

func (*BuiltinUserPaymentMethodManager[AccountID]) Close

func (paymentMethodManager *BuiltinUserPaymentMethodManager[AccountID]) Close(ctx context.Context) error

func (*BuiltinUserPaymentMethodManager[AccountID]) GetPaymentMethodCount

func (paymentMethodManager *BuiltinUserPaymentMethodManager[AccountID]) GetPaymentMethodCount(ctx context.Context) (uint64, error)

func (*BuiltinUserPaymentMethodManager[AccountID]) GetPaymentMethodWithID

func (paymentMethodManager *BuiltinUserPaymentMethodManager[AccountID]) GetPaymentMethodWithID(ctx context.Context, pid uint64, fill bool) (UserPaymentMethod[AccountID], error)

func (*BuiltinUserPaymentMethodManager[AccountID]) GetPaymentMethods

func (paymentMethodManager *BuiltinUserPaymentMethodManager[AccountID]) GetPaymentMethods(ctx context.Context, paymentMethods []UserPaymentMethod[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserPaymentMethod[AccountID], error)

func (*BuiltinUserPaymentMethodManager[AccountID]) Init

func (paymentMethodManager *BuiltinUserPaymentMethodManager[AccountID]) Init(ctx context.Context) error

func (*BuiltinUserPaymentMethodManager[AccountID]) Pulse

func (paymentMethodManager *BuiltinUserPaymentMethodManager[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinUserPaymentMethodManager[AccountID]) RemoveAllPaymentMethods

func (paymentMethodManager *BuiltinUserPaymentMethodManager[AccountID]) RemoveAllPaymentMethods(ctx context.Context) error

func (*BuiltinUserPaymentMethodManager[AccountID]) ToBuiltinObject

func (paymentMethodManager *BuiltinUserPaymentMethodManager[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinUserPaymentMethodManager[AccountID], error)

type BuiltinUserReview

type BuiltinUserReview[AccountID comparable] struct {
	UserReviewForm[AccountID]
	DB userReviewDatabase[AccountID] `json:"-"`
	FS FileStorage                   `json:"-"`
	MU sync.RWMutex                  `json:"-"`
}

func (*BuiltinUserReview[AccountID]) ApplyFormObject

func (review *BuiltinUserReview[AccountID]) ApplyFormObject(ctx context.Context, form *UserReviewForm[AccountID]) error

func (*BuiltinUserReview[AccountID]) Close

func (review *BuiltinUserReview[AccountID]) Close(ctx context.Context) error

func (*BuiltinUserReview[AccountID]) GetComment

func (review *BuiltinUserReview[AccountID]) GetComment(ctx context.Context) (string, error)

func (*BuiltinUserReview[AccountID]) GetID

func (review *BuiltinUserReview[AccountID]) GetID(ctx context.Context) (uint64, error)

func (*BuiltinUserReview[AccountID]) GetProductItem

func (review *BuiltinUserReview[AccountID]) GetProductItem(ctx context.Context) (ProductItem[AccountID], error)

func (*BuiltinUserReview[AccountID]) GetRatingValue

func (review *BuiltinUserReview[AccountID]) GetRatingValue(ctx context.Context) (int32, error)

func (*BuiltinUserReview[AccountID]) GetUserAccountID

func (review *BuiltinUserReview[AccountID]) GetUserAccountID(ctx context.Context) (AccountID, error)

func (*BuiltinUserReview[AccountID]) Init

func (review *BuiltinUserReview[AccountID]) Init(ctx context.Context) error

func (*BuiltinUserReview[AccountID]) Pulse

func (review *BuiltinUserReview[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinUserReview[AccountID]) SetComment

func (review *BuiltinUserReview[AccountID]) SetComment(ctx context.Context, comment string) error

func (*BuiltinUserReview[AccountID]) SetRatingValue

func (review *BuiltinUserReview[AccountID]) SetRatingValue(ctx context.Context, rating int32) error

func (*BuiltinUserReview[AccountID]) ToBuiltinObject

func (review *BuiltinUserReview[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinUserReview[AccountID], error)

func (*BuiltinUserReview[AccountID]) ToFormObject

func (review *BuiltinUserReview[AccountID]) ToFormObject(ctx context.Context) (*UserReviewForm[AccountID], error)

type BuiltinUserReviewManager

type BuiltinUserReviewManager[AccountID comparable] struct {
	DB userReviewManagerDatabase[AccountID]
	FS FileStorage
}

func NewBuiltinUserReviewManager

func NewBuiltinUserReviewManager[AccountID comparable](db userReviewManagerDatabase[AccountID], fs FileStorage) *BuiltinUserReviewManager[AccountID]

func (*BuiltinUserReviewManager[AccountID]) Close

func (reviewManager *BuiltinUserReviewManager[AccountID]) Close(ctx context.Context) error

func (*BuiltinUserReviewManager[AccountID]) GetUserReviewCount

func (reviewManager *BuiltinUserReviewManager[AccountID]) GetUserReviewCount(ctx context.Context) (uint64, error)

func (*BuiltinUserReviewManager[AccountID]) GetUserReviewWithID

func (reviewManager *BuiltinUserReviewManager[AccountID]) GetUserReviewWithID(ctx context.Context, rid uint64, fill bool) (UserReview[AccountID], error)

func (*BuiltinUserReviewManager[AccountID]) GetUserReviews

func (reviewManager *BuiltinUserReviewManager[AccountID]) GetUserReviews(ctx context.Context, reviews []UserReview[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserReview[AccountID], error)

func (*BuiltinUserReviewManager[AccountID]) GetUserReviewsForAccount

func (reviewManager *BuiltinUserReviewManager[AccountID]) GetUserReviewsForAccount(ctx context.Context, account UserAccount[AccountID], reviews []UserReview[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserReview[AccountID], error)

func (*BuiltinUserReviewManager[AccountID]) GetUserReviewsForProductItem

func (reviewManager *BuiltinUserReviewManager[AccountID]) GetUserReviewsForProductItem(ctx context.Context, productItem ProductItem[AccountID], reviews []UserReview[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserReview[AccountID], error)

func (*BuiltinUserReviewManager[AccountID]) Init

func (reviewManager *BuiltinUserReviewManager[AccountID]) Init(ctx context.Context) error

func (*BuiltinUserReviewManager[AccountID]) NewUserReview

func (reviewManager *BuiltinUserReviewManager[AccountID]) NewUserReview(ctx context.Context, account UserAccount[AccountID], productItem ProductItem[AccountID], ratingValue int32, comment string) (UserReview[AccountID], error)

func (*BuiltinUserReviewManager[AccountID]) Pulse

func (reviewManager *BuiltinUserReviewManager[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinUserReviewManager[AccountID]) RemoveAllUserReviews

func (reviewManager *BuiltinUserReviewManager[AccountID]) RemoveAllUserReviews(ctx context.Context) error

func (*BuiltinUserReviewManager[AccountID]) RemoveUserReview

func (reviewManager *BuiltinUserReviewManager[AccountID]) RemoveUserReview(ctx context.Context, review UserReview[AccountID]) error

func (*BuiltinUserReviewManager[AccountID]) ToBuiltinObject

func (reviewManager *BuiltinUserReviewManager[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinUserReviewManager[AccountID], error)

type BuiltinUserRole

type BuiltinUserRole struct {
	UserRoleForm
	DB DBUserRole   `json:"-"`
	MU sync.RWMutex `json:"-"`
}

func (*BuiltinUserRole) ApplyFormObject

func (userRole *BuiltinUserRole) ApplyFormObject(ctx context.Context, form *UserRoleForm) error

func (*BuiltinUserRole) Close

func (userRole *BuiltinUserRole) Close(ctx context.Context) error

func (*BuiltinUserRole) GetID

func (userRole *BuiltinUserRole) GetID(ctx context.Context) (uint64, error)

func (*BuiltinUserRole) GetName

func (userRole *BuiltinUserRole) GetName(ctx context.Context) (string, error)

func (*BuiltinUserRole) Init

func (userRole *BuiltinUserRole) Init(ctx context.Context) error

func (*BuiltinUserRole) Pulse

func (userRole *BuiltinUserRole) Pulse(ctx context.Context) error

func (*BuiltinUserRole) SetName

func (userRole *BuiltinUserRole) SetName(ctx context.Context, name string) error

func (*BuiltinUserRole) ToBuiltinObject

func (userRole *BuiltinUserRole) ToBuiltinObject(ctx context.Context) (*BuiltinUserRole, error)

func (*BuiltinUserRole) ToFormObject

func (userRole *BuiltinUserRole) ToFormObject(ctx context.Context) (*UserRoleForm, error)

type BuiltinUserRoleManager

type BuiltinUserRoleManager struct {
	DB userRoleDatabase
}

func NewBuiltinUserRoleManager

func NewBuiltinUserRoleManager(db userRoleDatabase) *BuiltinUserRoleManager

func (*BuiltinUserRoleManager) Close

func (userRoleManager *BuiltinUserRoleManager) Close(ctx context.Context) error

func (*BuiltinUserRoleManager) ExistsUserRole

func (userRoleManager *BuiltinUserRoleManager) ExistsUserRole(ctx context.Context, name string) (bool, error)

func (*BuiltinUserRoleManager) GetRoleWithID

func (userRoleManager *BuiltinUserRoleManager) GetRoleWithID(ctx context.Context, rid uint64, fill bool) (UserRole, error)

func (*BuiltinUserRoleManager) GetUserRoleByName

func (userRoleManager *BuiltinUserRoleManager) GetUserRoleByName(ctx context.Context, name string) (UserRole, error)

func (*BuiltinUserRoleManager) GetUserRoleCount

func (userRoleManager *BuiltinUserRoleManager) GetUserRoleCount(ctx context.Context) (uint64, error)

func (*BuiltinUserRoleManager) GetUserRoles

func (userRoleManager *BuiltinUserRoleManager) GetUserRoles(ctx context.Context, userRoles []UserRole, skip int64, limit int64, queueOrder QueueOrder) ([]UserRole, error)

func (*BuiltinUserRoleManager) Init

func (userRoleManager *BuiltinUserRoleManager) Init(ctx context.Context) error

func (*BuiltinUserRoleManager) NewUserRole

func (userRoleManager *BuiltinUserRoleManager) NewUserRole(ctx context.Context, name string) (UserRole, error)

func (*BuiltinUserRoleManager) Pulse

func (userRoleManager *BuiltinUserRoleManager) Pulse(ctx context.Context) error

func (*BuiltinUserRoleManager) RemoveAllUserRoles

func (userRoleManager *BuiltinUserRoleManager) RemoveAllUserRoles(ctx context.Context) error

func (*BuiltinUserRoleManager) RemoveUserRole

func (userRoleManager *BuiltinUserRoleManager) RemoveUserRole(ctx context.Context, userRole UserRole) error

func (*BuiltinUserRoleManager) ToBuiltinObject

func (userRoleManager *BuiltinUserRoleManager) ToBuiltinObject(ctx context.Context) (*BuiltinUserRoleManager, error)

type BuiltinUserShoppingCart

type BuiltinUserShoppingCart[AccountID comparable] struct {
	UserShoppingCartForm[AccountID]
	DB                 userShoppingCartDatabase[AccountID] `json:"-"`
	FS                 FileStorage                         `json:"-"`
	OrderStatusManager OrderStatusManager                  `json:"-"`
	MU                 sync.RWMutex                        `json:"-"`
}

func (*BuiltinUserShoppingCart[AccountID]) ApplyFormObject

func (shoppingCart *BuiltinUserShoppingCart[AccountID]) ApplyFormObject(ctx context.Context, form *UserShoppingCartForm[AccountID]) error

func (*BuiltinUserShoppingCart[AccountID]) CalculateDept

func (shoppingCart *BuiltinUserShoppingCart[AccountID]) CalculateDept(ctx context.Context, shippingMethod ShippingMethod) (float64, error)

func (*BuiltinUserShoppingCart[AccountID]) Close

func (shoppingCart *BuiltinUserShoppingCart[AccountID]) Close(ctx context.Context) error

func (*BuiltinUserShoppingCart[AccountID]) GetID

func (shoppingCart *BuiltinUserShoppingCart[AccountID]) GetID(ctx context.Context) (uint64, error)

func (*BuiltinUserShoppingCart[AccountID]) GetSessionText

func (shoppingCart *BuiltinUserShoppingCart[AccountID]) GetSessionText(ctx context.Context) (string, error)

func (*BuiltinUserShoppingCart[AccountID]) GetShoppingCartItemCount

func (shoppingCart *BuiltinUserShoppingCart[AccountID]) GetShoppingCartItemCount(ctx context.Context) (uint64, error)

func (*BuiltinUserShoppingCart[AccountID]) GetShoppingCartItems

func (shoppingCart *BuiltinUserShoppingCart[AccountID]) GetShoppingCartItems(ctx context.Context, items []UserShoppingCartItem[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserShoppingCartItem[AccountID], error)

func (*BuiltinUserShoppingCart[AccountID]) GetUserAccountID

func (shoppingCart *BuiltinUserShoppingCart[AccountID]) GetUserAccountID(ctx context.Context) (AccountID, error)

func (*BuiltinUserShoppingCart[AccountID]) Init

func (shoppingCart *BuiltinUserShoppingCart[AccountID]) Init(ctx context.Context) error

func (*BuiltinUserShoppingCart[AccountID]) NewShoppingCartItem

func (shoppingCart *BuiltinUserShoppingCart[AccountID]) NewShoppingCartItem(ctx context.Context, item ProductItem[AccountID], count int64, attrs json.RawMessage) (UserShoppingCartItem[AccountID], error)

func (*BuiltinUserShoppingCart[AccountID]) Order

func (shoppingCart *BuiltinUserShoppingCart[AccountID]) Order(ctx context.Context, paymentMethod UserPaymentMethod[AccountID], address UserAddress[AccountID], shippingMethod ShippingMethod, userComment string, discountCode string) (UserOrder[AccountID], error)

func (*BuiltinUserShoppingCart[AccountID]) Pulse

func (shoppingCart *BuiltinUserShoppingCart[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinUserShoppingCart[AccountID]) RemoveAllShoppingCartItems

func (shoppingCart *BuiltinUserShoppingCart[AccountID]) RemoveAllShoppingCartItems(ctx context.Context) error

func (*BuiltinUserShoppingCart[AccountID]) RemoveShoppingCartItem

func (shoppingCart *BuiltinUserShoppingCart[AccountID]) RemoveShoppingCartItem(ctx context.Context, item UserShoppingCartItem[AccountID]) error

func (*BuiltinUserShoppingCart[AccountID]) SetSessionText

func (shoppingCart *BuiltinUserShoppingCart[AccountID]) SetSessionText(ctx context.Context, sessionText string) error

func (*BuiltinUserShoppingCart[AccountID]) ToBuiltinObject

func (shoppingCart *BuiltinUserShoppingCart[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinUserShoppingCart[AccountID], error)

func (*BuiltinUserShoppingCart[AccountID]) ToFormObject

func (shoppingCart *BuiltinUserShoppingCart[AccountID]) ToFormObject(ctx context.Context) (*UserShoppingCartForm[AccountID], error)

type BuiltinUserShoppingCartItem

type BuiltinUserShoppingCartItem[AccountID comparable] struct {
	UserShoppingCartItemForm[AccountID]
	DB                 userShoppingCartItemDatabase[AccountID] `json:"-"`
	FS                 FileStorage                             `json:"-"`
	OrderStatusManager OrderStatusManager                      `json:"-"`
	MU                 sync.RWMutex                            `json:"-"`
}

func (*BuiltinUserShoppingCartItem[AccountID]) AddQuantity

func (item *BuiltinUserShoppingCartItem[AccountID]) AddQuantity(ctx context.Context, delta int64) error

func (*BuiltinUserShoppingCartItem[AccountID]) ApplyFormObject

func (item *BuiltinUserShoppingCartItem[AccountID]) ApplyFormObject(ctx context.Context, form *UserShoppingCartItemForm[AccountID]) error

func (*BuiltinUserShoppingCartItem[AccountID]) CalculateDept

func (item *BuiltinUserShoppingCartItem[AccountID]) CalculateDept(ctx context.Context) (float64, error)

func (*BuiltinUserShoppingCartItem[AccountID]) Close

func (item *BuiltinUserShoppingCartItem[AccountID]) Close(ctx context.Context) error

func (*BuiltinUserShoppingCartItem[AccountID]) GetAttributes

func (item *BuiltinUserShoppingCartItem[AccountID]) GetAttributes(ctx context.Context) (json.RawMessage, error)

func (*BuiltinUserShoppingCartItem[AccountID]) GetID

func (item *BuiltinUserShoppingCartItem[AccountID]) GetID(ctx context.Context) (uint64, error)

func (*BuiltinUserShoppingCartItem[AccountID]) GetProductItem

func (item *BuiltinUserShoppingCartItem[AccountID]) GetProductItem(ctx context.Context) (ProductItem[AccountID], error)

func (*BuiltinUserShoppingCartItem[AccountID]) GetQuantity

func (item *BuiltinUserShoppingCartItem[AccountID]) GetQuantity(ctx context.Context) (int64, error)

func (*BuiltinUserShoppingCartItem[AccountID]) GetShoppingCart

func (item *BuiltinUserShoppingCartItem[AccountID]) GetShoppingCart(ctx context.Context) (UserShoppingCart[AccountID], error)

func (*BuiltinUserShoppingCartItem[AccountID]) GetUserAccountID

func (item *BuiltinUserShoppingCartItem[AccountID]) GetUserAccountID(ctx context.Context) (AccountID, error)

func (*BuiltinUserShoppingCartItem[AccountID]) Init

func (item *BuiltinUserShoppingCartItem[AccountID]) Init(ctx context.Context) error

func (*BuiltinUserShoppingCartItem[AccountID]) Pulse

func (item *BuiltinUserShoppingCartItem[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinUserShoppingCartItem[AccountID]) SetAttributes

func (item *BuiltinUserShoppingCartItem[AccountID]) SetAttributes(ctx context.Context, attrs json.RawMessage) error

func (*BuiltinUserShoppingCartItem[AccountID]) SetQuantity

func (item *BuiltinUserShoppingCartItem[AccountID]) SetQuantity(ctx context.Context, quantity int64) error

func (*BuiltinUserShoppingCartItem[AccountID]) ToBuiltinObject

func (item *BuiltinUserShoppingCartItem[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinUserShoppingCartItem[AccountID], error)

func (*BuiltinUserShoppingCartItem[AccountID]) ToFormObject

func (item *BuiltinUserShoppingCartItem[AccountID]) ToFormObject(ctx context.Context) (*UserShoppingCartItemForm[AccountID], error)

type BuiltinUserShoppingCartManager

type BuiltinUserShoppingCartManager[AccountID comparable] struct {
	DB                 userShoppingCartManagerDatabase[AccountID]
	FS                 FileStorage
	OrderStatusManager OrderStatusManager
}

func NewBuiltinUserShoppingCartManager

func NewBuiltinUserShoppingCartManager[AccountID comparable](db userShoppingCartManagerDatabase[AccountID], fs FileStorage, osm OrderStatusManager) *BuiltinUserShoppingCartManager[AccountID]

func (*BuiltinUserShoppingCartManager[AccountID]) Close

func (shoppingCartManager *BuiltinUserShoppingCartManager[AccountID]) Close(ctx context.Context) error

func (*BuiltinUserShoppingCartManager[AccountID]) GetShoppingCartBySessionText

func (shoppingCartManager *BuiltinUserShoppingCartManager[AccountID]) GetShoppingCartBySessionText(ctx context.Context, sessionText string) (UserShoppingCart[AccountID], error)

func (*BuiltinUserShoppingCartManager[AccountID]) GetShoppingCartCount

func (shoppingCartManager *BuiltinUserShoppingCartManager[AccountID]) GetShoppingCartCount(ctx context.Context) (uint64, error)

func (*BuiltinUserShoppingCartManager[AccountID]) GetShoppingCartItemWithID

func (shoppingCartManager *BuiltinUserShoppingCartManager[AccountID]) GetShoppingCartItemWithID(ctx context.Context, iid uint64, fill bool) (UserShoppingCartItem[AccountID], error)

func (*BuiltinUserShoppingCartManager[AccountID]) GetShoppingCartWithID

func (shoppingCartManager *BuiltinUserShoppingCartManager[AccountID]) GetShoppingCartWithID(ctx context.Context, cid uint64, fill bool) (UserShoppingCart[AccountID], error)

func (*BuiltinUserShoppingCartManager[AccountID]) GetShoppingCarts

func (shoppingCartManager *BuiltinUserShoppingCartManager[AccountID]) GetShoppingCarts(ctx context.Context, carts []UserShoppingCart[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserShoppingCart[AccountID], error)

func (*BuiltinUserShoppingCartManager[AccountID]) Init

func (shoppingCartManager *BuiltinUserShoppingCartManager[AccountID]) Init(ctx context.Context) error

func (*BuiltinUserShoppingCartManager[AccountID]) Pulse

func (shoppingCartManager *BuiltinUserShoppingCartManager[AccountID]) Pulse(ctx context.Context) error

func (*BuiltinUserShoppingCartManager[AccountID]) RemoveAllShoppingCarts

func (shoppingCartManager *BuiltinUserShoppingCartManager[AccountID]) RemoveAllShoppingCarts(ctx context.Context) error

func (*BuiltinUserShoppingCartManager[AccountID]) ToBuiltinObject

func (shoppingCartManager *BuiltinUserShoppingCartManager[AccountID]) ToBuiltinObject(ctx context.Context) (*BuiltinUserShoppingCartManager[AccountID], error)

type BytesFileIO

type BytesFileIO struct {
	File  *bytes.Reader
	Token string
}

func (*BytesFileIO) Close

func (file *BytesFileIO) Close() error

func (*BytesFileIO) GetToken

func (file *BytesFileIO) GetToken(ctx context.Context) (string, error)

func (*BytesFileIO) Read

func (file *BytesFileIO) Read(p []byte) (n int, err error)

func (*BytesFileIO) Seek

func (file *BytesFileIO) Seek(offset int64, whence int) (int64, error)

func (*BytesFileIO) Write

func (file *BytesFileIO) Write(p []byte) (n int, err error)

type Country

type Country interface {
	GeneralAppObject

	GetID(ctx context.Context) (uint64, error)
	GetName(ctx context.Context) (string, error)
	SetName(ctx context.Context, name string) error

	ToBuiltinObject(ctx context.Context) (*BuiltinCountry, error)
	ToFormObject(ctx context.Context) (*CountryForm, error)
	ApplyFormObject(ctx context.Context, form *CountryForm) error
}

type CountryForm

type CountryForm struct {
	ID   uint64  `json:"id"`
	Name *string `json:"name,omitempty"`
}

func (*CountryForm) Clone

func (form *CountryForm) Clone(ctx context.Context) (CountryForm, error)

type CountryManager

type CountryManager interface {
	GeneralAppObject

	GetCountryWithID(ctx context.Context, aid uint64, fill bool) (Country, error)

	NewCountry(ctx context.Context, name string) (Country, error)
	RemoveCountry(ctx context.Context, country Country) error
	RemoveAllCountries(ctx context.Context) error
	GetCountries(ctx context.Context, countries []Country, skip int64, limit int64, queueOrder QueueOrder) ([]Country, error)
	GetCountryCount(ctx context.Context) (uint64, error)
	GetCountryByName(ctx context.Context, name string) (Country, error)
	ExistsCountry(ctx context.Context, name string) (bool, error)

	ToBuiltinObject(ctx context.Context) (*BuiltinCountryManager, error)
}

type DBCountry

type DBCountry interface {
	GetCountryName(ctx context.Context, form *CountryForm, id uint64) (string, error)
	SetCountryName(ctx context.Context, form *CountryForm, id uint64, name string) error
}

type DBCountryManager

type DBCountryManager interface {
	ExistsCountry(ctx context.Context, name string) (bool, error)
	GetCountryByName(ctx context.Context, name string, countForm *CountryForm) (uint64, error)
	GetCountryCount(ctx context.Context) (uint64, error)
	GetCountries(ctx context.Context, countries []uint64, countForms []*CountryForm, skip int64, limit int64, queueOrder QueueOrder) ([]uint64, []*CountryForm, error)
	NewCountry(ctx context.Context, name string, countForm *CountryForm) (uint64, error)
	RemoveAllCountries(ctx context.Context) error
	RemoveCountry(ctx context.Context, country uint64) error
	InitCountryManager(ctx context.Context) error
	FillCountryWithID(ctx context.Context, cid uint64, countryForm *CountryForm) error
}

type DBOrderStatus

type DBOrderStatus interface {
	GetOrderStatusName(ctx context.Context, form *OrderStatusForm, id uint64) (string, error)
	IsOrderStatusDeliveried(ctx context.Context, form *OrderStatusForm, id uint64) (bool, error)
	SetOrderStatusName(ctx context.Context, form *OrderStatusForm, id uint64, name string) error
}

type DBOrderStatusManager

type DBOrderStatusManager interface {
	ExistsOrderStatus(ctx context.Context, name string) (bool, error)
	GetDeliveriedOrderStatus(ctx context.Context, statusForm *OrderStatusForm) (uint64, error)
	GetIdleOrderStatus(ctx context.Context, statusForm *OrderStatusForm) (uint64, error)
	GetOrderStatusByName(ctx context.Context, name string, statusForm *OrderStatusForm) (uint64, error)
	GetOrderStatusCount(ctx context.Context) (uint64, error)
	GetOrderStatuses(ctx context.Context, status []uint64, statusForms []*OrderStatusForm, skip int64, limit int64, queueOrder QueueOrder) ([]uint64, []*OrderStatusForm, error)
	NewOrderStatus(ctx context.Context, name string, statusForm *OrderStatusForm) (uint64, error)
	RemoveAllOrderStatuses(ctx context.Context) error
	RemoveOrderStatus(ctx context.Context, status uint64) error
	InitOrderStatusManager(ctx context.Context) error
	FillOrderStatusWithID(ctx context.Context, sid uint64, statusForm *OrderStatusForm) error
}

type DBPaymentType

type DBPaymentType interface {
	GetPaymentTypeName(ctx context.Context, form *PaymentTypeForm, id uint64) (string, error)
	SetPaymentTypeName(ctx context.Context, form *PaymentTypeForm, id uint64, name string) error
}

type DBPaymentTypeManager

type DBPaymentTypeManager interface {
	ExistsPaymentType(ctx context.Context, name string) (bool, error)
	GetPaymentTypeByName(ctx context.Context, name string, typeForm *PaymentTypeForm) (uint64, error)
	GetPaymentTypeCount(ctx context.Context) (uint64, error)
	GetPaymentTypes(ctx context.Context, paymentTypes []uint64, typeForms []*PaymentTypeForm, skip int64, limit int64, queueOrder QueueOrder) ([]uint64, []*PaymentTypeForm, error)
	NewPaymentType(ctx context.Context, name string, typeForm *PaymentTypeForm) (uint64, error)
	RemoveAllPaymentTypes(ctx context.Context) error
	RemovePaymentType(ctx context.Context, paymentType uint64) error
	InitPaymentTypeManager(ctx context.Context) error
	FillPaymentTypeWithID(ctx context.Context, pid uint64, typeForm *PaymentTypeForm) error
}

type DBProduct

type DBProduct[AccountID comparable] interface {
	AddProductProductItem(ctx context.Context, form *ProductForm[AccountID], pid uint64, sku string, name string, price float64, quantity uint64, images []string, attrs json.RawMessage, itemForm *ProductItemForm[AccountID], fs FileStorage) (uint64, error)
	GetProductDescription(ctx context.Context, form *ProductForm[AccountID], pid uint64) (string, error)
	GetProductName(ctx context.Context, form *ProductForm[AccountID], pid uint64) (string, error)
	GetProductImages(ctx context.Context, form *ProductForm[AccountID], pid uint64) ([]string, error)
	GetProductCategory(ctx context.Context, form *ProductForm[AccountID], pid uint64, catForm *ProductCategoryForm[AccountID], fs FileStorage) (uint64, error)
	GetProductProductItemCount(ctx context.Context, form *ProductForm[AccountID], pid uint64) (uint64, error)
	GetProductProductItems(ctx context.Context, form *ProductForm[AccountID], pid uint64, items []uint64, itemForms []*ProductItemForm[AccountID], skip int64, limit int64, queueOrder QueueOrder, fs FileStorage) ([]uint64, []*ProductItemForm[AccountID], error)
	RemoveAllProductProductItems(ctx context.Context, form *ProductForm[AccountID], pid uint64) error
	RemoveProductProductItem(ctx context.Context, form *ProductForm[AccountID], pid uint64, itid uint64) error
	SetProductDescription(ctx context.Context, form *ProductForm[AccountID], pid uint64, desc string) error
	SetProductName(ctx context.Context, form *ProductForm[AccountID], pid uint64, name string) error
	SetProductImages(ctx context.Context, form *ProductForm[AccountID], pid uint64, images []string) error
	SetProductCategory(ctx context.Context, form *ProductForm[AccountID], pid uint64, category *uint64, fs FileStorage) error
}

type DBProductCategory

type DBProductCategory[AccountID comparable] interface {
	GetProductCategoryName(ctx context.Context, form *ProductCategoryForm[AccountID], pid uint64) (string, error)
	GetProductCategoryParent(ctx context.Context, form *ProductCategoryForm[AccountID], pid uint64, catForm *ProductCategoryForm[AccountID], fs FileStorage) (uint64, error)
	GetProductCategoryProductCount(ctx context.Context, form *ProductCategoryForm[AccountID], pid uint64) (uint64, error)
	GetProductCategoryProducts(ctx context.Context, form *ProductCategoryForm[AccountID], pid uint64, products []uint64, productForms []*ProductForm[AccountID], skip int64, limit int64, queueOrder QueueOrder, fs FileStorage) ([]uint64, []*ProductForm[AccountID], error)
	NewProductCategoryProduct(ctx context.Context, form *ProductCategoryForm[AccountID], pid uint64, name string, description string, images []string, productForm *ProductForm[AccountID], fs FileStorage) (uint64, error)
	RemoveAllProducts(ctx context.Context, form *ProductCategoryForm[AccountID], pid uint64) error
	RemoveProduct(ctx context.Context, form *ProductCategoryForm[AccountID], pid uint64, product uint64) error
	SetProductCategoryName(ctx context.Context, form *ProductCategoryForm[AccountID], pid uint64, name string) error
	SetProductCategoryParent(ctx context.Context, form *ProductCategoryForm[AccountID], pid uint64, parent *uint64, fs FileStorage) error
}

type DBProductItem

type DBProductItem[AccountID comparable] interface {
	AddProductItemQuantityInStock(ctx context.Context, form *ProductItemForm[AccountID], pid uint64, delta int64) error
	GetProductItemAttributes(ctx context.Context, form *ProductItemForm[AccountID], pid uint64) (json.RawMessage, error)
	GetProductItemImages(ctx context.Context, form *ProductItemForm[AccountID], pid uint64) ([]string, error)
	GetProductItemPrice(ctx context.Context, form *ProductItemForm[AccountID], pid uint64) (float64, error)
	GetProductItemProduct(ctx context.Context, form *ProductItemForm[AccountID], pid uint64, productForm *ProductForm[AccountID], fs FileStorage) (uint64, error)
	GetProductItemQuantityInStock(ctx context.Context, form *ProductItemForm[AccountID], pid uint64) (uint64, error)
	GetProductItemName(ctx context.Context, form *ProductItemForm[AccountID], pid uint64) (string, error)
	GetProductItemSKU(ctx context.Context, form *ProductItemForm[AccountID], pid uint64) (string, error)
	SetProductItemAttributes(ctx context.Context, form *ProductItemForm[AccountID], pid uint64, attrs json.RawMessage) error
	SetProductItemImages(ctx context.Context, form *ProductItemForm[AccountID], pid uint64, images []string) error
	SetProductItemPrice(ctx context.Context, form *ProductItemForm[AccountID], pid uint64, price float64) error
	SetProductItemProduct(ctx context.Context, form *ProductItemForm[AccountID], pid uint64, product *uint64, fs FileStorage) error
	SetProductItemQuantityInStock(ctx context.Context, form *ProductItemForm[AccountID], pid uint64, quantity uint64) error
	SetProductItemName(ctx context.Context, form *ProductItemForm[AccountID], pid uint64, name string) error
	SetProductItemSKU(ctx context.Context, form *ProductItemForm[AccountID], pid uint64, sku string) error
	GetProductItemUserReviews(ctx context.Context, form *ProductItemForm[AccountID], pid uint64, ids []uint64, reviewForms []*UserReviewForm[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]uint64, []*UserReviewForm[AccountID], error)
	GetProductItemUserReviewCount(ctx context.Context, form *ProductItemForm[AccountID], pid uint64) (uint64, error)
	CalculateProductItemAverageRating(ctx context.Context, form *ProductItemForm[AccountID], pid uint64) (float64, error)
}

type DBProductItemSubscription

type DBProductItemSubscription[AccountID comparable] interface {
	GetProductItemSubscriptionUserAccountID(ctx context.Context, form *ProductItemSubscriptionForm[AccountID], subscriptionID uint64) (AccountID, error)
	GetProductItemSubscriptionProductItem(ctx context.Context, form *ProductItemSubscriptionForm[AccountID], subscriptionID uint64, productItemForm *ProductItemForm[AccountID], fs FileStorage) (uint64, error)
	SetProductItemSubscriptionProductItem(ctx context.Context, form *ProductItemSubscriptionForm[AccountID], subscriptionID uint64, productItemID uint64, fs FileStorage) error
	GetProductItemSubscriptionSubscribedAt(ctx context.Context, form *ProductItemSubscriptionForm[AccountID], subscriptionID uint64) (time.Time, error)
	SetProductItemSubscriptionSubscribedAt(ctx context.Context, form *ProductItemSubscriptionForm[AccountID], subscriptionID uint64, subscribedAt time.Time) error
	GetProductItemSubscriptionExpiresAt(ctx context.Context, form *ProductItemSubscriptionForm[AccountID], subscriptionID uint64) (time.Time, error)
	SetProductItemSubscriptionExpiresAt(ctx context.Context, form *ProductItemSubscriptionForm[AccountID], subscriptionID uint64, expiresAt time.Time) error
	GetProductItemSubscriptionDuration(ctx context.Context, form *ProductItemSubscriptionForm[AccountID], subscriptionID uint64) (time.Duration, error)
	SetProductItemSubscriptionDuration(ctx context.Context, form *ProductItemSubscriptionForm[AccountID], subscriptionID uint64, duration time.Duration) error
	GetProductItemSubscriptionType(ctx context.Context, form *ProductItemSubscriptionForm[AccountID], subscriptionID uint64) (string, error)
	SetProductItemSubscriptionType(ctx context.Context, form *ProductItemSubscriptionForm[AccountID], subscriptionID uint64, subscriptionType string) error
	IsProductItemSubscriptionAutoRenew(ctx context.Context, form *ProductItemSubscriptionForm[AccountID], subscriptionID uint64) (bool, error)
	SetProductItemSubscriptionAutoRenew(ctx context.Context, form *ProductItemSubscriptionForm[AccountID], subscriptionID uint64, autoRenew bool) error
	IsProductItemSubscriptionActive(ctx context.Context, form *ProductItemSubscriptionForm[AccountID], subscriptionID uint64) (bool, error)
	SetProductItemSubscriptionActive(ctx context.Context, form *ProductItemSubscriptionForm[AccountID], subscriptionID uint64, isActive bool) error
	CancelProductItemSubscription(ctx context.Context, form *ProductItemSubscriptionForm[AccountID], subscriptionID uint64) error
}

type DBProductItemSubscriptionManager

type DBProductItemSubscriptionManager[AccountID comparable] interface {
	InitProductItemSubscriptionManager(ctx context.Context) error
	NewProductItemSubscription(ctx context.Context, userAccountID AccountID, productItemID uint64, subscribedAt time.Time, expiresAt time.Time, duration time.Duration, subscriptionType string, autoRenew bool, form *ProductItemSubscriptionForm[AccountID]) (uint64, error)
	RemoveProductItemSubscription(ctx context.Context, subscriptionID uint64) error
	RemoveAllProductItemSubscriptions(ctx context.Context) error
	GetProductItemSubscriptionCount(ctx context.Context) (uint64, error)
	GetProductItemSubscriptions(ctx context.Context, ids []uint64, forms []*ProductItemSubscriptionForm[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]uint64, []*ProductItemSubscriptionForm[AccountID], error)
	GetUserProductItemSubscriptions(ctx context.Context, userAccountID AccountID, ids []uint64, forms []*ProductItemSubscriptionForm[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]uint64, []*ProductItemSubscriptionForm[AccountID], error)
	GetUserProductItemSubscriptionCount(ctx context.Context, userAccountID AccountID) (uint64, error)
	GetProductItemSubscriptionsForProduct(ctx context.Context, productItemID uint64, ids []uint64, forms []*ProductItemSubscriptionForm[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]uint64, []*ProductItemSubscriptionForm[AccountID], error)
	GetProductItemSubscriptionCountForProduct(ctx context.Context, productItemID uint64) (uint64, error)
	GetExpiredSubscriptionsForRenewal(ctx context.Context, now time.Time, ids []uint64, forms []*ProductItemSubscriptionForm[AccountID], limit int64) ([]uint64, []*ProductItemSubscriptionForm[AccountID], error)
	FillProductItemSubscriptionWithID(ctx context.Context, sid uint64, subscriptionForm *ProductItemSubscriptionForm[AccountID]) error
}

type DBProductManager

type DBProductManager[AccountID comparable] interface {
	GetProductCategories(ctx context.Context, categories []uint64, catForms []*ProductCategoryForm[AccountID], skip int64, limit int64, queueOrder QueueOrder, fs FileStorage) ([]uint64, []*ProductCategoryForm[AccountID], error)
	GetProductCategoryCount(ctx context.Context) (uint64, error)
	NewProductCategory(ctx context.Context, name string, parentCategory *uint64, catForm *ProductCategoryForm[AccountID], fs FileStorage) (uint64, error)
	RemoveAllProductCategories(ctx context.Context) error
	RemoveProductCategory(ctx context.Context, category uint64) error
	SearchForProductCategories(ctx context.Context, searchText string, deepSearch bool, categories []uint64, catForms []*ProductCategoryForm[AccountID], skip int64, limit int64, queueOrder QueueOrder, fs FileStorage) ([]uint64, []*ProductCategoryForm[AccountID], error)
	SearchForProducts(ctx context.Context, searchText string, deepSearch bool, products []uint64, productForms []*ProductForm[AccountID], skip int64, limit int64, queueOrder QueueOrder, category_id *uint64, fs FileStorage) ([]uint64, []*ProductForm[AccountID], error)
	SearchForProductItems(ctx context.Context, searchText string, deepSearch bool, items []uint64, itemForms []*ProductItemForm[AccountID], skip int64, limit int64, queueOrder QueueOrder, product_id *uint64, category_id *uint64, fs FileStorage) ([]uint64, []*ProductItemForm[AccountID], error)
	InitProductManager(ctx context.Context) error
	FillProductCategoryWithID(ctx context.Context, cid uint64, catForm *ProductCategoryForm[AccountID], fs FileStorage) error
	FillProductWithID(ctx context.Context, pid uint64, productForm *ProductForm[AccountID], fs FileStorage) error
	FillProductItemWithID(ctx context.Context, iid uint64, itemForm *ProductItemForm[AccountID], fs FileStorage) error
}

type DBShippingMethod

type DBShippingMethod interface {
	GetShippingMethodName(ctx context.Context, form *ShippingMethodForm, id uint64) (string, error)
	SetShippingMethodName(ctx context.Context, form *ShippingMethodForm, id uint64, name string) error
	GetShippingMethodPrice(ctx context.Context, form *ShippingMethodForm, id uint64) (float64, error)
	SetShippingMethodPrice(ctx context.Context, form *ShippingMethodForm, id uint64, price float64) error
}

type DBShippingMethodManager

type DBShippingMethodManager interface {
	ExistsShippingMethod(ctx context.Context, name string) (bool, error)
	GetShippingMethodByName(ctx context.Context, name string, methodForm *ShippingMethodForm) (uint64, error)
	GetShippingMethodCount(ctx context.Context) (uint64, error)
	GetShippingMethods(ctx context.Context, shippingMethods []uint64, methodForms []*ShippingMethodForm, skip int64, limit int64, queueOrder QueueOrder) ([]uint64, []*ShippingMethodForm, error)
	NewShippingMethod(ctx context.Context, name string, price float64, methodForm *ShippingMethodForm) (uint64, error)
	RemoveAllShippingMethods(ctx context.Context) error
	RemoveShippingMethod(ctx context.Context, shippingMethod uint64) error
	InitShippingMethodManager(ctx context.Context) error
	FillShippingMethodWithID(ctx context.Context, sid uint64, methodForm *ShippingMethodForm) error
}

type DBUserAccount

type DBUserAccount[AccountID comparable] interface {
	AllowUserAccountTrading(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, state bool) error
	BanUserAccount(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, till time.Duration, reason string) error
	CalculateUserAccountTotalDepts(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (float64, error)
	CalculateUserAccountTotalDeptsWithoutPenalty(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (float64, error)
	ChargeUserAccountWallet(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, currency float64) error
	FineUserAccount(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, amount float64) error
	GetUserAccountAddressCount(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (uint64, error)
	GetUserAccountAddresses(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, addresses []uint64, addressForms []*UserAddressForm[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]uint64, []*UserAddressForm[AccountID], error)
	GetUserAccountBio(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (string, error)
	GetUserAccountDefaultAddress(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, addressForm *UserAddressForm[AccountID]) (uint64, error)
	GetUserAccountDefaultPaymentMethod(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, paymentMethodForm *UserPaymentMethodForm[AccountID]) (uint64, error)
	GetUserAccountFirstName(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (string, error)
	GetUserAccountLastName(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (string, error)
	GetUserAccountLastUpdatedAt(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (time.Time, error)
	GetUserAccountOrderCount(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (uint64, error)
	GetUserAccountOrders(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, orders []uint64, orderForms []*UserOrderForm[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]uint64, []*UserOrderForm[AccountID], error)
	GetUserAccountPassword(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (string, error)
	GetUserAccountPaymentMethodCount(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (uint64, error)
	GetUserAccountPaymentMethods(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, paymentMethods []uint64, paymentMethodForms []*UserPaymentMethodForm[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]uint64, []*UserPaymentMethodForm[AccountID], error)
	GetUserAccountProfileImages(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) ([]string, error)
	GetUserAccountRole(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, roleForm *UserRoleForm) (uint64, error)
	GetUserAccountShoppingCartCount(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (uint64, error)
	GetUserAccountShoppingCarts(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, carts []uint64, cartForms []*UserShoppingCartForm[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]uint64, []*UserShoppingCartForm[AccountID], error)
	GetUserAccountToken(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (string, error)
	GetUserAccountLevel(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (int64, error)
	GetUserAccountWalletCurrency(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (float64, error)
	GetUserAccountUserReviews(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, ids []uint64, reviewForms []*UserReviewForm[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]uint64, []*UserReviewForm[AccountID], error)
	GetUserAccountUserReviewCount(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (uint64, error)
	GetUserAccountSubscriptions(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, ids []uint64, subscriptionForms []*ProductItemSubscriptionForm[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]uint64, []*ProductItemSubscriptionForm[AccountID], error)
	GetUserAccountSubscriptionCount(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (uint64, error)
	RemoveUserAccountSubscription(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, subscriptionID uint64) error
	RemoveAllUserAccountSubscriptions(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) error
	GetUserAccountUserFactors(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, ids []uint64, factorForms []*UserFactorForm[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]uint64, []*UserFactorForm[AccountID], error)
	GetUserAccountUserFactorCount(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (uint64, error)
	NewUserAccountDiscount(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, value float64, validCount int64, discountForm *UserDiscountForm[AccountID]) (uint64, error)
	RemoveUserAccountDiscount(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, discountID uint64) error
	RemoveAllUserAccountDiscounts(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) error
	GetUserAccountDiscounts(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, ids []uint64, discountForms []*UserDiscountForm[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]uint64, []*UserDiscountForm[AccountID], error)
	GetUserAccountDiscountCount(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (uint64, error)
	HasUserAccountPenalty(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (bool, error)
	IsUserAccountActive(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (bool, error)
	IsUserAccountBanned(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (string, error)
	IsUserAccountSuperUser(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (bool, error)
	IsUserAccountTradingAllowed(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) (bool, error)
	NewUserAccountAddress(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, unitNumber string, street_number string, addressLine1 string, addressLine2 string, city string, region string, postalCode string, country *uint64, isDefault bool, addressForm *UserAddressForm[AccountID]) (uint64, error)
	NewUserAccountPaymentMethod(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, paymentType uint64, provider string, accoutNumber string, expiryDate time.Time, isDefault bool, paymentMethodForm *UserPaymentMethodForm[AccountID]) (uint64, error)
	NewUserAccountShoppingCart(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, sessionText string, cartForm *UserShoppingCartForm[AccountID]) (uint64, error)
	RemoveUserAccountAddress(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, addrID uint64) error
	RemoveAllUserAccountAddresses(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) error
	RemoveAllUserAccountOrders(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) error
	RemoveAllUserAccountPaymentMethods(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) error
	RemoveAllUserAccountShoppingCarts(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) error
	RemoveUserAccountShoppingCart(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, cid uint64) error
	RemoveUserAccountPaymentMethod(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, pid uint64) error
	RemoveUserAccountOrder(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, oid uint64) error
	SetUserAccountActive(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, state bool) error
	SetUserAccountBio(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, bio string) error
	SetUserAccountFirstName(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, name string) error
	SetUserAccountLastName(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, name string) error
	SetUserAccountLastUpdatedAt(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, lastUpdatedAt time.Time) error
	SetUserAccountPassword(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, password string) error
	SetUserAccountPenalty(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, penalty float64) error
	SetUserAccountProfileImages(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, images []string) error
	SetUserAccountRole(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, role uint64) error
	SetUserAccountSuperUser(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, state bool) error
	SetUserAccountToken(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, token string) error
	SetUserAccountLevel(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, level int64) error
	SetUserAccountWalletCurrency(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, currency float64) error
	TransferUserAccountCurrency(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, to AccountID, currency float64) error
	UnbanUserAccount(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID) error
	ValidateUserAccountPassword(ctx context.Context, form *UserAccountForm[AccountID], aid AccountID, password string) (bool, error)
}

type DBUserAccountManager

type DBUserAccountManager[AccountID comparable] interface {
	RemoveAllUserAccounts(ctx context.Context) error
	RemoveUserAccountWithToken(ctx context.Context, token string, password string) error
	RemoveUserAccount(ctx context.Context, aid AccountID) error
	GetUserAccountCount(ctx context.Context) (uint64, error)
	GetUserAccount(ctx context.Context, token string, accountForm *UserAccountForm[AccountID]) (AccountID, error)
	GetUserAccounts(ctx context.Context, accounts []AccountID, accountForms []*UserAccountForm[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]AccountID, []*UserAccountForm[AccountID], error)
	NewUserAccount(ctx context.Context, token string, password string, accountForm *UserAccountForm[AccountID]) (AccountID, error)
	AuthenticateUserAccount(ctx context.Context, token string, password string, accountForm *UserAccountForm[AccountID]) (AccountID, error)
	InitUserAccountManager(ctx context.Context) error
	FillUserAccountWithID(ctx context.Context, aid AccountID, accountForm *UserAccountForm[AccountID]) error
}

type DBUserAddress

type DBUserAddress[AccountID comparable] interface {
	GetUserAddressAddressLine1(ctx context.Context, form *UserAddressForm[AccountID], addr uint64) (string, error)
	GetUserAddressAddressLine2(ctx context.Context, form *UserAddressForm[AccountID], addr uint64) (string, error)
	GetUserAddressCity(ctx context.Context, form *UserAddressForm[AccountID], addr uint64) (string, error)
	GetUserAddressCountry(ctx context.Context, form *UserAddressForm[AccountID], addr uint64, countryForm *CountryForm) (uint64, error)
	GetUserAddressPostalCode(ctx context.Context, form *UserAddressForm[AccountID], addr uint64) (string, error)
	GetUserAddressRegion(ctx context.Context, form *UserAddressForm[AccountID], addr uint64) (string, error)
	GetUserAddressStreetNumber(ctx context.Context, form *UserAddressForm[AccountID], addr uint64) (string, error)
	GetUserAddressUnitNumber(ctx context.Context, form *UserAddressForm[AccountID], addr uint64) (string, error)
	GetUserAddressAccountID(ctx context.Context, form *UserAddressForm[AccountID], addr uint64) (AccountID, error)
	IsUserAddressDefault(ctx context.Context, form *UserAddressForm[AccountID], addr uint64) (bool, error)
	SetUserAddressDefault(ctx context.Context, form *UserAddressForm[AccountID], addr uint64) error
	SetUserAddressAddressLine1(ctx context.Context, form *UserAddressForm[AccountID], addr uint64, line string) error
	SetUserAddressAddressLine2(ctx context.Context, form *UserAddressForm[AccountID], addr uint64, line string) error
	SetUserAddressCity(ctx context.Context, form *UserAddressForm[AccountID], addr uint64, city string) error
	SetUserAddressCountry(ctx context.Context, form *UserAddressForm[AccountID], addr uint64, country *uint64) error
	SetUserAddressPostalCode(ctx context.Context, form *UserAddressForm[AccountID], addr uint64, code string) error
	SetUserAddressRegion(ctx context.Context, form *UserAddressForm[AccountID], addr uint64, region string) error
	SetUserAddressStreetNumber(ctx context.Context, form *UserAddressForm[AccountID], addr uint64, number string) error
	SetUserAddressUnitNumber(ctx context.Context, form *UserAddressForm[AccountID], addr uint64, number string) error
}

type DBUserAddressManager

type DBUserAddressManager[AccountID comparable] interface {
	GetUserAddressCount(ctx context.Context) (uint64, error)
	GetUserAddresses(ctx context.Context, addresses []DBUserAddressResult[AccountID], addressForms []*UserAddressForm[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]DBUserAddressResult[AccountID], []*UserAddressForm[AccountID], error)
	RemoveAllUserAddresses(ctx context.Context) error
	InitUserAddressManager(ctx context.Context) error
	FillUserAddressWithID(ctx context.Context, aid uint64, addressForm *UserAddressForm[AccountID]) error
}

type DBUserAddressResult

type DBUserAddressResult[AccountID comparable] struct {
	ID  uint64
	AID AccountID
}

type DBUserDiscount

type DBUserDiscount[AccountID comparable] interface {
	GetUserDiscountCode(ctx context.Context, form *UserDiscountForm[AccountID], discountID uint64) (string, error)
	SetUserDiscountCode(ctx context.Context, form *UserDiscountForm[AccountID], discountID uint64, code string) error
	GetUserDiscountValue(ctx context.Context, form *UserDiscountForm[AccountID], discountID uint64) (float64, error)
	SetUserDiscountValue(ctx context.Context, form *UserDiscountForm[AccountID], discountID uint64, value float64) error
	GetUserDiscountValidCount(ctx context.Context, form *UserDiscountForm[AccountID], discountID uint64) (int64, error)
	SetUserDiscountValidCount(ctx context.Context, form *UserDiscountForm[AccountID], discountID uint64, validCount int64) error
	DecrementUserDiscountValidCount(ctx context.Context, form *UserDiscountForm[AccountID], discountID uint64) error
	GetUserDiscountUsedBy(ctx context.Context, form *UserDiscountForm[AccountID], discountID uint64) ([]AccountID, error)
	AddUserDiscountUsedBy(ctx context.Context, form *UserDiscountForm[AccountID], discountID uint64, accountID AccountID) error
	HasUserUsedDiscount(ctx context.Context, form *UserDiscountForm[AccountID], discountID uint64, accountID AccountID) (bool, error)
}

type DBUserDiscountManager

type DBUserDiscountManager[AccountID comparable] interface {
	InitUserDiscountManager(ctx context.Context) error
	NewUserDiscount(ctx context.Context, ownerAccountID AccountID, value float64, validCount int64, discountForm *UserDiscountForm[AccountID]) (uint64, error)
	RemoveUserDiscount(ctx context.Context, discountID uint64) error
	RemoveAllUserDiscounts(ctx context.Context) error
	GetUserDiscountCount(ctx context.Context) (uint64, error)
	GetUserDiscounts(ctx context.Context, ids []DBUserDiscountResult[AccountID], discountForms []*UserDiscountForm[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]DBUserDiscountResult[AccountID], []*UserDiscountForm[AccountID], error)
	GetUserDiscountByCode(ctx context.Context, code string, discountForm *UserDiscountForm[AccountID]) (DBUserDiscountResult[AccountID], error)
	ExistsUserDiscountCode(ctx context.Context, code string) (bool, error)
	GetUserDiscountsForAccount(ctx context.Context, ownerAccountID AccountID, ids []uint64, discountForms []*UserDiscountForm[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]uint64, []*UserDiscountForm[AccountID], error)
	FillUserDiscountWithID(ctx context.Context, did uint64, discountForm *UserDiscountForm[AccountID]) error
}

type DBUserDiscountResult

type DBUserDiscountResult[AccountID comparable] struct {
	ID  uint64
	AID AccountID
}

type DBUserFactor

type DBUserFactor[AccountID comparable] interface {
	GetUserFactorProducts(ctx context.Context, form *UserFactorForm[AccountID], fid uint64) (json.RawMessage, error)
	SetUserFactorProducts(ctx context.Context, form *UserFactorForm[AccountID], fid uint64, products json.RawMessage) error
	GetUserFactorDiscount(ctx context.Context, form *UserFactorForm[AccountID], fid uint64) (float64, error)
	SetUserFactorDiscount(ctx context.Context, form *UserFactorForm[AccountID], fid uint64, discount float64) error
	GetUserFactorTax(ctx context.Context, form *UserFactorForm[AccountID], fid uint64) (float64, error)
	SetUserFactorTax(ctx context.Context, form *UserFactorForm[AccountID], fid uint64, tax float64) error
	GetUserFactorAmountPaid(ctx context.Context, form *UserFactorForm[AccountID], fid uint64) (float64, error)
	SetUserFactorAmountPaid(ctx context.Context, form *UserFactorForm[AccountID], fid uint64, amountPaid float64) error
}

type DBUserFactorManager

type DBUserFactorManager[AccountID comparable] interface {
	InitUserFactorManager(ctx context.Context) error
	GetUserFactorCount(ctx context.Context, aid AccountID) (uint64, error)
	GetUserFactors(ctx context.Context, aid AccountID, ids []uint64, factorForms []*UserFactorForm[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]uint64, []*UserFactorForm[AccountID], error)
	RemoveAllUserFactors(ctx context.Context) error
	RemoveUserAccountFactors(ctx context.Context, aid AccountID) error
	FillUserFactorWithID(ctx context.Context, fid uint64, factorForm *UserFactorForm[AccountID]) error
}

type DBUserOrder

type DBUserOrder[AccountID comparable] interface {
	CalculateUserOrderTotalPrice(ctx context.Context, form *UserOrderForm[AccountID], oid uint64) (float64, error)
	DeliverUserOrder(ctx context.Context, form *UserOrderForm[AccountID], oid uint64, sid uint64, date time.Time, comment string) error
	GetUserOrderDeliveryComment(ctx context.Context, form *UserOrderForm[AccountID], oid uint64) (string, error)
	GetUserOrderDeliveryDate(ctx context.Context, form *UserOrderForm[AccountID], oid uint64) (time.Time, error)
	GetUserOrderDate(ctx context.Context, form *UserOrderForm[AccountID], oid uint64) (time.Time, error)
	GetUserOrderTotal(ctx context.Context, form *UserOrderForm[AccountID], oid uint64) (float64, error)
	GetUserOrderPaymentMethod(ctx context.Context, form *UserOrderForm[AccountID], oid uint64, paymentMethodForm *UserPaymentMethodForm[AccountID]) (uint64, error)
	GetUserOrderProductItemCount(ctx context.Context, form *UserOrderForm[AccountID], oid uint64) (uint64, error)
	GetUserOrderProductItems(ctx context.Context, form *UserOrderForm[AccountID], oid uint64, items []DBUserOrderProductItem, skip int64, limit int64, queueOrder QueueOrder) ([]DBUserOrderProductItem, error)
	GetUserOrderShippingAddress(ctx context.Context, form *UserOrderForm[AccountID], oid uint64, addressForm *UserAddressForm[AccountID]) (uint64, error)
	GetUserOrderShippingMethod(ctx context.Context, form *UserOrderForm[AccountID], oid uint64, shippingMethodForm *ShippingMethodForm) (uint64, error)
	GetUserOrderStatus(ctx context.Context, form *UserOrderForm[AccountID], oid uint64, statusForm *OrderStatusForm) (uint64, error)
	GetUserOrderUserComment(ctx context.Context, form *UserOrderForm[AccountID], oid uint64) (string, error)
	SetUserOrderDeliveryComment(ctx context.Context, form *UserOrderForm[AccountID], oid uint64, comment string) error
	SetUserOrderDeliveryDate(ctx context.Context, form *UserOrderForm[AccountID], oid uint64, date time.Time) error
	SetUserOrderDate(ctx context.Context, form *UserOrderForm[AccountID], oid uint64, date time.Time) error
	SetUserOrderTotal(ctx context.Context, form *UserOrderForm[AccountID], oid uint64, total float64) error
	SetUserOrderPaymentMethod(ctx context.Context, form *UserOrderForm[AccountID], oid uint64, method uint64) error
	SetUserOrderProductItems(ctx context.Context, form *UserOrderForm[AccountID], oid uint64, items []DBUserOrderProductItem) error
	SetUserOrderShippingAddress(ctx context.Context, form *UserOrderForm[AccountID], oid uint64, address uint64) error
	SetUserOrderShippingMethod(ctx context.Context, form *UserOrderForm[AccountID], oid uint64, method uint64) error
	SetUserOrderStatus(ctx context.Context, form *UserOrderForm[AccountID], oid uint64, status uint64) error
	SetUserOrderUserComment(ctx context.Context, form *UserOrderForm[AccountID], oid uint64, comment string) error
}

type DBUserOrderManager

type DBUserOrderManager[AccountID comparable] interface {
	GetUserOrderCount(ctx context.Context) (uint64, error)
	GetUserOrders(ctx context.Context, orders []DBUserOrderResult[AccountID], orderForms []*UserOrderForm[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]DBUserOrderResult[AccountID], []*UserOrderForm[AccountID], error)
	RemoveAllUserOrders(ctx context.Context) error
	InitUserOrderManager(ctx context.Context) error
	FillUserOrderWithID(ctx context.Context, oid uint64, orderForm *UserOrderForm[AccountID]) error
}

type DBUserOrderProductItem

type DBUserOrderProductItem struct {
	ProductItemID uint64          `json:"product_item_id"`
	Quantity      uint64          `json:"quantity"`
	Attributes    json.RawMessage `json:"attributes,omitempty"`
}

type DBUserOrderResult

type DBUserOrderResult[AccountID comparable] struct {
	ID  uint64
	AID AccountID
}

type DBUserPaymentMethod

type DBUserPaymentMethod[AccountID comparable] interface {
	GetUserPaymentMethodAccountNumber(ctx context.Context, form *UserPaymentMethodForm[AccountID], mid uint64) (string, error)
	GetUserPaymentMethodExpiryDate(ctx context.Context, form *UserPaymentMethodForm[AccountID], mid uint64) (time.Time, error)
	GetUserPaymentMethodPaymentType(ctx context.Context, form *UserPaymentMethodForm[AccountID], mid uint64, paymentTypeFrom *PaymentTypeForm) (uint64, error)
	GetUserPaymentMethodProvider(ctx context.Context, form *UserPaymentMethodForm[AccountID], mid uint64) (string, error)
	IsUserPaymentMethodDefault(ctx context.Context, form *UserPaymentMethodForm[AccountID], mid uint64) (bool, error)
	IsUserPaymentMethodExpired(ctx context.Context, form *UserPaymentMethodForm[AccountID], mid uint64) (bool, error)
	SetUserPaymentMethodAccountNumber(ctx context.Context, form *UserPaymentMethodForm[AccountID], mid uint64, number string) error
	SetUserPaymentMethodDefault(ctx context.Context, form *UserPaymentMethodForm[AccountID], mid uint64, state bool) error
	SetUserPaymentMethodExpiryDate(ctx context.Context, form *UserPaymentMethodForm[AccountID], mid uint64, date time.Time) error
	SetUserPaymentMethodPaymentType(ctx context.Context, form *UserPaymentMethodForm[AccountID], mid uint64, pType uint64) error
	SetUserPaymentMethodProvider(ctx context.Context, form *UserPaymentMethodForm[AccountID], mid uint64, provider string) error
}

type DBUserPaymentMethodManager

type DBUserPaymentMethodManager[AccountID comparable] interface {
	GetUserPaymentMethodCount(ctx context.Context) (uint64, error)
	GetUserPaymentMethods(ctx context.Context, methods []DBUserPaymentMethodResult[AccountID], methodForms []*UserPaymentMethodForm[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]DBUserPaymentMethodResult[AccountID], []*UserPaymentMethodForm[AccountID], error)
	RemoveAllUserPaymentMethods(ctx context.Context) error
	InitUserPaymentMethodManager(ctx context.Context) error
	FillUserPaymentMethodWithID(ctx context.Context, mid uint64, paymentMethodForm *UserPaymentMethodForm[AccountID]) error
}

type DBUserPaymentMethodResult

type DBUserPaymentMethodResult[AccountID comparable] struct {
	ID  uint64
	AID AccountID
}

type DBUserReview

type DBUserReview[AccountID comparable] interface {
	GetUserReviewRatingValue(ctx context.Context, form *UserReviewForm[AccountID], reviewID uint64) (int32, error)
	SetUserReviewRatingValue(ctx context.Context, form *UserReviewForm[AccountID], reviewID uint64, rating int32) error
	GetUserReviewComment(ctx context.Context, form *UserReviewForm[AccountID], reviewID uint64) (string, error)
	SetUserReviewComment(ctx context.Context, form *UserReviewForm[AccountID], reviewID uint64, comment string) error
	GetUserReviewProductItem(ctx context.Context, form *UserReviewForm[AccountID], reviewID uint64, productItemForm *ProductItemForm[AccountID], fs FileStorage) (uint64, error)
}

type DBUserReviewManager

type DBUserReviewManager[AccountID comparable] interface {
	InitUserReviewManager(ctx context.Context) error
	NewUserReview(ctx context.Context, userAccountID AccountID, productItemID uint64, ratingValue int32, comment string, reviewForm *UserReviewForm[AccountID]) (uint64, error)
	RemoveUserReview(ctx context.Context, reviewID uint64) error
	RemoveAllUserReviews(ctx context.Context) error
	GetUserReviewCount(ctx context.Context) (uint64, error)
	GetUserReviews(ctx context.Context, ids []DBUserReviewResult[AccountID], reviewForms []*UserReviewForm[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]DBUserReviewResult[AccountID], []*UserReviewForm[AccountID], error)
	GetUserReviewsForProductItem(ctx context.Context, productItemID uint64, ids []DBUserReviewResult[AccountID], reviewForms []*UserReviewForm[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]DBUserReviewResult[AccountID], []*UserReviewForm[AccountID], error)
	GetUserReviewsForAccount(ctx context.Context, accountID AccountID, ids []DBUserReviewResult[AccountID], reviewForms []*UserReviewForm[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]DBUserReviewResult[AccountID], []*UserReviewForm[AccountID], error)
	FillUserReviewWithID(ctx context.Context, rid uint64, reviewForm *UserReviewForm[AccountID]) error
}

type DBUserReviewResult

type DBUserReviewResult[AccountID comparable] struct {
	ID  uint64
	AID AccountID
}

type DBUserRole

type DBUserRole interface {
	GetUserRoleName(ctx context.Context, form *UserRoleForm, id uint64) (string, error)
	SetUserRoleName(ctx context.Context, form *UserRoleForm, id uint64, name string) error
}

type DBUserRoleManager

type DBUserRoleManager interface {
	ExistsUserRole(ctx context.Context, name string) (bool, error)
	GetUserRoleByName(ctx context.Context, name string, roleForm *UserRoleForm) (uint64, error)
	GetUserRoleCount(ctx context.Context) (uint64, error)
	GetUserRoles(ctx context.Context, roles []uint64, roleForms []*UserRoleForm, skip int64, limit int64, queueOrder QueueOrder) ([]uint64, []*UserRoleForm, error)
	NewUserRole(ctx context.Context, name string, roleForm *UserRoleForm) (uint64, error)
	RemoveAllUserRoles(ctx context.Context) error
	RemoveUserRole(ctx context.Context, country uint64) error
	InitUserRoleManager(ctx context.Context) error
	FillUserRoleWithID(ctx context.Context, rid uint64, roleForm *UserRoleForm) error
}

type DBUserShoppingCart

type DBUserShoppingCart[AccountID comparable] interface {
	CalculateUserShoppingCartDept(ctx context.Context, form *UserShoppingCartForm[AccountID], sid uint64, shippingMethod uint64) (float64, error)
	GetUserShoppingCartSessionText(ctx context.Context, form *UserShoppingCartForm[AccountID], sid uint64) (string, error)
	GetUserShoppingCartItemCount(ctx context.Context, form *UserShoppingCartForm[AccountID], sid uint64) (uint64, error)
	GetUserShoppingCartItems(ctx context.Context, form *UserShoppingCartForm[AccountID], sid uint64, items []uint64, itemForms []*UserShoppingCartItemForm[AccountID], skip int64, limit int64, queueOrder QueueOrder, fs FileStorage, osm OrderStatusManager) ([]uint64, []*UserShoppingCartItemForm[AccountID], error)
	NewUserShoppingCartShoppingCartItem(ctx context.Context, form *UserShoppingCartForm[AccountID], sid uint64, productItem uint64, count int64, attrs json.RawMessage, itemForm *UserShoppingCartItemForm[AccountID], fs FileStorage, osm OrderStatusManager) (uint64, error)
	OrderUserShoppingCart(ctx context.Context, form *UserShoppingCartForm[AccountID], sid uint64, paymentMethod uint64, address uint64, shippingMethod uint64, userComment string, discountCode string, orderForm *UserOrderForm[AccountID]) (uint64, error)
	RemoveUserShoppingCartAllShoppingCartItems(ctx context.Context, form *UserShoppingCartForm[AccountID], sid uint64) error
	RemoveUserShoppingCartShoppingCartItem(ctx context.Context, form *UserShoppingCartForm[AccountID], sid uint64, itid uint64) error
	SetUserShoppingCartSessionText(ctx context.Context, form *UserShoppingCartForm[AccountID], sid uint64, text string) error
}

type DBUserShoppingCartItem

type DBUserShoppingCartItem[AccountID comparable] interface {
	AddUserShoppingCartItemQuantity(ctx context.Context, form *UserShoppingCartItemForm[AccountID], itid uint64, delta int64) error
	CalculateUserShoppingCartItemDept(ctx context.Context, form *UserShoppingCartItemForm[AccountID], itid uint64) (float64, error)
	GetUserShoppingCartItemProductItem(ctx context.Context, form *UserShoppingCartItemForm[AccountID], itid uint64, pItemForm *ProductItemForm[AccountID], db FileStorage) (uint64, error)
	GetUserShoppingCartItemQuantity(ctx context.Context, form *UserShoppingCartItemForm[AccountID], itid uint64) (int64, error)
	GetUserShoppingCartItemShoppingCart(ctx context.Context, form *UserShoppingCartItemForm[AccountID], itid uint64, cartForm *UserShoppingCartForm[AccountID], db FileStorage, osm OrderStatusManager) (uint64, error)
	SetUserShoppingCartItemQuantity(ctx context.Context, form *UserShoppingCartItemForm[AccountID], itid uint64, quantity int64) error
	GetUserShoppingCartItemAttributes(ctx context.Context, form *UserShoppingCartItemForm[AccountID], itid uint64) (json.RawMessage, error)
	SetUserShoppingCartItemAttributes(ctx context.Context, form *UserShoppingCartItemForm[AccountID], itid uint64, attrs json.RawMessage) error
}

type DBUserShoppingCartManager

type DBUserShoppingCartManager[AccountID comparable] interface {
	GetShoppingCartBySessionText(ctx context.Context, sessionText string, cartForm *UserShoppingCartForm[AccountID]) (uint64, error)
	GetShoppingCartCount(ctx context.Context) (uint64, error)
	GetShoppingCarts(ctx context.Context, ids []DBUserUserShoppingCartResult[AccountID], cartForms []*UserShoppingCartForm[AccountID], skip int64, limit int64, order QueueOrder) ([]DBUserUserShoppingCartResult[AccountID], []*UserShoppingCartForm[AccountID], error)
	RemoveAllShoppingCarts(ctx context.Context) error
	InitUserShoppingCartManager(ctx context.Context) error
	FillUserShoppingCartWithID(ctx context.Context, cid uint64, cartForm *UserShoppingCartForm[AccountID]) error
	FillUserShoppingCartItemWithID(ctx context.Context, iid uint64, cartForm *UserShoppingCartItemForm[AccountID]) error
}

type DBUserUserShoppingCartResult

type DBUserUserShoppingCartResult[AccountID comparable] struct {
	ID  uint64
	AID AccountID
}

type FileCloser

type FileCloser interface {
	io.Closer
	FileIdentifier
}

type FileIO

type FileIO interface {
	FileReader
	FileWriter
	FileCloser
	io.Seeker
}

type FileIdentifier

type FileIdentifier interface {
	GetToken(ctx context.Context) (string, error)
}

type FileReadCloser

type FileReadCloser interface {
	FileReader
	FileCloser
}

type FileReader

type FileReader interface {
	io.Reader
	FileIdentifier
}

type FileStorage

type FileStorage interface {
	GeneralClosable
	Connect(ctx context.Context) error
	Open(ctx context.Context, token string) (FileIO, error)
	Create(ctx context.Context, token string) (FileIO, error)
	Exists(ctx context.Context, token string) (bool, error)
	Delete(ctx context.Context, token string) error
	DeleteAll(ctx context.Context, path string) error
}

type FileWriteCloser

type FileWriteCloser interface {
	FileWriter
	FileCloser
}

type FileWriter

type FileWriter interface {
	io.Writer
	FileIdentifier
}

type GeneralAppObject

type GeneralAppObject interface {
	GeneralInitiative
	GeneralClosable
	GeneralPulsable
}

type GeneralClosable

type GeneralClosable interface {
	Close(ctx context.Context) error
}

type GeneralInitiative

type GeneralInitiative interface {
	Init(ctx context.Context) error
}

type GeneralPulsable

type GeneralPulsable interface {
	Pulse(ctx context.Context) error // use err.join or err group to handle and log multiple errors
}

type OSFileIO

type OSFileIO struct {
	File  *os.File
	Token string
}

func (*OSFileIO) Close

func (file *OSFileIO) Close() error

func (*OSFileIO) GetToken

func (file *OSFileIO) GetToken(ctx context.Context) (string, error)

func (*OSFileIO) Read

func (file *OSFileIO) Read(p []byte) (n int, err error)

func (*OSFileIO) Seek

func (file *OSFileIO) Seek(offset int64, whence int) (int64, error)

func (*OSFileIO) Write

func (file *OSFileIO) Write(p []byte) (n int, err error)

type OrderStatus

type OrderStatus interface {
	GeneralAppObject

	GetID(ctx context.Context) (uint64, error)
	GetName(ctx context.Context) (string, error)
	SetName(ctx context.Context, name string) error

	IsDeliveried(ctx context.Context) (bool, error)

	ToBuiltinObject(ctx context.Context) (*BuiltinOrderStatus, error)
	ToFormObject(ctx context.Context) (*OrderStatusForm, error)
	ApplyFormObject(ctx context.Context, form *OrderStatusForm) error
}

type OrderStatusForm

type OrderStatusForm struct {
	ID                uint64  `json:"id"`
	Name              *string `json:"name,omitempty"`
	IsDeliveriedState *bool   `json:"is_deliveried,omitempty"`
}

func (*OrderStatusForm) Clone

func (form *OrderStatusForm) Clone(ctx context.Context) (OrderStatusForm, error)

type OrderStatusManager

type OrderStatusManager interface {
	GeneralAppObject

	GetOrderStatusWithID(ctx context.Context, aid uint64, fill bool) (OrderStatus, error)

	NewOrderStatus(ctx context.Context, name string) (OrderStatus, error)
	RemoveOrderStatus(ctx context.Context, status OrderStatus) error
	RemoveAllOrderStatuses(ctx context.Context) error
	GetOrderStatuses(ctx context.Context, orderStatuses []OrderStatus, skip int64, limit int64, queueOrder QueueOrder) ([]OrderStatus, error)
	GetOrderStatusCount(ctx context.Context) (uint64, error)
	GetOrderStatusByName(ctx context.Context, name string) (OrderStatus, error)
	ExistsOrderStatus(ctx context.Context, name string) (bool, error)

	GetDeliveriedOrderStatus(ctx context.Context) (OrderStatus, error)
	GetIdleOrderStatus(ctx context.Context) (OrderStatus, error)

	ToBuiltinObject(ctx context.Context) (*BuiltinOrderStatusManager, error)
}

type PaymentType

type PaymentType interface {
	GeneralAppObject

	GetID(ctx context.Context) (uint64, error)
	GetName(ctx context.Context) (string, error)
	SetName(ctx context.Context, name string) error

	ToBuiltinObject(ctx context.Context) (*BuiltinPaymentType, error)
	ToFormObject(ctx context.Context) (*PaymentTypeForm, error)
	ApplyFormObject(ctx context.Context, form *PaymentTypeForm) error
}

type PaymentTypeForm

type PaymentTypeForm struct {
	ID   uint64  `json:"id"`
	Name *string `json:"name,omitempty"`
}

func (*PaymentTypeForm) Clone

func (form *PaymentTypeForm) Clone(ctx context.Context) (PaymentTypeForm, error)

type PaymentTypeManager

type PaymentTypeManager interface {
	GeneralAppObject

	GetPaymentTypeWithID(ctx context.Context, aid uint64, fill bool) (PaymentType, error)

	NewPaymentType(ctx context.Context, name string) (PaymentType, error)
	RemovePaymentType(ctx context.Context, paymentType PaymentType) error
	RemoveAllPaymentTypes(ctx context.Context) error
	GetPaymentTypes(ctx context.Context, paymentTypes []PaymentType, skip int64, limit int64, queueOrder QueueOrder) ([]PaymentType, error)
	GetPaymentTypeCount(ctx context.Context) (uint64, error)
	GetPaymentTypeByName(ctx context.Context, name string) (PaymentType, error)
	ExistsPaymentType(ctx context.Context, name string) (bool, error)

	ToBuiltinObject(ctx context.Context) (*BuiltinPaymentTypeManager, error)
}

type Product

type Product[AccountID comparable] interface {
	GeneralAppObject

	GetID(ctx context.Context) (uint64, error)
	GetName(ctx context.Context) (string, error)
	SetName(ctx context.Context, name string) error
	GetDescription(ctx context.Context) (string, error)
	SetDescription(ctx context.Context, desc string) error
	GetImages(ctx context.Context) ([]FileReadCloser, error)
	SetImages(ctx context.Context, images []FileReader) error
	GetProductCategory(ctx context.Context) (ProductCategory[AccountID], error)
	SetProductCategory(ctx context.Context, category ProductCategory[AccountID]) error

	AddProductItem(ctx context.Context, sku string, name string, price float64, quantity uint64, images []FileReader, attrs json.RawMessage) (ProductItem[AccountID], error)
	RemoveProductItem(ctx context.Context, item ProductItem[AccountID]) error
	RemoveAllProductItems(ctx context.Context) error
	GetProductItems(ctx context.Context, items []ProductItem[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]ProductItem[AccountID], error)
	GetProductItemCount(ctx context.Context) (uint64, error)

	ToBuiltinObject(ctx context.Context) (*BuiltinProduct[AccountID], error)
	ToFormObject(ctx context.Context) (*ProductForm[AccountID], error)
	ApplyFormObject(ctx context.Context, form *ProductForm[AccountID]) error
}

type ProductCategory

type ProductCategory[AccountID comparable] interface {
	GeneralAppObject

	GetID(ctx context.Context) (uint64, error)
	GetName(ctx context.Context) (string, error)
	SetName(ctx context.Context, name string) error
	GetParentProductCategory(ctx context.Context) (ProductCategory[AccountID], error)
	SetParentProductCategory(ctx context.Context, parent ProductCategory[AccountID]) error

	NewProduct(ctx context.Context, name string, description string, images []FileReader) (Product[AccountID], error)
	RemoveProduct(ctx context.Context, product Product[AccountID]) error
	RemoveAllProducts(ctx context.Context) error
	GetProducts(ctx context.Context, products []Product[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]Product[AccountID], error)
	GetProductCount(ctx context.Context) (uint64, error)

	ToBuiltinObject(ctx context.Context) (*BuiltinProductCategory[AccountID], error)
	ToFormObject(ctx context.Context) (*ProductCategoryForm[AccountID], error)
	ApplyFormObject(ctx context.Context, form *ProductCategoryForm[AccountID]) error
}

type ProductCategoryForm

type ProductCategoryForm[AccountID comparable] struct {
	ID                    uint64                             `json:"id"`
	Name                  *string                            `json:"name,omitempty"`
	ParentProductCategory *BuiltinProductCategory[AccountID] `json:"parent_product_category,omitempty"`
	ProductCount          *uint64                            `json:"product_count,omitempty"`
}

func (*ProductCategoryForm[AccountID]) Clone

func (form *ProductCategoryForm[AccountID]) Clone(ctx context.Context) (ProductCategoryForm[AccountID], error)

type ProductForm

type ProductForm[AccountID comparable] struct {
	ID               uint64                             `json:"id,omitempty"`
	Description      *string                            `json:"description,omitempty"`
	Images           *[]string                          `json:"images,omitempty"`
	Name             *string                            `json:"name,omitempty"`
	ProductCategory  *BuiltinProductCategory[AccountID] `json:"product_category,omitempty"`
	ProductItemCount *uint64                            `json:"product_item_count,omitempty"`
}

func (*ProductForm[AccountID]) Clone

func (form *ProductForm[AccountID]) Clone(ctx context.Context) (ProductForm[AccountID], error)

type ProductItem

type ProductItem[AccountID comparable] interface {
	GeneralAppObject

	GetID(ctx context.Context) (uint64, error)
	GetName(ctx context.Context) (string, error)
	SetName(ctx context.Context, name string) error
	GetSKU(ctx context.Context) (string, error) // slug
	SetSKU(ctx context.Context, sku string) error
	GetPrice(ctx context.Context) (float64, error)
	SetPrice(ctx context.Context, price float64) error

	GetQuantityInStock(ctx context.Context) (uint64, error)
	SetQuantityInStock(ctx context.Context, quantity uint64) error
	AddQuantityInStock(ctx context.Context, delta int64) error

	GetImages(ctx context.Context) ([]FileReadCloser, error)
	SetImages(ctx context.Context, images []FileReader) error

	GetAttributes(ctx context.Context) (json.RawMessage, error)
	SetAttributes(ctx context.Context, attrs json.RawMessage) error

	GetProduct(ctx context.Context) (Product[AccountID], error)
	SetProduct(ctx context.Context, product Product[AccountID]) error

	GetUserReviews(ctx context.Context, reviews []UserReview[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserReview[AccountID], error)
	GetUserReviewCount(ctx context.Context) (uint64, error)
	CalculateAverageRating(ctx context.Context) (float64, error)

	ToBuiltinObject(ctx context.Context) (*BuiltinProductItem[AccountID], error)
	ToFormObject(ctx context.Context) (*ProductItemForm[AccountID], error)
	ApplyFormObject(ctx context.Context, form *ProductItemForm[AccountID]) error
}

type ProductItemForm

type ProductItemForm[AccountID comparable] struct {
	ID              uint64                     `json:"id"`
	Attributes      *json.RawMessage           `json:"attributes,omitempty"`
	Images          *[]string                  `json:"images,omitempty"`
	Price           *float64                   `json:"price,omitempty"`
	Product         *BuiltinProduct[AccountID] `json:"product,omitempty"`
	QuantityInStock *uint64                    `json:"quantity_in_stock,omitempty"`
	Name            *string                    `json:"name,omitempty"`
	SKU             *string                    `json:"sku,omitempty"`
}

func (*ProductItemForm[AccountID]) Clone

func (form *ProductItemForm[AccountID]) Clone(ctx context.Context) (ProductItemForm[AccountID], error)

type ProductItemSubscription

type ProductItemSubscription[AccountID comparable] interface {
	GeneralAppObject

	GetID(ctx context.Context) (uint64, error)
	GetUserAccountID(ctx context.Context) (AccountID, error)

	GetProductItem(ctx context.Context) (ProductItem[AccountID], error)
	SetProductItem(ctx context.Context, productItem ProductItem[AccountID]) error

	GetSubscribedAt(ctx context.Context) (time.Time, error)
	SetSubscribedAt(ctx context.Context, subscribedAt time.Time) error

	GetExpiresAt(ctx context.Context) (time.Time, error)
	SetExpiresAt(ctx context.Context, expiresAt time.Time) error

	GetDuration(ctx context.Context) (time.Duration, error)
	SetDuration(ctx context.Context, duration time.Duration) error

	GetSubscriptionType(ctx context.Context) (string, error)
	SetSubscriptionType(ctx context.Context, subscriptionType string) error

	IsAutoRenew(ctx context.Context) (bool, error)
	SetAutoRenew(ctx context.Context, autoRenew bool) error

	IsActive(ctx context.Context) (bool, error)
	SetActive(ctx context.Context, isActive bool) error

	IsExpired(ctx context.Context) (bool, error)
	Cancel(ctx context.Context) error

	ToBuiltinObject(ctx context.Context) (*BuiltinProductItemSubscription[AccountID], error)
	ToFormObject(ctx context.Context) (*ProductItemSubscriptionForm[AccountID], error)
	ApplyFormObject(ctx context.Context, form *ProductItemSubscriptionForm[AccountID]) error
}

type ProductItemSubscriptionForm

type ProductItemSubscriptionForm[AccountID comparable] struct {
	ID               uint64                         `json:"id"`
	UserAccountID    AccountID                      `json:"user_account_id"`
	ProductItem      *BuiltinProductItem[AccountID] `json:"product_item,omitempty"`
	SubscribedAt     *time.Time                     `json:"subscribed_at,omitempty"`
	ExpiresAt        *time.Time                     `json:"expires_at,omitempty"`
	Duration         *time.Duration                 `json:"duration,omitempty"`
	SubscriptionType *string                        `json:"subscription_type,omitempty"`
	AutoRenew        *bool                          `json:"auto_renew,omitempty"`
	IsActive         *bool                          `json:"is_active,omitempty"`
}

func (*ProductItemSubscriptionForm[AccountID]) Clone

func (form *ProductItemSubscriptionForm[AccountID]) Clone(ctx context.Context) (ProductItemSubscriptionForm[AccountID], error)

type ProductItemSubscriptionManager

type ProductItemSubscriptionManager[AccountID comparable] interface {
	GeneralAppObject

	GetProductItemSubscriptionWithID(ctx context.Context, aid uint64, fill bool) (ProductItemSubscription[AccountID], error)

	NewSubscription(ctx context.Context, account UserAccount[AccountID], productItem ProductItem[AccountID], duration time.Duration, subscriptionType string, autoRenew bool) (ProductItemSubscription[AccountID], error)
	RemoveSubscription(ctx context.Context, subscription ProductItemSubscription[AccountID]) error
	RemoveAllSubscriptions(ctx context.Context) error
	GetSubscriptions(ctx context.Context, subscriptions []ProductItemSubscription[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]ProductItemSubscription[AccountID], error)
	GetSubscriptionCount(ctx context.Context) (uint64, error)
	GetUserSubscriptions(ctx context.Context, account UserAccount[AccountID], subscriptions []ProductItemSubscription[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]ProductItemSubscription[AccountID], error)
	GetUserSubscriptionCount(ctx context.Context, account UserAccount[AccountID]) (uint64, error)
	GetProductItemSubscriptions(ctx context.Context, productItem ProductItem[AccountID], subscriptions []ProductItemSubscription[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]ProductItemSubscription[AccountID], error)
	GetProductItemSubscriptionCount(ctx context.Context, productItem ProductItem[AccountID]) (uint64, error)

	SetRenewalHandler(ctx context.Context, handler RenewalHandlerFunc[AccountID]) error
	ProcessExpiredSubscriptions(ctx context.Context) error

	ToBuiltinObject(ctx context.Context) (*BuiltinProductItemSubscriptionManager[AccountID], error)
}

type ProductManager

type ProductManager[AccountID comparable] interface {
	GeneralAppObject

	GetProductCategoryWithID(ctx context.Context, aid uint64, fill bool) (ProductCategory[AccountID], error)
	GetProductWithID(ctx context.Context, aid uint64, fill bool) (Product[AccountID], error)
	GetProductItemWithID(ctx context.Context, aid uint64, fill bool) (ProductItem[AccountID], error)

	NewProductCategory(ctx context.Context, name string, parentCategory ProductCategory[AccountID]) (ProductCategory[AccountID], error)
	RemoveProductCategory(ctx context.Context, category ProductCategory[AccountID]) error
	RemoveAllProductCategroies(ctx context.Context) error
	GetProductCategories(ctx context.Context, categories []ProductCategory[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]ProductCategory[AccountID], error)
	GetProductCategoryCount(ctx context.Context) (uint64, error)
	SearchForProductCategories(ctx context.Context, searchText string, deepSearch bool, categories []ProductCategory[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]ProductCategory[AccountID], error)
	SearchForProducts(ctx context.Context, searchText string, deepSearch bool, products []Product[AccountID], skip int64, limit int64, queueOrder QueueOrder, category ProductCategory[AccountID]) ([]Product[AccountID], error)
	SearchForProductItems(ctx context.Context, searchText string, deepSearch bool, items []ProductItem[AccountID], skip int64, limit int64, queueOrder QueueOrder, product Product[AccountID], category ProductCategory[AccountID]) ([]ProductItem[AccountID], error)

	ToBuiltinObject(ctx context.Context) (*BuiltinProductManager[AccountID], error)
}

type QueueOrder

type QueueOrder string
const (
	QueueOrderAscending  QueueOrder = "asc"
	QueueOrderDescending QueueOrder = "desc"
)

func (QueueOrder) String

func (q QueueOrder) String() string

type RenewalHandlerFunc

type RenewalHandlerFunc[AccountID comparable] func(ctx context.Context, subscription ProductItemSubscription[AccountID], account UserAccount[AccountID], productItem ProductItem[AccountID]) (success bool, amountCharged float64, err error)

type ShippingMethod

type ShippingMethod interface {
	GeneralAppObject

	GetID(ctx context.Context) (uint64, error)
	GetName(ctx context.Context) (string, error)
	SetName(ctx context.Context, name string) error
	GetPrice(ctx context.Context) (float64, error)
	SetPrice(ctx context.Context, price float64) error

	ToBuiltinObject(ctx context.Context) (*BuiltinShippingMethod, error)
	ToFormObject(ctx context.Context) (*ShippingMethodForm, error)
	ApplyFormObject(ctx context.Context, form *ShippingMethodForm) error
}

type ShippingMethodForm

type ShippingMethodForm struct {
	ID    uint64   `json:"id"`
	Name  *string  `json:"name,omitempty"`
	Price *float64 `json:"price,omitempty"`
}

func (*ShippingMethodForm) Clone

type ShippingMethodManager

type ShippingMethodManager interface {
	GeneralAppObject

	GetShippingMethodWithID(ctx context.Context, aid uint64, fill bool) (ShippingMethod, error)

	NewShippingMethod(ctx context.Context, name string, price float64) (ShippingMethod, error)
	RemoveShippingMethod(ctx context.Context, shippingMethod ShippingMethod) error
	RemoveAllShippingMethods(ctx context.Context) error
	GetShippingMethods(ctx context.Context, shippingMethods []ShippingMethod, skip int64, limit int64, queueOrder QueueOrder) ([]ShippingMethod, error)
	GetShippingMethodCount(ctx context.Context) (uint64, error)
	GetShippingMethodByName(ctx context.Context, name string) (ShippingMethod, error)
	ExistsShippingMethod(ctx context.Context, name string) (bool, error)

	ToBuiltinObject(ctx context.Context) (*BuiltinShippingMethodManager, error)
}

type UserAccount

type UserAccount[AccountID comparable] interface {
	GeneralAppObject

	GetID(ctx context.Context) (AccountID, error)
	GetToken(ctx context.Context) (string, error)
	SetToken(ctx context.Context, token string) error

	GetPassword(ctx context.Context) (string, error)
	SetPassword(ctx context.Context, password string) error
	ValidatePassword(ctx context.Context, password string) (bool, error)

	GetFirstName(ctx context.Context) (string, error)
	SetFirstName(ctx context.Context, name string) error
	GetLastName(ctx context.Context) (string, error)
	SetLastName(ctx context.Context, name string) error

	GetLastUpdatedAt(ctx context.Context) (time.Time, error)
	SetLastUpdatedAt(ctx context.Context, lastUpdateAt time.Time) error

	GetRole(ctx context.Context) (UserRole, error)
	SetRole(ctx context.Context, role UserRole) error

	GetUserLevel(ctx context.Context) (int64, error) // admin level for example
	SetUserLevel(ctx context.Context, level int64) error

	IsSuperUser(ctx context.Context) (bool, error)
	SetSuperUser(ctx context.Context, state bool) error
	IsActive(ctx context.Context) (bool, error)
	SetActive(ctx context.Context, state bool) error

	GetProfileImages(ctx context.Context) ([]FileReadCloser, error)
	SetProfileImages(ctx context.Context, images []FileReader) error
	GetBio(ctx context.Context) (string, error)
	SetBio(ctx context.Context, bio string) error

	// Ban
	Ban(ctx context.Context, till time.Duration, reason string) error
	Unban(ctx context.Context) error
	IsBanned(ctx context.Context) (reason string, err error)

	AllowTrading(ctx context.Context, state bool) error
	IsTradingAllowed(ctx context.Context) (bool, error)

	// Fine
	Fine(ctx context.Context, amount float64) error
	SetPenalty(ctx context.Context, penalty float64) error

	// Wallet (Money, Currency)
	GetWalletCurrency(ctx context.Context) (float64, error)
	SetWalletCurrency(ctx context.Context, currency float64) error
	ChargeWallet(ctx context.Context, currency float64) error
	TransferCurrency(ctx context.Context, to UserAccount[AccountID], amount float64) error

	// Carts
	NewShoppingCart(ctx context.Context, sessionText string) (UserShoppingCart[AccountID], error)
	RemoveShoppingCart(ctx context.Context, cart UserShoppingCart[AccountID]) error
	RemoveAllShoppingCarts(ctx context.Context) error // for this user
	GetShoppingCartCount(ctx context.Context) (uint64, error)
	GetShoppingCarts(ctx context.Context, outCarts []UserShoppingCart[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserShoppingCart[AccountID], error)

	// Addresses
	NewAddress(ctx context.Context, unitNumber, street_number, addressLine1, addressLine2, city, region, postalCode string, country Country, isDefault bool) (UserAddress[AccountID], error)
	RemoveAddress(ctx context.Context, address UserAddress[AccountID]) error
	RemoveAllAddresses(ctx context.Context) error // for this user
	GetAddresses(ctx context.Context, addresses []UserAddress[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserAddress[AccountID], error)
	GetAddressCount(ctx context.Context) (uint64, error)
	GetDefaultAddress(ctx context.Context) (UserAddress[AccountID], error)

	// Payment methods
	NewPaymentMethod(ctx context.Context, paymentType PaymentType, provider, accoutNumber string, expiryDate time.Time, isDefault bool) (UserPaymentMethod[AccountID], error)
	RemovePaymentMethod(ctx context.Context, paymentMethod UserPaymentMethod[AccountID]) error
	RemoveAllPaymentMethods(ctx context.Context) error
	GetPaymentMethods(ctx context.Context, paymentMethods []UserPaymentMethod[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserPaymentMethod[AccountID], error)
	GetPaymentMethodCount(ctx context.Context) (uint64, error)
	GetDefaultPaymentMethod(ctx context.Context) (UserPaymentMethod[AccountID], error)

	// Orders
	RemoveOrder(ctx context.Context, order UserOrder[AccountID]) error
	RemoveAllOrders(ctx context.Context) error // orders for this user
	GetOrders(ctx context.Context, orders []UserOrder[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserOrder[AccountID], error)
	GetOrderCount(ctx context.Context) (uint64, error)

	// Dept
	HasPenalty(ctx context.Context) (bool, error)                                        // if wallet currency is negative it has penalty
	CalculateTotalDeptsWithoutPenalty(ctx context.Context) (currency float64, err error) // total shopping carts dept
	CalculateTotalDepts(ctx context.Context) (currency float64, err error)               // depts without penalty + penalty depts

	// Reviews
	GetUserReviews(ctx context.Context, reviews []UserReview[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserReview[AccountID], error)
	GetUserReviewCount(ctx context.Context) (uint64, error)

	// Subscriptions
	GetSubscriptions(ctx context.Context, subscriptions []ProductItemSubscription[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]ProductItemSubscription[AccountID], error)
	GetSubscriptionCount(ctx context.Context) (uint64, error)
	RemoveSubscription(ctx context.Context, subscription ProductItemSubscription[AccountID]) error
	RemoveAllSubscriptions(ctx context.Context) error

	// Factors
	GetUserFactors(ctx context.Context, factors []UserFactor[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserFactor[AccountID], error)
	GetUserFactorCount(ctx context.Context) (uint64, error)

	// Discounts
	NewDiscount(ctx context.Context, value float64, validCount int64) (UserDiscount[AccountID], error)
	RemoveDiscount(ctx context.Context, discount UserDiscount[AccountID]) error
	RemoveAllDiscounts(ctx context.Context) error
	GetDiscounts(ctx context.Context, discounts []UserDiscount[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserDiscount[AccountID], error)
	GetDiscountCount(ctx context.Context) (uint64, error)

	ToBuiltinObject(ctx context.Context) (*BuiltinUserAccount[AccountID], error)
	ToFormObject(ctx context.Context) (*UserAccountForm[AccountID], error)
	ApplyFormObject(ctx context.Context, form *UserAccountForm[AccountID]) error
}

type UserAccountForm

type UserAccountForm[AccountID comparable] struct {
	ID                       AccountID                            `json:"id"`
	TotalDepts               *float64                             `json:"total_depts,omitempty"`
	TotalDeptsWithoutPenalty *float64                             `json:"total_depts_without_penalty,omitempty"`
	AddressCount             *uint64                              `json:"address_count,omitempty"`
	Bio                      *string                              `json:"bio,omitempty"`
	DefaultAddress           *BuiltinUserAddress[AccountID]       `json:"default_address,omitempty"`
	DefaultPaymentMethod     *BuiltinUserPaymentMethod[AccountID] `json:"default_payment_method,omitempty"`
	FirstName                *string                              `json:"first_name,omitempty"`
	LastName                 *string                              `json:"last_name,omitempty"`
	LastUpdatedAt            *time.Time                           `json:"last_updated_at,omitempty"`
	OrderCount               *uint64                              `json:"order_count,omitempty"`
	Password                 *string                              `json:"password,omitempty"`
	PaymentMethodCount       *uint64                              `json:"payment_method_count,omitempty"`
	ProfileImages            *[]string                            `json:"profile_images,omitempty"`
	Role                     *BuiltinUserRole                     `json:"role,omitempty"`
	ShoppingCartCount        *uint64                              `json:"shopping_cart_count,omitempty"`
	Token                    *string                              `json:"token,omitempty"`
	UserLevel                *int64                               `json:"user_level,omitempty"`
	WalletCurrency           *float64                             `json:"wallet_currency,omitempty"`
	Penalty                  *float64                             `json:"penalty,omitempty"`
	IsActiveState            *bool                                `json:"is_active_state,omitempty"`
	IsBannedState            *string                              `json:"is_banned_state,omitempty"`
	IsSuperUserState         *bool                                `json:"is_super_user_state,omitempty"`
	IsTradingAllowedState    *bool                                `json:"is_trading_allowed,omitempty"`
}

func (*UserAccountForm[AccountID]) Clone

func (form *UserAccountForm[AccountID]) Clone(ctx context.Context) (UserAccountForm[AccountID], error)

type UserAccountManager

type UserAccountManager[AccountID comparable] interface {
	GeneralAppObject

	GetAccount(ctx context.Context, token string) (UserAccount[AccountID], error)
	GetAccountWithID(ctx context.Context, aid AccountID, fill bool) (UserAccount[AccountID], error)

	NewAccount(ctx context.Context, token string, password string, twoFactor string) (UserAccount[AccountID], error)
	RemoveAccount(ctx context.Context, account UserAccount[AccountID]) error
	RemoveAccountWithToken(ctx context.Context, token string, password string, twoFactor string) error
	RemoveAllAccounts(ctx context.Context) error
	GetAccounts(ctx context.Context, accounts []UserAccount[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserAccount[AccountID], error)
	GetAccountCount(ctx context.Context) (uint64, error)

	Authenticate(ctx context.Context, token string, password string, twoFactor string) (UserAccount[AccountID], error)

	RequestTwoFactor(ctx context.Context, token string) (string, error)
	ValidateTwoFactor(ctx context.Context, token string, code string) (bool, error)
	CancelTwoFactor(ctx context.Context, token string) error

	ToBuiltinObject(ctx context.Context) (*BuiltinUserAccountManager[AccountID], error)
}

type UserAddress

type UserAddress[AccountID comparable] interface {
	GeneralAppObject

	GetID(ctx context.Context) (uint64, error)
	GetUserAccountID(ctx context.Context) (AccountID, error)

	GetUnitNumber(ctx context.Context) (string, error)
	SetUnitNumber(ctx context.Context, unitNumber string) error
	GetStreetNumber(ctx context.Context) (string, error)
	SetStreetNumber(ctx context.Context, streetNumber string) error
	GetAddressLine1(ctx context.Context) (string, error)
	SetAddressLine1(ctx context.Context, address string) error
	GetAddressLine2(ctx context.Context) (string, error)
	SetAddressLine2(ctx context.Context, address string) error
	GetCity(ctx context.Context) (string, error)
	SetCity(ctx context.Context, city string) error
	GetRegion(ctx context.Context) (string, error)
	SetRegion(ctx context.Context, region string) error
	GetPostalCode(ctx context.Context) (string, error)
	SetPostalCode(ctx context.Context, code string) error

	GetCountry(ctx context.Context) (Country, error)
	SetCountry(ctx context.Context, country Country) error

	IsDefault(ctx context.Context) (bool, error)
	SetDefault(ctx context.Context) error

	ToBuiltinObject(ctx context.Context) (*BuiltinUserAddress[AccountID], error)
	ToFormObject(ctx context.Context) (*UserAddressForm[AccountID], error)
	ApplyFormObject(ctx context.Context, form *UserAddressForm[AccountID]) error
}

type UserAddressForm

type UserAddressForm[AccountID comparable] struct {
	ID             uint64          `json:"id"`
	UserAccountID  AccountID       `json:"account_id"`
	AddressLine1   *string         `json:"address_line1,omitempty"`
	AddressLine2   *string         `json:"address_line2,omitempty"`
	City           *string         `json:"city,omitempty"`
	Country        *BuiltinCountry `json:"country,omitempty"`
	PostalCode     *string         `json:"postal_code,omitempty"`
	Region         *string         `json:"region,omitempty"`
	StreetNumber   *string         `json:"street_number,omitempty"`
	UnitNumber     *string         `json:"unit_number,omitempty"`
	IsDefaultState *bool           `json:"is_default,omitempty"`
}

func (*UserAddressForm[AccountID]) Clone

func (form *UserAddressForm[AccountID]) Clone(ctx context.Context) (UserAddressForm[AccountID], error)

type UserAddressManager

type UserAddressManager[AccountID comparable] interface {
	GeneralAppObject

	GetAddressWithID(ctx context.Context, aid uint64, fill bool) (UserAddress[AccountID], error)

	RemoveAllAddresses(ctx context.Context) error
	GetAddresses(ctx context.Context, addresses []UserAddress[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserAddress[AccountID], error)
	GetAddressCount(ctx context.Context) (uint64, error)

	ToBuiltinObject(ctx context.Context) (*BuiltinUserAddressManager[AccountID], error)
}

type UserDiscount

type UserDiscount[AccountID comparable] interface {
	GeneralAppObject

	GetID(ctx context.Context) (uint64, error)
	GetUserAccountID(ctx context.Context) (AccountID, error)

	GetCode(ctx context.Context) (string, error)
	SetCode(ctx context.Context, code string) error

	GetValue(ctx context.Context) (float64, error)
	SetValue(ctx context.Context, value float64) error

	GetValidCount(ctx context.Context) (int64, error)
	SetValidCount(ctx context.Context, validCount int64) error
	DecrementValidCount(ctx context.Context) error

	GetUsedBy(ctx context.Context) ([]AccountID, error)
	HasUserUsed(ctx context.Context, account UserAccount[AccountID]) (bool, error)
	MarkAsUsedBy(ctx context.Context, account UserAccount[AccountID]) error

	ToBuiltinObject(ctx context.Context) (*BuiltinUserDiscount[AccountID], error)
	ToFormObject(ctx context.Context) (*UserDiscountForm[AccountID], error)
	ApplyFormObject(ctx context.Context, form *UserDiscountForm[AccountID]) error
}

type UserDiscountForm

type UserDiscountForm[AccountID comparable] struct {
	ID            uint64       `json:"id"`
	UserAccountID AccountID    `json:"account_id"`
	Code          *string      `json:"code,omitempty"`
	Value         *float64     `json:"value,omitempty"`
	ValidCount    *int64       `json:"valid_count,omitempty"`
	UsedBy        *[]AccountID `json:"used_by,omitempty"`
}

func (*UserDiscountForm[AccountID]) Clone

func (form *UserDiscountForm[AccountID]) Clone(ctx context.Context) (UserDiscountForm[AccountID], error)

type UserDiscountManager

type UserDiscountManager[AccountID comparable] interface {
	GeneralAppObject

	GetUserDiscountWithID(ctx context.Context, aid uint64, fill bool) (UserDiscount[AccountID], error)

	NewUserDiscount(ctx context.Context, ownerAccount UserAccount[AccountID], value float64, validCount int64) (UserDiscount[AccountID], error)
	RemoveUserDiscount(ctx context.Context, discount UserDiscount[AccountID]) error
	RemoveAllUserDiscounts(ctx context.Context) error
	GetUserDiscounts(ctx context.Context, discounts []UserDiscount[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserDiscount[AccountID], error)
	GetUserDiscountCount(ctx context.Context) (uint64, error)
	GetUserDiscountByCode(ctx context.Context, code string) (UserDiscount[AccountID], error)
	ExistsUserDiscountCode(ctx context.Context, code string) (bool, error)

	ToBuiltinObject(ctx context.Context) (*BuiltinUserDiscountManager[AccountID], error)
}

type UserFactor

type UserFactor[AccountID comparable] interface {
	GeneralAppObject

	GetID(ctx context.Context) (uint64, error)
	GetUserAccountID(ctx context.Context) (AccountID, error)

	GetProducts(ctx context.Context) (json.RawMessage, error)
	SetProducts(ctx context.Context, products json.RawMessage) error

	GetDiscount(ctx context.Context) (float64, error)
	SetDiscount(ctx context.Context, discount float64) error

	GetTax(ctx context.Context) (float64, error)
	SetTax(ctx context.Context, tax float64) error

	GetAmountPaid(ctx context.Context) (float64, error)
	SetAmountPaid(ctx context.Context, amountPaid float64) error

	ToBuiltinObject(ctx context.Context) (*BuiltinUserFactor[AccountID], error)
	ToFormObject(ctx context.Context) (*UserFactorForm[AccountID], error)
	ApplyFormObject(ctx context.Context, form *UserFactorForm[AccountID]) error
}

type UserFactorForm

type UserFactorForm[AccountID comparable] struct {
	ID            uint64           `json:"id"`
	UserAccountID AccountID        `json:"account_id"`
	Products      *json.RawMessage `json:"products,omitempty"`
	Discount      *float64         `json:"discount,omitempty"`
	Tax           *float64         `json:"tax,omitempty"`
	AmountPaid    *float64         `json:"amount_paid,omitempty"`
}

func (*UserFactorForm[AccountID]) Clone

func (form *UserFactorForm[AccountID]) Clone(ctx context.Context) (UserFactorForm[AccountID], error)

type UserFactorManager

type UserFactorManager[AccountID comparable] interface {
	GeneralAppObject

	GetFactorWithID(ctx context.Context, aid uint64, fill bool) (UserFactor[AccountID], error)

	GetUserFactors(ctx context.Context, account UserAccount[AccountID], factors []UserFactor[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserFactor[AccountID], error)
	GetUserFactorCount(ctx context.Context, account UserAccount[AccountID]) (uint64, error)
	RemoveAllUserFactors(ctx context.Context) error

	ToBuiltinObject(ctx context.Context) (*BuiltinUserFactorManager[AccountID], error)
}

type UserOrder

type UserOrder[AccountID comparable] interface {
	GeneralAppObject

	GetID(ctx context.Context) (uint64, error)
	GetUserAccountID(ctx context.Context) (AccountID, error)

	GetOrderDate(ctx context.Context) (time.Time, error)
	SetOrderDate(ctx context.Context, date time.Time) error

	GetPaymentMethod(ctx context.Context) (UserPaymentMethod[AccountID], error)
	SetPaymentMethod(ctx context.Context, paymentMethod UserPaymentMethod[AccountID]) error
	GetShippingAddress(ctx context.Context) (UserAddress[AccountID], error)
	SetShippingAddress(ctx context.Context, address UserAddress[AccountID]) error
	GetShippingMethod(ctx context.Context) (ShippingMethod, error)
	SetShippingMethod(ctx context.Context, shippingMethod ShippingMethod) error

	GetOrderTotal(ctx context.Context) (float64, error)
	SetOrderTotal(ctx context.Context, price float64) error
	CalculateTotalPrice(ctx context.Context) (float64, error)

	GetStatus(ctx context.Context) (OrderStatus, error)
	SetStatus(ctx context.Context, status OrderStatus) error
	IsDeliveried(ctx context.Context) (bool, error)

	GetUserComment(ctx context.Context) (string, error)
	SetUserComment(ctx context.Context, comment string) error

	GetDeliveryDate(ctx context.Context) (time.Time, error)
	SetDeliveryDate(ctx context.Context, date time.Time) error
	GetDeliveryComment(ctx context.Context) (string, error)
	SetDeliveryComment(ctx context.Context, comment string) error
	Deliver(ctx context.Context, date time.Time, comment string) error

	GetProductItems(ctx context.Context, items []UserOrderProductItem[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserOrderProductItem[AccountID], error)
	GetProductItemCount(ctx context.Context) (uint64, error)
	SetProductItems(ctx context.Context, items []UserOrderProductItem[AccountID]) error

	ToBuiltinObject(ctx context.Context) (*BuiltinUserOrder[AccountID], error)
	ToFormObject(ctx context.Context) (*UserOrderForm[AccountID], error)
	ApplyFormObject(ctx context.Context, form *UserOrderForm[AccountID]) error
}

type UserOrderForm

type UserOrderForm[AccountID comparable] struct {
	ID                uint64                               `json:"id"`
	UserAccountID     AccountID                            `json:"account_id"`
	TotalPrice        *float64                             `json:"total_price,omitempty"`
	DeliveryComment   *string                              `json:"delivery_comment,omitempty"`
	DeliveryDate      *time.Time                           `json:"delivery_date,omitempty"`
	Date              *time.Time                           `json:"date,omitempty"`
	Total             *float64                             `json:"total,omitempty"`
	PaymentMethod     *BuiltinUserPaymentMethod[AccountID] `json:"payment_method,omitempty"`
	ProductItemCount  *uint64                              `json:"product_item_count,omitempty"`
	ShippingAddress   *BuiltinUserAddress[AccountID]       `json:"shipping_address,omitempty"`
	ShippingMethod    *BuiltinShippingMethod               `json:"shipping_method,omitempty"`
	Status            *BuiltinOrderStatus                  `json:"status,omitempty"`
	UserComment       *string                              `json:"user_comment,omitempty"`
	IsDeliveriedState *bool                                `json:"is_deliveried,omitempty"`
}

func (*UserOrderForm[AccountID]) Clone

func (form *UserOrderForm[AccountID]) Clone(ctx context.Context) (UserOrderForm[AccountID], error)

type UserOrderManager

type UserOrderManager[AccountID comparable] interface {
	GeneralAppObject

	GetOrderWithID(ctx context.Context, aid uint64, fill bool) (UserOrder[AccountID], error)

	RemoveAllUserOrders(ctx context.Context) error
	GetUserOrders(ctx context.Context, orders []UserOrder[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserOrder[AccountID], error)
	GetUserOrderCount(ctx context.Context) (uint64, error)

	ToBuiltinObject(ctx context.Context) (*BuiltinUserOrderManager[AccountID], error)
}

type UserOrderProductItem

type UserOrderProductItem[AccountID comparable] struct {
	ProductItem *BuiltinProductItem[AccountID] `json:"product_item"`
	Quantity    uint64                         `json:"quantity"`
	Attributes  json.RawMessage                `json:"attributes,omitempty"`
}

type UserPaymentMethod

type UserPaymentMethod[AccountID comparable] interface {
	GeneralAppObject

	GetID(ctx context.Context) (uint64, error)
	GetUserAccountID(ctx context.Context) (AccountID, error)

	GetPaymentType(ctx context.Context) (PaymentType, error)
	SetPaymentType(ctx context.Context, paymentType PaymentType) error

	GetProvider(ctx context.Context) (string, error)
	SetProvider(ctx context.Context, provider string) error
	GetAccountNumber(ctx context.Context) (string, error)
	SetAccountNumber(ctx context.Context, accountNumber string) error

	GetExpiryDate(ctx context.Context) (time.Time, error)
	SetExpiryDate(ctx context.Context, date time.Time) error
	IsExpired(ctx context.Context) (bool, error)

	IsDefault(ctx context.Context) (bool, error)
	SetDefault(ctx context.Context, state bool) error

	ToBuiltinObject(ctx context.Context) (*BuiltinUserPaymentMethod[AccountID], error)
	ToFormObject(ctx context.Context) (*UserPaymentMethodForm[AccountID], error)
	ApplyFormObject(ctx context.Context, form *UserPaymentMethodForm[AccountID]) error
}

type UserPaymentMethodForm

type UserPaymentMethodForm[AccountID any] struct {
	ID             uint64              `json:"id"`
	UserAccountID  AccountID           `json:"account_id"`
	PaymentType    *BuiltinPaymentType `json:"payment_Type,omitempty"`
	Provider       *string             `json:"provider,omitempty"`
	AccountNumber  *string             `json:"account_number,omitempty"`
	ExpiryDate     *time.Time          `json:"expiry_date,omitempty"`
	IsExpiredState *bool               `json:"is_expired,omitempty"`
	IsDefaultState *bool               `json:"is_default,omitempty"`
}

func (*UserPaymentMethodForm[AccountID]) Clone

func (form *UserPaymentMethodForm[AccountID]) Clone(ctx context.Context) (UserPaymentMethodForm[AccountID], error)

type UserPaymentMethodManager

type UserPaymentMethodManager[AccountID comparable] interface {
	GeneralAppObject

	GetPaymentMethodWithID(ctx context.Context, aid uint64, fill bool) (UserPaymentMethod[AccountID], error)

	RemoveAllPaymentMethods(ctx context.Context) error
	GetPaymentMethods(ctx context.Context, paymentMethods []UserPaymentMethod[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserPaymentMethod[AccountID], error)
	GetPaymentMethodCount(ctx context.Context) (uint64, error)

	ToBuiltinObject(ctx context.Context) (*BuiltinUserPaymentMethodManager[AccountID], error)
}

type UserReview

type UserReview[AccountID comparable] interface {
	GeneralAppObject

	GetID(ctx context.Context) (uint64, error)
	GetUserAccountID(ctx context.Context) (AccountID, error)

	GetRatingValue(ctx context.Context) (int32, error)
	SetRatingValue(ctx context.Context, rating int32) error

	GetComment(ctx context.Context) (string, error)
	SetComment(ctx context.Context, comment string) error

	GetProductItem(ctx context.Context) (ProductItem[AccountID], error)

	ToBuiltinObject(ctx context.Context) (*BuiltinUserReview[AccountID], error)
	ToFormObject(ctx context.Context) (*UserReviewForm[AccountID], error)
	ApplyFormObject(ctx context.Context, form *UserReviewForm[AccountID]) error
}

type UserReviewForm

type UserReviewForm[AccountID comparable] struct {
	ID            uint64                         `json:"id"`
	UserAccountID AccountID                      `json:"user_account_id"`
	RatingValue   *int32                         `json:"rating_value,omitempty"`
	Comment       *string                        `json:"comment,omitempty"`
	ProductItem   *BuiltinProductItem[AccountID] `json:"product_item,omitempty"`
}

func (*UserReviewForm[AccountID]) Clone

func (form *UserReviewForm[AccountID]) Clone(ctx context.Context) (UserReviewForm[AccountID], error)

type UserReviewManager

type UserReviewManager[AccountID comparable] interface {
	GeneralAppObject

	GetUserReviewWithID(ctx context.Context, aid uint64, fill bool) (UserReview[AccountID], error)

	NewUserReview(ctx context.Context, account UserAccount[AccountID], productItem ProductItem[AccountID], ratingValue int32, comment string) (UserReview[AccountID], error)
	RemoveUserReview(ctx context.Context, review UserReview[AccountID]) error
	RemoveAllUserReviews(ctx context.Context) error
	GetUserReviews(ctx context.Context, reviews []UserReview[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserReview[AccountID], error)
	GetUserReviewCount(ctx context.Context) (uint64, error)
	GetUserReviewsForProductItem(ctx context.Context, productItem ProductItem[AccountID], reviews []UserReview[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserReview[AccountID], error)
	GetUserReviewsForAccount(ctx context.Context, account UserAccount[AccountID], reviews []UserReview[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserReview[AccountID], error)

	ToBuiltinObject(ctx context.Context) (*BuiltinUserReviewManager[AccountID], error)
}

type UserRole

type UserRole interface {
	GeneralAppObject

	GetID(ctx context.Context) (uint64, error)
	GetName(ctx context.Context) (string, error)
	SetName(ctx context.Context, name string) error

	ToBuiltinObject(ctx context.Context) (*BuiltinUserRole, error)
	ToFormObject(ctx context.Context) (*UserRoleForm, error)
	ApplyFormObject(ctx context.Context, form *UserRoleForm) error
}

type UserRoleForm

type UserRoleForm struct {
	ID   uint64  `json:"id"`
	Name *string `json:"name,omitempty"`
}

func (*UserRoleForm) Clone

func (form *UserRoleForm) Clone(ctx context.Context) (UserRoleForm, error)

type UserRoleManager

type UserRoleManager interface {
	GeneralAppObject

	GetRoleWithID(ctx context.Context, aid uint64, fill bool) (UserRole, error)

	NewUserRole(ctx context.Context, name string) (UserRole, error)
	RemoveUserRole(ctx context.Context, role UserRole) error
	RemoveAllUserRoles(ctx context.Context) error
	GetUserRoles(ctx context.Context, roles []UserRole, skip int64, limit int64, queueOrder QueueOrder) ([]UserRole, error)
	GetUserRoleCount(ctx context.Context) (uint64, error)
	GetUserRoleByName(ctx context.Context, name string) (UserRole, error)
	ExistsUserRole(ctx context.Context, name string) (bool, error)

	ToBuiltinObject(ctx context.Context) (*BuiltinUserRoleManager, error)
}

type UserShoppingCart

type UserShoppingCart[AccountID comparable] interface {
	GeneralAppObject

	GetID(ctx context.Context) (uint64, error)
	GetUserAccountID(ctx context.Context) (AccountID, error)
	GetSessionText(ctx context.Context) (string, error)
	SetSessionText(ctx context.Context, sessionText string) error

	NewShoppingCartItem(ctx context.Context, item ProductItem[AccountID], count int64, attrs json.RawMessage) (UserShoppingCartItem[AccountID], error)
	RemoveShoppingCartItem(ctx context.Context, item UserShoppingCartItem[AccountID]) error
	RemoveAllShoppingCartItems(ctx context.Context) error
	GetShoppingCartItems(ctx context.Context, items []UserShoppingCartItem[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserShoppingCartItem[AccountID], error)
	GetShoppingCartItemCount(ctx context.Context) (uint64, error)

	CalculateDept(ctx context.Context, shippingMethod ShippingMethod) (float64, error)

	Order(ctx context.Context, paymentMethod UserPaymentMethod[AccountID], address UserAddress[AccountID], shippingMethod ShippingMethod, userComment string, discountCode string) (UserOrder[AccountID], error)

	ToBuiltinObject(ctx context.Context) (*BuiltinUserShoppingCart[AccountID], error)
	ToFormObject(ctx context.Context) (*UserShoppingCartForm[AccountID], error)
	ApplyFormObject(ctx context.Context, form *UserShoppingCartForm[AccountID]) error
}

type UserShoppingCartForm

type UserShoppingCartForm[AccountID comparable] struct {
	ID                    uint64    `json:"id"`
	UserAccountID         AccountID `json:"account_id"`
	SessionText           *string   `json:"session_text,omitempty"`
	ShoppingCartItemCount *uint64   `json:"shopping_cart_item_count,omitempty"`
	Dept                  *float64  `json:"dept,omitempty"`
}

func (*UserShoppingCartForm[AccountID]) Clone

func (form *UserShoppingCartForm[AccountID]) Clone(ctx context.Context) (UserShoppingCartForm[AccountID], error)

type UserShoppingCartItem

type UserShoppingCartItem[AccountID comparable] interface {
	GeneralAppObject

	GetID(ctx context.Context) (uint64, error)
	GetUserAccountID(ctx context.Context) (AccountID, error)
	GetShoppingCart(ctx context.Context) (UserShoppingCart[AccountID], error)

	GetProductItem(ctx context.Context) (ProductItem[AccountID], error)

	GetQuantity(ctx context.Context) (int64, error)
	SetQuantity(ctx context.Context, quantity int64) error
	AddQuantity(ctx context.Context, delta int64) error

	GetAttributes(ctx context.Context) (json.RawMessage, error)
	SetAttributes(ctx context.Context, attrs json.RawMessage) error

	CalculateDept(ctx context.Context) (float64, error)

	ToBuiltinObject(ctx context.Context) (*BuiltinUserShoppingCartItem[AccountID], error)
	ToFormObject(ctx context.Context) (*UserShoppingCartItemForm[AccountID], error)
	ApplyFormObject(ctx context.Context, form *UserShoppingCartItemForm[AccountID]) error
}

type UserShoppingCartItemForm

type UserShoppingCartItemForm[AccountID comparable] struct {
	ID            uint64                              `json:"id"`
	UserAccountID AccountID                           `json:"account_id"`
	Dept          *float64                            `json:"dept,omitempty"`
	ProductItem   *BuiltinProductItem[AccountID]      `json:"product_item,omitempty"`
	Quantity      *int64                              `json:"quantity,omitempty"`
	ShoppingCart  *BuiltinUserShoppingCart[AccountID] `json:"shopping_cart,omitempty"`
	Attributes    *json.RawMessage                    `json:"attributes,omitempty"`
}

func (*UserShoppingCartItemForm[AccountID]) Clone

func (form *UserShoppingCartItemForm[AccountID]) Clone(ctx context.Context) (UserShoppingCartItemForm[AccountID], error)

type UserShoppingCartManager

type UserShoppingCartManager[AccountID comparable] interface {
	GeneralAppObject

	GetShoppingCartWithID(ctx context.Context, aid uint64, fill bool) (UserShoppingCart[AccountID], error)
	GetShoppingCartItemWithID(ctx context.Context, aid uint64, fill bool) (UserShoppingCartItem[AccountID], error)

	RemoveAllShoppingCarts(ctx context.Context) error
	GetShoppingCarts(ctx context.Context, carts []UserShoppingCart[AccountID], skip int64, limit int64, queueOrder QueueOrder) ([]UserShoppingCart[AccountID], error) // for all users
	GetShoppingCartCount(ctx context.Context) (uint64, error)
	GetShoppingCartBySessionText(ctx context.Context, sessionText string) (UserShoppingCart[AccountID], error)

	ToBuiltinObject(ctx context.Context) (*BuiltinUserShoppingCartManager[AccountID], error)
}

Directories

Path Synopsis
db_samples

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL