mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 13:31:56 +00:00
42 lines
907 B
Go
42 lines
907 B
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
// RelationCheck describes a foreign-key style dependency that must exist before processing.
|
|
type RelationCheck struct {
|
|
Name string
|
|
ID *uint
|
|
Exists func(context.Context, uint) (bool, error)
|
|
}
|
|
|
|
// EnsureRelations validates that each RelationCheck is satisfied, returning consistent Fiber errors.
|
|
func EnsureRelations(ctx context.Context, checks ...RelationCheck) error {
|
|
for _, check := range checks {
|
|
if check.ID == nil {
|
|
continue
|
|
}
|
|
|
|
exists, err := check.Exists(ctx, *check.ID)
|
|
if err != nil {
|
|
return fiber.NewError(
|
|
fiber.StatusInternalServerError,
|
|
fmt.Sprintf("Failed to check %s", strings.ToLower(check.Name)),
|
|
)
|
|
}
|
|
if !exists {
|
|
return fiber.NewError(
|
|
fiber.StatusNotFound,
|
|
fmt.Sprintf("%s with id %d not found", check.Name, *check.ID),
|
|
)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|