fix(backends): Backend-Löschen verweigern wenn Routing-Regeln darauf zeigen (v1.1.142)
- Service: Pre-Check auf routing_rules.backend_id → ErrInUse vor DELETE - Handler: ErrInUse → HTTP 409 Conflict statt 500 (response.Conflict helper) - UI: Delete-Button deaktiviert + Tooltip "Von N Regeln verwendet" wenn Referenzen existieren Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -117,6 +117,10 @@ func (h *BackendsHandler) Delete(c *gin.Context) {
|
||||
response.NotFound(c, err)
|
||||
return
|
||||
}
|
||||
if errors.Is(err, backends.ErrInUse) {
|
||||
response.Conflict(c, err)
|
||||
return
|
||||
}
|
||||
response.Internal(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -82,6 +82,10 @@ func Forbidden(c *gin.Context, err error) {
|
||||
Err(c, http.StatusForbidden, err)
|
||||
}
|
||||
|
||||
func Conflict(c *gin.Context, err error) {
|
||||
Err(c, http.StatusConflict, err)
|
||||
}
|
||||
|
||||
func Internal(c *gin.Context, err error) {
|
||||
Err(c, http.StatusInternalServerError, err)
|
||||
}
|
||||
|
||||
@@ -14,7 +14,10 @@ import (
|
||||
"git.netcell-it.de/projekte/edgeguard-native/internal/models"
|
||||
)
|
||||
|
||||
var ErrNotFound = errors.New("backend not found")
|
||||
var (
|
||||
ErrNotFound = errors.New("backend not found")
|
||||
ErrInUse = errors.New("backend is referenced by one or more routing rules")
|
||||
)
|
||||
|
||||
type Repo struct {
|
||||
Pool *pgxpool.Pool
|
||||
@@ -99,6 +102,15 @@ RETURNING id, name, scheme, health_check_path, lb_algorithm, websocket, force_ht
|
||||
}
|
||||
|
||||
func (r *Repo) Delete(ctx context.Context, id int64) error {
|
||||
var n int
|
||||
if err := r.Pool.QueryRow(ctx,
|
||||
`SELECT COUNT(*) FROM routing_rules WHERE backend_id = $1`, id,
|
||||
).Scan(&n); err != nil {
|
||||
return err
|
||||
}
|
||||
if n > 0 {
|
||||
return ErrInUse
|
||||
}
|
||||
tag, err := r.Pool.Exec(ctx, `DELETE FROM backends WHERE id = $1`, id)
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
Reference in New Issue
Block a user