Files
sendico/api/pkg/mutil/reorder/reorder.go
Stephan D 62a6631b9a
All checks were successful
ci/woodpecker/push/db Pipeline was successful
ci/woodpecker/push/nats Pipeline was successful
service backend
2025-11-07 18:35:26 +01:00

43 lines
1.1 KiB
Go

package reorder
import (
"github.com/tech/sendico/pkg/merrors"
"github.com/tech/sendico/pkg/model"
)
// IndexableRefs reorders a slice of IndexableRef items
// Returns the reordered slice with updated indices, or an error if indices are invalid
func IndexableRefs(items []model.IndexableRef, oldIndex, newIndex int) ([]model.IndexableRef, error) {
// Find the item to reorder
var targetIndex int = -1
for i, item := range items {
if item.Index == oldIndex {
targetIndex = i
break
}
}
if targetIndex == -1 {
return nil, merrors.InvalidArgument("Item not found at specified index")
}
// Validate new index bounds
if newIndex < 0 || newIndex >= len(items) {
return nil, merrors.InvalidArgument("Invalid new index for reorder")
}
// Remove the item from its current position
itemToMove := items[targetIndex]
items = append(items[:targetIndex], items[targetIndex+1:]...)
// Insert the item at the new position
items = append(items[:newIndex],
append([]model.IndexableRef{itemToMove}, items[newIndex:]...)...)
// Update indices
for i := range items {
items[i].Index = i
}
return items, nil
}