init push

This commit is contained in:
2026-07-16 22:16:45 +07:00
commit 8b068bdb10
1021 changed files with 332816 additions and 0 deletions

View File

@@ -0,0 +1,57 @@
package apperrors
import (
"errors"
"fmt"
"strings"
)
type DeleteConflictError struct {
RelatedModules []string
}
func (e *DeleteConflictError) Error() string {
modules := cleanModules(e.RelatedModules)
if len(modules) == 0 {
return "cannot delete this data because it is currently used by another module. please remove the relation first"
}
return fmt.Sprintf(
"cannot delete this data because it is currently used by %s. please remove the relation first",
strings.Join(modules, ", "),
)
}
func IsDeleteConflict(err error) bool {
var target *DeleteConflictError
return errors.As(err, &target)
}
func AsDeleteConflict(err error) (*DeleteConflictError, bool) {
var target *DeleteConflictError
if !errors.As(err, &target) {
return nil, false
}
return target, true
}
func NewDeleteConflictError(relatedModules ...string) error {
return &DeleteConflictError{RelatedModules: cleanModules(relatedModules)}
}
func cleanModules(in []string) []string {
out := make([]string, 0, len(in))
seen := map[string]struct{}{}
for _, module := range in {
trimmed := strings.TrimSpace(module)
if trimmed == "" {
continue
}
key := strings.ToLower(trimmed)
if _, ok := seen[key]; ok {
continue
}
seen[key] = struct{}{}
out = append(out, trimmed)
}
return out
}