From 79c175979927a19802bf8bf0f96df0082428ee5f Mon Sep 17 00:00:00 2001 From: bdoerfchen Date: Sun, 20 Jul 2025 19:45:22 +0200 Subject: [PATCH] feat: add resource handler --- cmd/resources.go | 38 +++++++++++++++++++++++++++++++++--- model/resources/resources.go | 17 ++++++++++++++++ 2 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 model/resources/resources.go diff --git a/cmd/resources.go b/cmd/resources.go index 3aafc30..a55c015 100644 --- a/cmd/resources.go +++ b/cmd/resources.go @@ -1,19 +1,51 @@ package cmd import ( + "context" + "git.bissendorf.co/bissendorf/unifood/m/v2/core/handler/dishes" "git.bissendorf.co/bissendorf/unifood/m/v2/core/interfaces" + "git.bissendorf.co/bissendorf/unifood/m/v2/core/interfaces/params" "git.bissendorf.co/bissendorf/unifood/m/v2/core/services/stwhbclient" "git.bissendorf.co/bissendorf/unifood/m/v2/model/external/stwbremen" + "git.bissendorf.co/bissendorf/unifood/m/v2/model/resources" + "git.bissendorf.co/bissendorf/unifood/m/v2/util" ) var availableResources = []interfaces.ResourceCommand[any]{ { - Name: "dishes", - Aliases: []string{"dish", "d"}, - Verbs: []interfaces.Verb{interfaces.VerbGet}, + Name: "resources", + Aliases: []string{"resource", "r"}, + Description: "A meta representation of a usable resources of this CLI", + Verbs: []interfaces.Verb{interfaces.VerbGet}, + Handler: ®isteredResourcesHandler{}, + }, + { + Name: "dishes", + Aliases: []string{"dish", "d"}, + Description: "A dish represents a cooked combination of ingredients that can be bought and consumed", + Verbs: []interfaces.Verb{interfaces.VerbGet}, Handler: &dishes.DishesHandler{ QueryClient: stwhbclient.New[[]stwbremen.Dish](), }, }, } + +type registeredResourcesHandler struct{} + +func (h *registeredResourcesHandler) Get(ctx context.Context, params params.Container) (*interfaces.ResourceList, error) { + return &interfaces.ResourceList{ + ItemKind: "", + Items: util.Transform(availableResources, func(i *interfaces.ResourceCommand[any]) interfaces.Resource { + return &resources.Resource{ + ResourceName: i.Name, + Aliases: i.Aliases, + Description: i.Description, + } + }), + }, nil +} + +func (h *registeredResourcesHandler) GetParametersForVerb(verb interfaces.Verb) []params.Registration { + return []params.Registration{} +} diff --git a/model/resources/resources.go b/model/resources/resources.go new file mode 100644 index 0000000..1917c79 --- /dev/null +++ b/model/resources/resources.go @@ -0,0 +1,17 @@ +package resources + +import "strings" + +type Resource struct { + ResourceName string + Aliases []string + Description string +} + +func (r *Resource) Kind() string { return "Resource" } +func (r *Resource) Name() string { return r.ResourceName } + +func (r *Resource) ColumnNames() []string { return []string{"Aliases", "Description"} } +func (r *Resource) Columns() []any { + return []any{strings.Join(r.Aliases, ", "), r.Description} +} -- 2.49.0