MM-24135: Migrate AppError from SaveChannel/channel_store.go (#14299)
* MM-24135: Migrate AppError from SaveChannel/channel_store.go This is the first POC of migration of store app errors to plain error. We create a few basic error types in the store package and use them to return the errors from store methods. In the app layer, we inspect the error and re-create the exact app errors. This lets us preserve the same error content, but yet move to plain errors. Since this is a gradual migration, this means that the error inspection code will be duplicated across the app layer whenever a store method is invoked. But all of that should go away once we start propagating the errors higher up the hierarchy. There have been a significant amount of changes in the storetest and searchtest layer, primarily because we have to rename the err variable now that it is of a different type. * Addressed review comments * Made all appError origins to be CreateChannel * Remove typed internal error * Fix translations * fix layer generation Co-authored-by: mattermod <mattermod@users.noreply.github.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
41e58d9769
Коммит
729a84a3e6
73
store/errors.go
Обычный файл
73
store/errors.go
Обычный файл
@@ -0,0 +1,73 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
package store
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// ErrInvalidInput indicates an error that has occured due to an invalid input.
|
||||
type ErrInvalidInput struct {
|
||||
Entity string // The entity which was sent as the input.
|
||||
Field string // The field of the entity which was invalid.
|
||||
Value interface{} // The actual value of the field.
|
||||
}
|
||||
|
||||
func NewErrInvalidInput(entity, field string, value interface{}) *ErrInvalidInput {
|
||||
return &ErrInvalidInput{
|
||||
Entity: entity,
|
||||
Field: field,
|
||||
Value: value,
|
||||
}
|
||||
}
|
||||
|
||||
func (e *ErrInvalidInput) Error() string {
|
||||
return fmt.Sprintf("invalid input: entity: %s field: %s value: %s", e.Entity, e.Field, e.Value)
|
||||
}
|
||||
|
||||
// ErrLimitExceeded indicates an error that has occured because some value exceeded a limit.
|
||||
type ErrLimitExceeded struct {
|
||||
What string // What was the object that exceeded.
|
||||
Count int // The value of the object.
|
||||
meta string // Any additional metadata.
|
||||
}
|
||||
|
||||
func NewErrLimitExceeded(what string, count int, meta string) *ErrLimitExceeded {
|
||||
return &ErrLimitExceeded{
|
||||
What: what,
|
||||
Count: count,
|
||||
meta: meta,
|
||||
}
|
||||
}
|
||||
|
||||
func (e *ErrLimitExceeded) Error() string {
|
||||
return fmt.Sprintf("limit exceeded: what: %s count: %d metadata: %s", e.What, e.Count, e.meta)
|
||||
}
|
||||
|
||||
// ErrConflict indicates a conflict that occured.
|
||||
type ErrConflict struct {
|
||||
Resource string // The resource which created the conflict.
|
||||
err error // Internal error.
|
||||
meta string // Any additional metadata.
|
||||
}
|
||||
|
||||
func NewErrConflict(resource string, err error, meta string) *ErrConflict {
|
||||
return &ErrConflict{
|
||||
Resource: resource,
|
||||
err: err,
|
||||
meta: meta,
|
||||
}
|
||||
}
|
||||
|
||||
func (e *ErrConflict) Error() string {
|
||||
return e.Resource + "exists " + e.meta + " " + e.err.Error()
|
||||
}
|
||||
|
||||
func (e *ErrConflict) Unwrap() error {
|
||||
return e.err
|
||||
}
|
||||
|
||||
// TODO:
|
||||
// type ErrNotFound struct {
|
||||
// }
|
||||
Ссылка в новой задаче
Block a user