Files
argoyle d32e0ad41b feat(errors): add new entity types for bank connections and transactions
Adds EntityBankConnection and EntityBankTransaction to the
errors package to enhance error handling capabilities related
to banking operations. This improves the clarity and
specificity of error messages associated with bank-related
entities.
2025-11-05 20:08:32 +01:00

99 lines
2.5 KiB
Go

package presenter
import "errors"
type (
Code string
Entity string
)
const (
CodeConflict = Code("CONFLICT")
CodeNotFound = Code("NOT_FOUND")
CodePreconditionFailed = Code("PRECONDITION_FAILED")
)
const (
EntityCompany = Entity("COMPANY")
EntityConsumer = Entity("CONSUMER")
EntityAddress = Entity("ADDRESS")
EntityContactPerson = Entity("CONTACT_PERSON")
EntityActivity = Entity("ACTIVITY")
EntityPrice = Entity("PRICE")
EntityEmployee = Entity("EMPLOYEE")
EntityContract = Entity("CONTRACT")
EntityEmploymentAgreement = Entity("EMPLOYMENT_AGREEMENT")
EntityInvoiceBasis = Entity("INVOICE_BASIS")
EntityInvoice = Entity("INVOICE")
EntitySupplier = Entity("SUPPLIER")
EntitySupplierInvoice = Entity("SUPPLIER_INVOICE")
EntityTimeEntry = Entity("TIME_ENTRY")
EntityEntrySeries = Entity("ENTRY_SERIES")
EntityFiscalYear = Entity("FISCAL_YEAR")
EntityAccountClass = Entity("ACCOUNT_CLASS")
EntityAccountGroup = Entity("ACCOUNT_GROUP")
EntityAccount = Entity("ACCOUNT")
EntityTag = Entity("TAG")
EntityEntry = Entity("ENTRY")
EntityEntryBasis = Entity("ENTRY_BASIS")
EntityBankConnection = Entity("BANK_CONNECTION")
EntityBankTransaction = Entity("BANK_TRANSACTION")
)
type CodedError struct {
Message string
Code Code
Entity Entity
Params map[string]string
}
func NewCodedError(message string, code Code, entity Entity) CodedError {
return CodedError{
Message: message,
Code: code,
Entity: entity,
Params: make(map[string]string),
}
}
func (c CodedError) Error() string {
return c.Message
}
func (c CodedError) Is(err error) bool {
var e CodedError
if errors.As(err, &e) {
return c.Code == e.Code && c.Entity == e.Entity && c.Message == e.Message && mapEqual(c.Params, e.Params)
}
return false
}
func mapEqual(m1, m2 map[string]string) bool {
if len(m1) != len(m2) {
return false
}
for k1, v1 := range m1 {
v2, exists := m2[k1]
if !exists || v1 != v2 {
return false
}
}
return true
}
func (c CodedError) WithParam(key, value string) CodedError {
params := make(map[string]string)
for k, v := range c.Params {
params[k] = v
}
params[key] = value
return CodedError{
Message: c.Message,
Code: c.Code,
Entity: c.Entity,
Params: params,
}
}
var _ error = CodedError{}