55 lines
1.9 KiB
Go
55 lines
1.9 KiB
Go
package srequest
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/tech/sendico/pkg/ledgerconv"
|
|
"github.com/tech/sendico/pkg/merrors"
|
|
"github.com/tech/sendico/pkg/model"
|
|
"github.com/tech/sendico/pkg/model/account_role"
|
|
"go.mongodb.org/mongo-driver/v2/bson"
|
|
)
|
|
|
|
type LedgerAccountType string
|
|
|
|
const (
|
|
LedgerAccountTypeUnspecified LedgerAccountType = "unspecified"
|
|
LedgerAccountTypeAsset LedgerAccountType = "asset"
|
|
LedgerAccountTypeLiability LedgerAccountType = "liability"
|
|
LedgerAccountTypeRevenue LedgerAccountType = "revenue"
|
|
LedgerAccountTypeExpense LedgerAccountType = "expense"
|
|
)
|
|
|
|
type LedgerAccountStatus string
|
|
|
|
const (
|
|
LedgerAccountStatusUnspecified LedgerAccountStatus = "unspecified"
|
|
LedgerAccountStatusActive LedgerAccountStatus = "active"
|
|
LedgerAccountStatusFrozen LedgerAccountStatus = "frozen"
|
|
)
|
|
|
|
type CreateLedgerAccount struct {
|
|
AccountType LedgerAccountType `json:"accountType"`
|
|
Currency string `json:"currency"`
|
|
AllowNegative bool `json:"allowNegative,omitempty"`
|
|
Role account_role.AccountRole `json:"role"`
|
|
Describable model.Describable `json:"describable"`
|
|
OwnerRef *bson.ObjectID `json:"ownerRef,omitempty"`
|
|
Metadata map[string]string `json:"metadata,omitempty"`
|
|
}
|
|
|
|
func (r *CreateLedgerAccount) Validate() error {
|
|
if strings.TrimSpace(r.Currency) == "" {
|
|
return merrors.InvalidArgument("currency is required", "currency")
|
|
}
|
|
if strings.TrimSpace(string(r.AccountType)) == "" || strings.EqualFold(string(r.AccountType), string(LedgerAccountTypeUnspecified)) {
|
|
return merrors.InvalidArgument("accountType is required", "accountType")
|
|
}
|
|
if role := strings.TrimSpace(string(r.Role)); role != "" {
|
|
if _, ok := ledgerconv.ParseAccountRole(role); !ok || ledgerconv.IsAccountRoleUnspecified(role) {
|
|
return merrors.InvalidArgument("role is invalid", "role")
|
|
}
|
|
}
|
|
return nil
|
|
}
|