2025-03-30 13:27:34 +02:00
|
|
|
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")
|
2025-11-05 20:08:32 +01:00
|
|
|
EntityBankConnection = Entity("BANK_CONNECTION")
|
|
|
|
|
EntityBankTransaction = Entity("BANK_TRANSACTION")
|
2025-03-30 13:27:34 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
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{}
|